2017-04-25 128 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)而不是上面的行。