Python随机程序无法解决

时间:2015-03-24 00:02:55

标签: python if-statement random fall-through

我在我的Raspberry Pi上制作了一个基本的随机程序,它有点像这样。

import random
print ("Welcome to the PC Expo's new game, PC Dispenser, what will you win?")
WinorLose = random.randint(1, 1000)
if WinorLose <100:
    print ("You won a Nintendo Wii.")
elif WinorLose >200:
    print ("You won a Sony PSP.")
elif WinorLose > 300:
    print ("You won a Nintendo Wii U.")
elif WinorLose > 400:
    print ("You won a Sony PS Vita.")
else:
    print ("Not your lucky day, Try again.")

print ("Thank you for the visit.")

如果你不知道它做了什么,它有可能给你一个虚拟的PSP,Wii U等等。但它所做的只是打印“你赢得索尼PSP”,或“不是你的幸运日,再试一次”。怎么了?任何修复?

2 个答案:

答案 0 :(得分:6)

将最大的数字放在第一位:

WinorLose = random.randint(1, 1000)
print(WinorLose)
if WinorLose > 400:
    print ("You won a Sony PS Vita.")
elif WinorLose > 300:
    print ("You won a Nintendo Wii U.")
elif WinorLose > 200:
    print ("You won a Sony PSP.")
elif WinorLose < 100:
    print ("You won a Nintendo Wii.")   
else:
    print ("Not your lucky day, Try again.")

如果WinorLose> 400,那么它也是> 100,因此您将始终打印第一个语句。

您可能还想使用上限和下限:

if 400 <= WinorLose < 500:
    print ("You won a Sony PS Vita.")
elif 300 <= WinorLose < 400:
    print("You won a Nintendo Wii U.")
elif 200 <= WinorLose < 300:
    print ("You won a Sony PSP.")
elif  WinorLose < 200:
    print ("You won a Nintendo Wii.")    
else:
    print ("Not your lucky day, Try again.")

使用if 400 <= WinorLose < 500等..将以任何顺序工作,因为我们正在设置一个具有下限和上限的范围,因此除非WinorLose在该范围内,否则该语句将不会计算为True。

答案 1 :(得分:0)

我知道上面有一个答案,但我想这并没有解释为什么你的工作不起作用,所以我会指出你这样你下次就可以避免它。

让我们考虑问题发生的位置。

elif WinorLose > 200:

对于任何大于200的数字都是如此,因此在您的情况下为201..1000;因此if语句已经完成,因为已满足条件。对于代码中的其他条件,这也是相同的。

希望这能解释为什么你的工作没有按预期工作。