Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,每当我尝试将字符串输入与字符串变量进行比较时,它都不会起作用_Python_Random - Fatal编程技术网

在Python中,每当我尝试将字符串输入与字符串变量进行比较时,它都不会起作用

在Python中,每当我尝试将字符串输入与字符串变量进行比较时,它都不会起作用,python,random,Python,Random,我是Python新手,目前正在尝试制作石头、布、剪刀来更好地学习Python语言。一、 但是,我在询问用户选择时遇到问题。这是正在起作用的函数 def askUser(): 全局用户应答整数 全局用户应答 环球摇滚 全球文件 全球剪刀 userAnswer=输入(“石头、布或剪刀?”) 打印(用户应答) userAnswer=0 如果userAnswer==(摇滚乐): userAnswerINTEGER=1 结果() 如果userAnswer==(论文): userAnswerINTEGER=

我是Python新手,目前正在尝试制作石头、布、剪刀来更好地学习Python语言。一、 但是,我在询问用户选择时遇到问题。这是正在起作用的函数

def askUser():
全局用户应答整数
全局用户应答
环球摇滚
全球文件
全球剪刀
userAnswer=输入(“石头、布或剪刀?”)
打印(用户应答)
userAnswer=0
如果userAnswer==(摇滚乐):
userAnswerINTEGER=1
结果()
如果userAnswer==(论文):
userAnswerINTEGER=2
结果()
如果userAnswer==(剪刀):
userAnswerINTEGER=3
结果()
如果用户回答!=石头、布或剪刀:
打印('请选择一个有效的答案选项')
askUser()
我在文件中有其他变量

rock=“rock”
paper=“paper”
剪刀=“剪刀”
userAnswer=0

但是,无论我在提示符中输入什么,它都会打印“请选择一个有效的答案选项”。我如何解决这个问题?

您认为
userAnswer=0
对您刚才键入的数字有什么影响

更好的办法是:

answers = { 'Rock': 1, 'Paper': 2, 'Scissors': 3 }
...
while 1:
  userAnswer = input("Rock, Paper, or Scissors? ")
  if userAnswer in answers:
    break
  print( "Try again." )

userAnswerInteger = answers[userAnswer]

您认为
userAnswer=0
对您刚才键入的号码有什么影响

更好的办法是:

answers = { 'Rock': 1, 'Paper': 2, 'Scissors': 3 }
...
while 1:
  userAnswer = input("Rock, Paper, or Scissors? ")
  if userAnswer in answers:
    break
  print( "Try again." )

userAnswerInteger = answers[userAnswer]

代码中有两个问题共同导致此问题

第一个问题是,当您找到匹配项时,您并没有结束当前函数调用,而是调用其他函数。当该函数(最终)返回时,调用它的函数将继续运行。由于所有
if
条件都是相互独立的,因此在调用的函数返回后,您将测试所有其他条件

这就是另一个问题。错误值的条件写入错误。如果userAnswer!=石头、布或剪刀:,我认为您的意思是“如果userAnswer不是石头、布或剪刀”,但Python对此的解释不同。如果(userAnswer!=rock)或(纸)或(剪刀),您的条件相当于
。也就是说,后两个变量不是与
userAnswer
进行比较,而是直接测试“真实性”。Python只在字符串为空时才将其视为“false”,因此
“Paper”
“剪刀”
都为true,因此该条件始终满足

有多种方法可以解决此问题。我建议通过使用
if
elif
else
将您的所有条件作为一个更大的复合语句的一部分,来解决上面提到的两个问题。这使您可以消除不可识别输入的条件,因为您已经排除了语句前面的所有有效输入:

if userAnswer == rock:
    ...
elif userAnswer == paper:
    ...
elif userAnswer == scissors:
    ...
else:
    print('Please, pick a valid answer choice.')

我还建议您使用循环,而不是递归函数调用来进行流控制。将上面的整个块(以及它上面的输入提示)放入
while True
循环中,然后进行成功匹配案例(如果
if
elif
块),或者
从整个函数返回
,或者
从循环中中断
(如果您仍然有所有这些块都需要做的事情)。只有坏值会继续循环,而且它们可以无限期地循环

代码中有两个问题共同导致了此问题

第一个问题是,当您找到匹配项时,您并没有结束当前函数调用,而是调用其他函数。当该函数(最终)返回时,调用它的函数将继续运行。由于所有
if
条件都是相互独立的,因此在调用的函数返回后,您将测试所有其他条件

这就是另一个问题。错误值的条件写入错误。如果userAnswer!=石头、布或剪刀:
,我认为您的意思是“如果userAnswer不是石头、布或剪刀”,但Python对此的解释不同。如果(userAnswer!=rock)或(纸)或(剪刀)
,您的条件相当于
。也就是说,后两个变量不是与
userAnswer
进行比较,而是直接测试“真实性”。Python只在字符串为空时才将其视为“false”,因此
“Paper”
“剪刀”
都为true,因此该条件始终满足

有多种方法可以解决此问题。我建议通过使用
if
elif
else
将您的所有条件作为一个更大的复合语句的一部分,来解决上面提到的两个问题。这使您可以消除不可识别输入的条件,因为您已经排除了语句前面的所有有效输入:

if userAnswer == rock:
    ...
elif userAnswer == paper:
    ...
elif userAnswer == scissors:
    ...
else:
    print('Please, pick a valid answer choice.')
我还建议您使用循环,而不是递归函数调用来进行流控制。将上面的整个块(以及它上面的输入提示)放入
while True
循环中,然后进行成功匹配案例(如果
if
elif
块),或者
从整个函数返回
,或者
从循环中中断
(如果您仍然有所有这些块都需要做的事情)。只有坏值会继续循环,而且它们可以无限期地循环

您可以使用Enum

import enum

class Game(enum.Enum):
    Rock=1
    Paper=2
    Scissors=3
    
    @staticmethod
    def play():
        userAnswer = input("Rock, Paper, or Scissors?")
        if userAnswer not in [e.name for e in Game]:
            print("Please, pick a valid answer choice.")
        else:
            for e in Game:
                if e.name == userAnswer:
                    print(e.value)
            
        Game.play()
游戏

您可以使用Enum

import enum

class Game(enum.Enum):
    Rock=1
    Paper=2
    Scissors=3
    
    @staticmethod
    def play():
        userAnswer = input("Rock, Paper, or Scissors?")
        if userAnswer not in [e.name for e in Game]:
            print("Please, pick a valid answer choice.")
        else:
            for e in Game:
                if e.name == userAnswer:
                    print(e.value)
            
        Game.play()
游戏


我看不到任何退出
while
的方法。非常正确,捕捉良好。我看不到任何退出
while
的方法。非常正确,捕捉良好。