Un conseil pour l'avenir : réfléchissez à votre code comme si vous étiez l'ordinateur. dans d'atroces détails . Par exemple, j'aurais littéralement cette conversation avec moi-même :
Hmm, quand day = 'Saturday'
le code renvoie False
même si je pense que ça ne devrait pas. Voyons ce qui se passe ligne par ligne.
def weekend(day):
- Ok, ça semble bon, à partir de maintenant je vais remplacer
day
con 'Saturday'
à chaque fois que je le vois...
if day != 'Saturday' or day != 'Sunday':
- Ok, donc je vais mentalement traduire ça en
if 'Saturday' != 'Saturday' or 'Saturday' != 'Sunday':
.
- Maintenant, je vais le simplifier en évaluant les comparaisons.
-
'Saturday' != 'Saturday'
devient False
-
'Saturday' != 'Sunday':
devient True
- En les branchant, je vois que le
if
La déclaration dit if False or True
qui est identique à if True
. Cela signifie donc que day = Saturday
conduit à une valeur de retour de False
.
Aha, donc maintenant je vois ce qui n'allait pas avec le day = 'Saturday'
l'affaire ; le day != 'Sunday'
signifie que la if
évalué à True
.
Ainsi, alors que le code ci-dessous renvoie True
para day = 'Saturday'
,
def weekend(day):
if day != 'Saturday':
return False
else:
return True
et ce code fonctionnerait pour day = 'Sunday'
,
def weekend(day):
if day != 'Sunday':
return False
else:
return True
les deux ne peuvent pas être combinés avec un or
.
Essayez donc de vous parler comme ça à l'avenir - c'est super utile pour le débogage, surtout quand la logique booléenne est confuse.
(Pour mémoire, je pense que return day.lower() in ['saturday','sunday']
est la meilleure façon d'aborder la question).