分辨
当一个整数包含" 0"或" 4"输入后,此if语句仅返回语句中的第一个。
例如,在下面的代码中,如果我输入" 60",它将执行:
打印"很好,你不贪婪 - 你赢了!"出口(0)
不是
死了("你贪婪的混蛋!")
正如我所期望的那样,怎么样> = 50。
尝试了一系列更改,但似乎无法按预期执行。谁知道这里发生了什么?
def gold_room():
print "This room is full of gold. How much do you take?"
number_type = False
while True:
choice = raw_input("> ")
how_much = int(choice)
if "0" in choice or "4" in choice and how_much < 50:
print "Nice, you're not greedy - you win!"
exit(0)
elif "0" in choice or "4" in choice and how_much >= 50:
dead("You greedy bastard!")
else:
print "Man, learn to type a number. Put a 0 or a 4 in your number."
答案 0 :(得分:2)
您有运营订单问题。 and
运算符比or
运算符绑定得更紧密,因此当您编写:
if "0" in choice or "4" in choice and how_much < 50:
你实际上得到了:
if ("0" in choice) or ("4" in choice and how_much < 50):
并希望,通过这些括号,显而易见的是,为什么进入60
会触发&#34;尼斯,你不会贪婪 - 你赢了!&#34; message(因为它匹配"0" in choice
coindition,并且因为该条件为真,所以整个or
语句都为真。)
添加括号以获得所需内容:
if ("0" in choice or "4" in choice) and how_much < 50:
有关详细信息,请参阅this article。
答案 1 :(得分:1)
你的条件中需要一些括号,以确保按照你想要的方式进行评估,例如:
if ("0" in choice or "4" in choice) and how_much < 50:
在下一个条件下你也需要类似的东西。
答案 2 :(得分:1)
您应该将条件分成逻辑组。此外,您重复了条件"0" in choice or "4" in choice
,使用如下所示的优化结构:
if "0" in choice or "4" in choice:
if how_much < 50:
print "Nice, you're not greedy - you win!"
exit(0)
elif how_much >= 50:
dead("You greedy bastard!")
else:
print "Man, learn to type a number. Put a 0 or a 4 in your number."
答案 3 :(得分:0)
那是因为和在或之前执行 https://docs.python.org/3/reference/expressions.html#operator-precedence 在正确的位置的一些()将解决这个问题。
如果将测试分成不同的功能,那么测试它也会更容易
答案 4 :(得分:0)
Python会这样做: choice = '60' how_much = 60 如果选择中的“0”(将返回True)或选择中的“4”和how_much&lt; 50(这将返回false但是因为你这样做了或者它会继续它) 你应该这样做:
if ("0" in choice or "4" in choice) and how_much < 50:
print "Nice, you're not greedy - you win!"
exit(0)
elif how_much >= 50:
dead("You greedy bastard!")
只有当它返回True时,parantheses才会这样做,然后比较看看变量“how_much”是否小于50。 之前,它正在检查“0”是否在选择中,或者如果选择中的4和how_much小于50. OR使得它只有一个语句必须为True才能继续下一行代码(AND使得“4选择和how_much&lt; 50”只返回真或假,必须与“0选择”进行比较)
很抱歉,如果它没有多大意义,但我困了 希望你明白了。