2017-04-25 113 views
0

即时通讯使用python 3.4我试图做一个递归猜测游戏。游戏应该取最小值和最大值并且有一个“魔术”数字。游戏将在x和y的范围内生成一个随机数。然后要求用户插入y,因为太低,而h太高。如果是“祝贺消息”,则退出。如果它太低,取最小值x,并加1,它将是新的最小值。对于太高的同样逻辑。然后重新生成随机数。我被困在递归调用的地方。递归猜测游戏

def recursive_guess(x,y,): 
correct = False 
while not correct: 

    print('I will guess a number y for yes, l for too low, h for too high') 
    guess = random.randrange(x, y) 
    print(guess) 
    anwser = input('y for yes l for low h for high') 
    if anwser == 'y': 
     print('Got it right') 
     correct = True 
    elif anwser == 'l': 
     guess = random.randrange(minVal + 1, maxVal) 
    elif anwser == 'h': 
    guess = random.randomrange(minVal, maxVal-1) 
+0

你为什么使用递归?这是迭代循环中的一个基本练习,它不是一个真正的递归问题,因为我们允许用户控制边界。 – Prune

+0

他可能在练习递归,没有什么错。这也是递归的一个很好的问题。 “这不是一个真正的递归问题”只是你的意见,这是没有意义的争论。 – Apollys

回答

0

让我们切换到高层次的伪代码,并给你的变量更好的名字,因为我认为你是在语法细节被逮住,并没有在你的头上你的算法的大画面呢。

def recursive_guess(lower_bound, upper_bound): 
    guess = random guess in range [lower_bound, upper_bound] 
    print guess 
    request user response 
    response = <get user response> 
    if guess was too high: 
    upper_bound = guess - 1 
    elif guess was too low: 
    lower_bound = guess + 1 
    else: 
    return guess 
    # assuming we reached this point without returning, 
    # we need to do a recursive call because guess was wrong 
    return recursive_guess(lower_bound, upper_bound) 

在给你的代码,你似乎已经开始了与一个递归方法,但随后你就切换(潜意识),以迭代的方法,当你再次更新你的猜测到一个新的随机值。如果你在开始的时候在函数结束时做了同样的事情,那可能会提示你可能应该已经递归了。

认为递归只是简单地使你的任务稍微小一点,然后你就已经完成了。在这种情况下,如果我们可以减小窗口大小(upper_bound - lower_bound),那么我们完成了我们的工作。只要我们有一个基本案例,递归将从那里处理它。在这种情况下,基本情况是正确猜测,在这种情况下,我们立即返回。

0

相反的guess = random.randrange(minVal + 1, maxVal),你应该改变MINVAL,然后用它,就像这样:

minVal = guess + 1 
guess = random.randrange(minVal, maxVal) 

否则,MINVAL和MAXVAL不会关闭在正确的号码; elif语句中的猜测每次都是一样的,因为minVal和maxVal实际上并没有改变。此外,我没有看到minVal和maxVal设置为x和y的位置。

编辑:不确定递归的位置在哪里。如果你想使这个函数递归,你可以把它从while循环中取出来,并且自己调用它,例如recursive_guess(guess + 1, y)而不是上面的行。