python不能正确退出程序

时间:2015-02-03 21:55:23

标签: python recursion

在我的程序中,我想与用户交互,并要求他按特定字母做一些事情(我认为这个游戏的逻辑与我的问题无关)。当我开始游戏并作为第一个字母时,我按下' 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)

2 个答案:

答案 0 :(得分:1)

如果没有看到更多代码(特别是dhph的代码),很难分辨,但我猜测pg正在被调用来自其中一个函数或代码中的其他函数。

答案 1 :(得分:1)

函数pg以递归方式调用任何非possible_choice个案(因为只有q直接返回) - 也就是说,在return pg(wl)行。

您描述的情况意味着phdh中的任何一个或两个都再次呼叫pg。 这意味着,对于每个非q输入,您都会在ph(或phdh一个来自pg的递归调用。这将导致您描述的确切行为,其中一个q不足以退出。使用您发布的代码 - 即没有dhph - 无法准确了解,但这是合乎逻辑的结论。

如果您希望立即退出,则必须在break的情况下使用带q的简单无限循环而不是递归。 另一种可能性是关注@PauloScardine使用exit()的想法,如果您想要的是真正退出整个过程。同样,使用您发布的代码片段,无法知道这是否可行(pg直接从main函数调用)。