Python 我的代码似乎只让玩家2获胜。我不确定我需要改变什么

Python 我的代码似乎只让玩家2获胜。我不确定我需要改变什么,python,python-3.x,Python,Python 3.x,我有一个人类玩家和一个随机玩家。 人类玩家是一个输入,而随机玩家只是玩一个随机移动。我让他们互相对抗,球员2总是赢 我不知道少了什么。我试过很多东西。我试过编辑beats函数,但我需要它作为家庭作业。他们在起始代码中给了我们这个 我认为这与球员有关 这是一个代码链接:第81行有一个输入错误:elif move2,move1:此elif将始终返回true。我假设你忘了调用beats函数。将其更改为elif beatsmove2,move1:您的代码有几个问题,你忘了在play_round方法的el

我有一个人类玩家和一个随机玩家。 人类玩家是一个输入,而随机玩家只是玩一个随机移动。我让他们互相对抗,球员2总是赢

我不知道少了什么。我试过很多东西。我试过编辑beats函数,但我需要它作为家庭作业。他们在起始代码中给了我们这个

我认为这与球员有关


这是一个代码链接:

第81行有一个输入错误:elif move2,move1:此elif将始终返回true。我假设你忘了调用beats函数。将其更改为elif beatsmove2,move1:

您的代码有几个问题,你忘了在play_round方法的elif块中调用beats。但这只会让人类赢得所有的比赛,而不是所有的比赛。玩家1无法获胜的原因是人类的输入总是被忽略

原因在HumanPlayer类的本节中:

具体地说,问题是在return语句返回人类玩家选择的移动之前,您打破了循环。return语句永远不会运行,因此函数在默认情况下不返回任何内容,因为其代码在函数末尾运行,而不返回任何其他内容

只需删除break语句即可解决此问题。当return语句退出函数时,循环仍将结束,因此不需要单独中断

或者,您可以在while循环中放置测试未知移动的条件,而不是在内部单独的if语句中,并在循环结束后返回:

playermove = input("Please Pick: Rock, Paper, or Scissors ").lower()
while playermove not in moves:
    print("Sorry invalid imput")
    playermove = input("Please Pick: Rock, Paper, or Scissors ").lower()
return playermove
请注意,在Python 3.8中,它目前处于测试阶段,尚未完全发布,您将能够使用新的:=walrus运算符避免输入行的重复,该运算符执行中间表达式赋值:

while (playermove := input("Please Pick: Rock, Paper, or Scissors ").lower()) not in moves:
    print("Sorry invalid imput")
请注意,我将较低的调用更改为在获得输入后立即完成。除了看起来更好之外,这实际上修复了您最终会发现的另一个错误,即错误输入的移动名称将被输入代码识别为有效,但将以其意外的格式返回到游戏代码,这将导致其他代码微妙地中断


您可能还希望收紧逻辑的其他部分,以便更好地处理无效字符串。例如,如果您的beats函数进行了一些验证,您会发现一个None被传递,而不仅仅是一个意外的赢家。

请在问题本身中包含您的代码或a。堆栈溢出问题或多或少需要是自包含的。如果链接的代码在将来发生更改或被删除,这个问题将无法理解。请在问题中包含代码的基本部分;这应该是一个很好的例子来说明这些问题!该项目正在按计划进行。我才刚刚开始,我希望很快这些东西就会变成第二天性
while (playermove := input("Please Pick: Rock, Paper, or Scissors ").lower()) not in moves:
    print("Sorry invalid imput")