2012-11-16 322 views
0

我寫了一個遊戲,玩家試圖猜測一個隨機數(參見下面的代碼)。還提供了諸如'太低...'和'太高...'的建議。但是如何扭轉它並讓計算機猜出玩家選擇的數字呢?我有這個困難,我不知道爲什麼。我想我需要從某人那裏'推',但不需要實際的代碼,因爲我需要自己嘗試。如果有人能幫助我,我將不勝感激。如何在python中編寫一個反向的「猜數字」遊戲?

這裏就是玩家要猜數的代碼(Python 3中):

#Guess my Number - Exercise 3 
#Limited to 5 guesses 

import random 

attempts = 1 
secret_number = random.randint(1,100) 
isCorrect = False 
guess = int(input("Take a guess: ")) 

while secret_number != guess and attempts < 6: 

    if guess < secret_number: 
     print("Higher...") 
    elif guess > secret_number: 
     print("Lower...") 
    guess = int(input("Take a guess: ")) 
    attempts += 1 

if attempts == 6: 
    print("\nSorry you reached the maximum number of tries") 
    print("The secret number was ",secret_number) 

else: 
    print("\nYou guessed it! The number was " ,secret_number) 
    print("You guessed it in ", attempts,"attempts") 

input("\n\n Press the enter key to exit")   

感謝您的幫助。

回答

4

通過循環的每次迭代,您需要一個新的random.randint(low,high)lowhigh可以通過收集計算機猜測到2個列表(low_list)和(high_list),根據用戶在計算機告訴用戶猜測時的響應方式來計算。然後您通過max(low_list)+1得到low,並且通過min(high_list)-1得到high。當然,您必須初始化low_listhigh_list,允許的最小和最大數字。

您可以保留「過高」猜測中的最低值和「too_low」猜測中的最高值,而不是列表。它會稍微更有效率,並且編碼的工作量可能相同,但是您不能回頭看電腦的猜測:)。

+0

謝謝,但我還沒有學會名單運作方式呢。我怎樣才能做到沒有列表? – fdama

+0

@fdama - 這就是我最後一段的解釋。 – mgilson

1

從最小允許數字到最大允許數字的範圍開始,因爲未知數字可能在該範圍內的任何位置。

在每一步中,您需要選擇一個數字進行查詢,以便將空格分成兩個塊;查詢號碼錯誤的那些將被刪除。在最少數量的查詢中執行此操作的最有效方法是每次均分空間。

我建議你將遊戲限制爲整數,否則最終會出現許多關於容差和精度等浮點值的混亂。

1

假設你知道數字範圍可能是(a,b)。

想想你將如何縮小範圍。你會開始猜中間。如果你的猜測很低,你會猜測你最後的猜測和最高值之間。如果它很高,你會猜到最低可能值和最後一次猜測之間。通過反覆縮小範圍,最終你會找到數字。

下面是一些這方面的僞代碼:

loop{ 

guess = (a+b)/2 

if high: 
    b = guess - 1 
else if low: 
    a = guess + 1 
else: 
    guess = answer 
}