import random
varA = random.randint(0,20)
print(varA)
if (varA == 0 or 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8):
print("set 1")
elif(varA == 9 or 10 or 11 or 12 or 13 or 14 or 15):
print("set 2")
elif(varA == 16 or 17 or 18 or 19 or 20):
print("set 3")
因此,无论varA变成什么数字,它都会打印出"set 1"。我知道这可能是一个非常明显的东西,但我对Python和编程非常陌生,我只是在摆弄elif,不知道这里出了什么问题。谢谢
Or
并不像英语或。你应该这样做:
if (varA in range(9)):
print("set 1")
elif(varA in range(9,16)):
print("set 2")
elif(varA in range(16,21)):
print("set 3")
或者,你可以做:
if (0 =< varA <= 8):
print("set 1")
elif (9 =< varA <= 15):
print("set 2")
elif (16 =< varA <= 20):
print("set 3")
if varA in [0, 1, 2, 3, 4, 5, 6, 7, 8]:
更好:
if varA >= 0 and varA < 8:
更好:
if 0 <= varA < 8:
if (varA == 0 or varA == 1 ...):
print("set 1")
你需要再次比较1
和varA
,你不能做VarA == 0 or 1
,因为这将从理论上检查1
是否是True
,事实确实如此。
所以我可以把你的代码翻译成:
if (varA == 0 or 1 == True or 2 == True ...)
任何大于或等于1的数字都将变为True
这就是您的代码失败的原因,@shashank在range()
解决方案中击败了我,所以我只需简单地解释您的错误就可以了。
if
语句中的or
语句将始终使表达式为true。这是因为您正在对值1, 2, 3...
执行逻辑或操作,该值将始终为true。