Programme python liste

Fermé
TNC - 1 mars 2019 à 20:32
 yapuka - 2 mars 2019 à 08:26
Bonsoir, j'ai comme projet de créé un qui-est-ce avec python cependant je rencontre un problème dans une des parties de mon programme. Le but de cette partie est de supprimer de la liste toutes les variables y? quand elles sont égales au choix. Cependant, je n'obtient pas le résultat souhaité, pouvez vous m'aider ?

PROGRAMME


y1=0
y2=0
y3=1
y4=0 # N'est pas pris en compte
y5=1
y6=1 # N'est pas pris en compte
choix=1
liste_homme=["1","2","3","4","5","6"]

for i in liste_homme :
#print(i)
a='y'+i
b=eval(a) #TRANSFORMER EN VARIABLE
print(b)
if b==choix:
liste_homme.remove(i)
print(liste_homme)


CONSOLE :

0
0
1
1
['1', '2', '4', '6']

1 réponse

Bonjour.

Tu as réussi à faire en quelque lignes 3 pratiques qu'il ne faut pas faire, bravo !

- Utiliser eval est une très mauvaise chose, rares sont les cas où l'on a réellement une nécessité de s'en servir.
- Déclarer X variables est à proscrire, pour cela il y a les dictionnaires.
- Supprimer les éléments d'une liste sur laquelle on itère est également à proscrire, car cela provoque des sauts d'éléments, d'où ton incompréhension des éléments non supprimés.

Voici à peu près comment devrait être ton script.

dico_y = {'1':0, '2':0, '3':1, '4':0, '5':1, '6':1} 
liste_homme= ["1", "2", "3", "4", "5", "6"]

choix = 0

for cle, valeur in dico_y.items():
    if valeur == choix:
        liste_homme.remove(cle)
        
print(liste_homme)


Comme tu vois, on itère pas sur la liste, mais sur le dictionnaire.
Mais on aurait tout aussi bien pu utiliser un range pour le faire.
for i in range(1, len(liste_homme)+1):
    if dico_y[str(i)] == choix:
        liste_homme.remove(str(i))


Là on se rend compte que l'on doit convertir en string les valeurs, et on peut se poser la question : Pourquoi stock_er des nombres en tant que chaînes de caractères ?

Purée, mais ce site quoi... Il donne vraiment pas envie de s'y inscrire...
Veuillez écrire correctement s'il vous plaît (pas de SMS, orthographe, grammaire)
Tu peux pas me le dire ce qui te chagrine dans mon message au lieu de me raconter des salades comme quoi j'utilise du sms, ce qui est totalement faux.... Ok le mot stock_er (sans le _) lui pose problème, 3 plombes pour trouver...
Est ont ce demend pourkoi <<= Ironie sur la débilité de ce contrôleur de texte.
0