我是Python新手,目前正在尝试制作石头、布、剪刀来更好地学习Python语言。一、 但是,我在询问用户选择时遇到问题。这是正在起作用的函数
def askUser():
global userAnswerINTEGER
global userAnswer
global rock
global paper
global scissors
userAnswer = input("Rock, Paper, or Scissors? ")
print(userAnswer)
userAnswer = 0
if userAnswer == (rock):
userAnswerINTEGER = 1
results()
if userAnswer == (paper):
userAnswerINTEGER = 2
results()
if userAnswer == (scissors):
userAnswerINTEGER = 3
results()
if userAnswer != rock or paper or scissors:
print('Please, pick a valid answer choice.')
askUser()
我在文件中有其他变量
rock = "Rock"
paper = "Paper"
scissors = "Scissors"
userAnswer = 0
但是,无论我在提示符中输入什么,它都会打印“请,选择一个有效的答案选项”。我如何解决这个问题
您可以使用Enum
代码中有两个问题共同导致此问题
第一个问题是,当您找到匹配项时,您并没有结束当前函数调用,而是调用其他函数。当该函数(最终)返回时,调用它的函数将继续运行。由于所有的
if
条件都是相互独立的,因此在调用的函数返回后,您将测试所有其他条件这就是另一个问题。错误值的条件写入错误。您有
if userAnswer != rock or paper or scissors:
,我认为您的意思是“如果userAnswer不是石头、布或剪刀”,但Python对此的解释不同。您的条件等价于if (userAnswer != rock) or (paper) or (scissors)
。也就是说,后两个变量没有与userAnswer
进行比较,而是直接测试“真实性”。Python只在字符串为空时才将其视为“false”,因此"Paper"
和"Scissors"
都为true,因此该条件始终满足有多种方法可以解决此问题。我建议通过使用
if
、elif
和else
使您的所有条件成为一个更大的复合语句的一部分,来解决上述问题。这使您可以消除不可识别输入的条件,因为您已经排除了语句前面的所有有效输入:我还建议您使用循环,而不是递归函数调用来进行流控制。将上面的整个块(以及它上面的输入提示)放入
while True
循环中,然后从整个函数中return
或者从循环中break
生成成功的匹配案例(即if
和elif
块)(如果您仍然有所有这些都通用的东西要做的话)。只有坏值会继续循环,而且它们可以无限期地循环你认为
userAnswer = 0
对你刚才键入的号码有什么影响更好的办法是:
相关问题 更多 >
编程相关推荐