Boucle if défectueuse
Fermémamiemando Messages postés 33475 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 janvier 2025 - 29 août 2022 à 15:24
- Boucle if défectueuse
- Boucle cmd - Forum Programmation
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Problème xiaomi redmi note 8t s'allume et s'éteint vibre - Forum Xiaomi
- Carte sim défectueuse free ✓ - Forum Free mobile
3 réponses
Modifié le 28 août 2022 à 18:38
Bonjour
étonnant, n'aurais-tu pas appelé une variable False?
On peut utiliser à peu près n'importe quoi comme nom de variable en Python, cela dit mon IDE refuse False, ce n'est peut-être pas possible, mais au cas où.
Sinon, peux-tu tester comme ça pour voir s'il se passe un autre truc chelou
v=check(ind[i][0],[z[0]+b[0],z[1]+b[1]]) print('avant le if v : ', v) if v==False: print('dans le if v : ', v)
Bonjour, la seule raison probable est que ta fonction renvoie parfois 0, et en ptyhon 0 == False, 1 == True, les booléens en python sont des entiers « déguisés ».
Ce n'est de toute façon pas très cohérent de renvoyer soit un booléen, soit un entier, une fonction doit renvoyer toujours le même type de valeur, sinon, bah on a des problèmes de ce type.
29 août 2022 à 13:52
bonjour,
plus propre:
def check(): return False,23 v,n=check() if not v: print("faux",n) else: print("vrai",n)
29 août 2022 à 13:54
Dans presque tous les langages, n'importe quelle valeur différente de zéro est "vraie".
29 août 2022 à 14:18
Quand j'ai lu
mais des fois ça renvoie autre chose
j'ai interprété qu'il y a toute sorte de valeurs, mais effectivement si ça n'arrive qu'avec les 0 c'est évidemment ça le problème.
Modifié le 29 août 2022 à 15:30
Bonjour,
Il faudrait voir un exemple de code minimal qui reproduit le bug mais ce qui est sûr c'est que le design de la fonction laisse à désirer.
- C'est généralement une mauvaise idée d'avoir une fonction dont le type de retour dépend des conditions.
- Si ta fonction doit retourner une valeur particulière car quelque chose d'anormal s'est passé, tu devrais soit lever une exception, soit retourner None, car False vaut en réalité 0, et donc tu ne peux pas distinguer le cas où ta fonction retourne False et le cas où ta fonction retourne 0.
- Si tu décides de retourner None, le test devient :
v = check() if v is None: print("Oops") else: # Suite du programme
- Si ta fonction lève une exception, le test devient :
try: v = check() # Suite du programme except Exception as e: print("Oops")
- Attention, les tests if v is None et if not v ne sont pas équivalents.
- if v is None est déclenché si et seulement si v vaut None,
- if not v est déclenché si et seulement si v vaut None, 0, ou False.
Bonne chance