Pet*_*ugh 0 python if-statement clause
我用python写了一个简单的小石头,剪刀纸游戏,并且在if子句上遇到了一些困难,这是相关代码:
def play():
user = str(input("rock, paper or scissors? Choose one: "))
print("You chose", user)
if user == "paper" or "Paper":
paper()
elif user == "rock" or "Rock":
rock()
elif user == "scissors" or "Scissors":
scissors()
else:
print("Sorry, your choice was not valid, try again please.")
play()
Run Code Online (Sandbox Code Playgroud)
现在,无论我选择石头,纸张还是剪刀,它总是会触发第一个条件,从而使我进入纸张功能。我实际上已经解决了它,这是我在if子句中输入的第二个条件,即“ Paper”,“ Rock”和“ Scissors”,这些是我在大写中用大写第一个字母表示的。我的问题是,为什么第二个条件触发了第一个if子句?当我移走所有第二根弦时,它工作得非常好,岩石触发了第二个条件,剪刀一个触发了第三个条件,依此类推。我希望这不要太令人困惑。谢谢。
user == "paper" or "Paper"
Run Code Online (Sandbox Code Playgroud)
永远是真的。该or运营商对测试的本身两侧的表情,如果任一为真,的结果or也是如此。上面的测试检查(最多)两件事:
user == "paper"真的吗?如果是这样,则整个表达式为true,因此不要检查第二部分,因为True or x无论的值如何,该表达式始终为true x。"Paper"真的吗?而且由于非零长度字符串在Python中是正确的,因此这一部分始终是正确的。因此,即使第一部分为假,第二部分也始终为真,因此整个表达式始终为真。
您想要这样的东西:
user == "paper" or user == "Paper"
Run Code Online (Sandbox Code Playgroud)
或者,更好的是:
user in ("paper", "Paper")
Run Code Online (Sandbox Code Playgroud)
或者,最重要的是:
user.lower() == "paper"
Run Code Online (Sandbox Code Playgroud)