tri de 2 variables - Python - Programmation
Marsh Posté le 06-05-2014 à 13:35:05
Pas sûr d'avoir compris.
Si tu veux ne garder que les lettres, tu peux écrire :
Code :
|
Marsh Posté le 06-05-2014 à 15:57:08
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 ?
Marsh Posté le 06-05-2014 à 17:04:07
As-tu essayé mon code ?
Marsh Posté le 06-05-2014 à 18:05:20
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[]
Marsh Posté le 07-05-2014 à 09:52:16
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?
Marsh Posté le 07-05-2014 à 13:59:39
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
Marsh Posté le 05-05-2014 à 15:41:47
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.