Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1032 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  tri de 2 variables

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tri de 2 variables

n°2227180
docbour
Timeo hominem unius libri
Posté le 05-05-2014 à 15:41:47  profilanswer
 

Bonjour,
toujours débutant mais ayant fait des progrès, je me trouve confronté à un nouveau problème que je n'arive pas à résoudre.
 
une partie de mon programme consiste à trier une suite de lettre et de chiffres pour les rendre lisibles dans une notation particulière.
 
Je me trouve avec des parties remplies( par exemple ici des chiffres romains dans bMSL) que je dois mettre dans ma variable bMThRomain si celle ci est vide. Si cette dernière possède déja des chiffres romains il suffit de les laisser dans la variable.
Pour la suite j'ai besoin des différentes fonctions thromain().
 
Le problème est: si bMSL est vide il me retourne [] ce qui est correct, par contre si bMSL contient des letrres, il me retourne trois fois les mêmes lettres.
Comment faire pour n'avoir qu'une fois les même lettres?
 
Voici le programme qui résume mon problème:
 
 
# -*-coding:Latin-1 -*
 
bMSL=['V','I','I']
bMThRomain =[]
def thromain():
    #on extrait l'acronyme lettre romaine
    for lettre in bMSL:
        if lettre in "IV":
            bMThRomain.append(lettre)
    return bMThRomain
 
 
def essai ():
    #on répond en fonction de bMThRomain
    if thromain()==[]:
        thromain()
    elif thromain()!=[]:
        thromain()
    return thromain()
 
 
 
print (essai())
 
 
 
 
Merci de votre aide.

mood
Publicité
Posté le 05-05-2014 à 15:41:47  profilanswer
 

n°2227311
suizokukan
Posté le 06-05-2014 à 13:35:05  profilanswer
 

Pas sûr d'avoir compris.
 
Si tu veux ne garder que les lettres, tu peux écrire :
 

Code :
  1. res = [lettre for lettre in bMSL if lettre in "VI"]


---------------
rule #1 : trust the python
n°2227331
docbour
Timeo hominem unius libri
Posté le 06-05-2014 à 15:57:08  profilanswer
 

Je vais essayer de  formuler différemment  mon problème.
 
En fait j'ai trois entrées possibles pour une même variable:  
 soit trois lettres (prises dans A B C D)
 soit un chiffre arabe de 1 à 8
 soit un chiffre romain de I à VIII
 
Donc lorsqu'une entrée est faite les 2 autres variables sont vides et je dois les calculer pour avoir en résultat final l'affichage des 3 modes différents.
 
Dans l'exemple que je donne mon entrée se fait par un chiffre romain.
def thromain() vérifie qu'il s'agit bien d'un I ou d'un V
puis def essai() teste si le chiffre romain est vide  et renvoi vide, et s'il est renseigné devrait renvoyer le chiffre romains. Le probléme est qu'il le renvoie mais 3 fois (par exemple si je r'e'ntre VII il renvoie VII,VII,VII).
Que faire ?

n°2227352
suizokukan
Posté le 06-05-2014 à 17:04:07  profilanswer
 

As-tu essayé mon code ?


---------------
rule #1 : trust the python
n°2227364
docbour
Timeo hominem unius libri
Posté le 06-05-2014 à 18:05:20  profilanswer
 

Oui; mais je ne suis pas sûr de l'avoir mis au bon endroit
def thromain():
    #on extrait l'acronyme lettre romaine
    res = [lettre for lettre in bMSL if lettre in "VI"]
    return bMThRomain  
 
et il me retourne[]

n°2227429
masklinn
í dag viðrar vel til loftárása
Posté le 07-05-2014 à 09:52:16  profilanswer
 

docbour a écrit :

Comment faire pour n'avoir qu'une fois les même lettres?


En n'appellant pas 5 fois une fonction avec des effets de bord? Là ton machin met les lettres "correctes" dans une variable globale (bMThRomain) et renvoie son contenu, donc à chaque appel ça ajoute les lettres trouvés à l'existant, qui contient déjà le bordel ajouté dedans par les appels précédents. Si rien ne matche c'est une noop, mais si tu trouves des caractères ils se retrouvent accumulés en triple (et en quadruple si tu inverses tes clauses)

 

Pourquoi tu as un bordel pareil au lieu d'une fonction pure, et accessoirement pourquoi tu appelles ta fonction à répétition au lieu de l'appeler une seule fois et de regarder son résultat?


Message édité par masklinn le 07-05-2014 à 09:53:20

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2227470
docbour
Timeo hominem unius libri
Posté le 07-05-2014 à 13:59:39  profilanswer
 

OK!
j'ai donc fait:
 
# -*-coding:Latin-1 -*
 
bMSL=['V','I','I']
bMThRomain =[]
def thromain():
    #on extrait l'acronyme lettre romaine
    for lettre in bMSL:
        if lettre in "IV":
            bMThRomain.append(lettre)
 
    if bMThRomain==[]:
            bMThRomain
    elif bMThRomain!=[]:
            bMThRomain
    return bMThRomain
print (thromain())
 
et cela marche.
Merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  tri de 2 variables

 

Sujets relatifs
Batch recup nombres d'un .txt dans variables.Integrer des variables dans une div.
Import... où passent mes variables ?générer des variables aléatoires avec boost
Memoriser des variables d'une function à l'autreLire données pas à pas dans un fichier et stocker dans variables
Ajouter des variables systémes dans un Modèle OutlookQuestion pour les conditions et les variables
Les variables bases en C++Multiples variables dans "count" et "select" en XSL
Plus de sujets relatifs à : tri de 2 variables


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR