在我的程序中,我想与用户交互,并要求他按特定字母做一些事情(我认为这个游戏的逻辑与我的问题无关)。当我开始游戏并作为第一个字母时,我按下' q'程序立刻退出,但是当我玩了一段时间(使用几次' g'' r')我必须按几次' q'在我退出节目之前(每次我都得到与游戏开始时相同的提示"输入g开始......") 我使用的是Canopy和Python 2.7。
t_h = ''
def pg(wl):
global t_h
result = raw_input("Enter g to start new game, r to replay last game, or q to end game: ")
possible_choices = ["g", "r", "q"]
if result in possible_choices:
if result == 'g':
t_h = dh(n)
ph(t_h, wl, n)
if result == 'r':
if t_h == '':
print 'You have not played a game yet. Please play a new game first!'
else:
ph(t_h, wl, n)
if result == 'q':
return None
else:
print "Invalid letter."
return pg(wl)
答案 0 :(得分:1)
如果没有看到更多代码(特别是dh
和ph
的代码),很难分辨,但我猜测pg
正在被调用来自其中一个函数或代码中的其他函数。
答案 1 :(得分:1)
函数pg
以递归方式调用任何非possible_choice
个案(因为只有q
直接返回) - 也就是说,在return pg(wl)
行。
您描述的情况意味着ph
和dh
中的任何一个或两个都再次呼叫pg
。
这意味着,对于每个非q
输入,您都会在ph
(或ph
和dh
)和一个来自pg
的递归调用。这将导致您描述的确切行为,其中一个q
不足以退出。使用您发布的代码 - 即没有dh
和ph
- 无法准确了解,但这是合乎逻辑的结论。
如果您希望立即退出,则必须在break
的情况下使用带q
的简单无限循环而不是递归。
另一种可能性是关注@PauloScardine使用exit()
的想法,如果您想要的是真正退出整个过程。同样,使用您发布的代码片段,无法知道这是否可行(pg
直接从main
函数调用)。