Python—调用自身的方法

Python—调用自身的方法,python,Python,我正在努力学习Python。我只是做了一个简单的石头,布,剪刀的游戏来练习。我有个小问题 当每个玩家选择相同的项目时,游戏以平局结束 当玩家犯了错误,不得不再次选择时,变量为空。请注意,播放器1显示“无” 这就是方法。问题发生在else分支中 def play1(): player1_choice = input("Player 1 - Go: ") if (check(player1_choice)): return player1_choice e

我正在努力学习Python。我只是做了一个简单的石头,布,剪刀的游戏来练习。我有个小问题

当每个玩家选择相同的项目时,游戏以平局结束

当玩家犯了错误,不得不再次选择时,变量为空。请注意,播放器1显示“无”

这就是方法。问题发生在else分支中

def play1():
    player1_choice = input("Player 1 - Go: ")
    if (check(player1_choice)):
        return player1_choice
    else:
        print(error_msg)
        play1() # Something is wrong here.

我做错了什么?我怎样才能修好它?谢谢

如果不需要,请不要使用递归。试试这个:

def play1():
    while True:
        player1_choice = input("Player 1 - Go: ")
        if (check(player1_choice)):
            return player1_choice
        else:
            print(error_msg)

这是一个经典的while循环应用程序;您希望循环,直到您得到一个合理的答案(而已知的答案是不可接受的),然后将该答案返回给调用程序

当您知道进入循环时必须重复多少次时,请使用for循环

当您有一份工作可以:

  • 做一些简单的事情
  • 将剩余的任务减少到更小、更接近“完成”状态的任务
  • 将较小的任务传递给相同的函数进行进一步处理

  • 在这个应用程序中,从用户那里得到一个错误的答案并不会比您开始时更接近一个解决方案(一个有效的答案)。现在的任务不再简单了。进一步的处理是相同的,但是你也可以通过迭代循环得到它。

    else
    中,你应该让它
    return play1()
    如果一个玩家是愚蠢的或恶意的,这个函数会毁掉你的堆栈。太好了。这很有效。非常感谢。唯一的变化是,我在返回后添加了一个中断。我不知道是否需要它,但我担心这个循环会永远持续下去。它不仅不需要,而且你永远无法找到它——它是“死”代码。返回将使您完全脱离函数,因此break是非函数的。这有点像给自杀者戴上手铐。