2016-03-08 111 views
0

所以我正在猜測數字遊戲,其中一個要求是爲了更新數字的「範圍」,以便用戶有更輕鬆的時間與他們的猜測。當數字太高或太低時,我創建了一個新的輸入。然而,我並不是很擅長循環,我無法弄清楚爲什麼我的循環只重複一次而沒有反覆粘貼代碼。任何人都可以幫助elif語句重複,直到數字是正確的?猜數字遊戲python

這是我的代碼迄今...

import random 
random_number = random.randint(1,100) 
tries = 0 
while tries < 800: 
    guess = input("Guess a random number between 1 and 100.")  
    tries += 1 
    try: 
    guess_num = int(guess) 
    except: 
    print("That's not a whole number!") 
    break 

    if not guess_num > 0 or not guess_num < 101: 
    print("That number is not between 1 and 100.") 
    break 

    elif guess_num == random_number: 
    print("Congratulations! You are correct!") 
    print("It took you {} tries.".format(tries)) 
    break 

    elif guess_num > random_number: 
     print("Sorry that number is too high.") 
     guess_high = input("Guess a number between 0 and {} .".format(guess_num)) 

    elif guess_num < random_number: 
     print("Sorry that number is too low.") 
     guess_low = input("Guess a number between {} and 100 .".format(guess_num)) 

    else: 
     print("Sorry, but my number was {}".format(random_number)) 
     print("You are out of tries. Better luck next time.") 
+1

你沒有更新的實際範圍,但只打印出 – Abundance

+0

所以我怎麼能更新的範圍到底有多少與否所以它適合縮小用戶輸入? – Devalur

+1

除非答案正確,否則不應中斷。刪除所有其他出現的'break' – zondo

回答

1
import random 
random_number = random.randint(1,100) 
tries = 0 
guess = input("Guess a random number between 1 and 100.")  
while tries < 800: 
    tries += 1 
    try: 
    guess_num = int(guess) 
    except: 
    print("That's not a whole number!") 
    break 

    if not guess_num > 0 or not guess_num < 101: 
    print("That number is not between 1 and 100.") 
    break 

    elif guess_num == random_number: 
    print("Congratulations! You are correct!") 
    print("It took you {} tries.".format(tries)) 
    break 

    elif guess_num > random_number: 
     print("Sorry that number is too high.") 
     guess = input("Guess a number between 0 and {} .".format(guess_num)) 

    elif guess_num < random_number: 
     print("Sorry that number is too low.") 
     guess = input("Guess a number between {} and 100 .".format(guess_num)) 

else: 
    print("Sorry, but my number was {}".format(random_number)) 
    print("You are out of tries. Better luck next time.") 
+0

您的代碼不會工作,因爲它不會處理任意範圍,例如25-30。 – Abundance

+0

(查看我的其他帖子)由於用戶可以使用「二分搜索」進行遊戲,因此我建議將嘗試次數限制爲小於800(大約8次就足夠了)。它會使測試最後的'else:'更快。 –

0

對於這種情況下,貴僅環重複一次?

循環將打破(因爲你有下的第15行break語句「如​​果不是guess_num> 0或不guess_num < 101」),如果輸入的猜測是小於0或大於100

如果用戶在1到100之間輸入了錯誤的猜測,那麼代碼會循環,因此用戶會被要求輸入另一個數字。

儘管它循環,循環沒有更新範圍。 您可以做的是將range_min和range_max設置爲變量,並根據猜測值是否過低或過高來更改這些變量。 請看下面的代碼:

import random 
random_number = random.randint(1,100) 
tries = 0 
range_min = 0 
range_max = 100 
while tries < 800: 
    guess = input("Guess a random number between " + str(range_min +1) + " and " + str(range_max))  
    tries += 1 
    try: 
    guess_num = int(guess) 
    except: 
    print("That's not a whole number!") 
    break 

    if not guess_num > range_min or not guess_num < (range_max+1): 
    print("That number is not between str(range_min +1) + " and " +  str(range_max)") 
    break 

    elif guess_num == random_number: 
    print("Congratulations! You are correct!") 
    print("It took you {} tries.".format(tries)) 
    break 

    elif guess_num > random_number: 
     print("Sorry that number is too high.") 
     guess_high = input("Guess a number between 0 and {} .".format(guess_num)) 
range_max = guess_num 

    elif guess_num < random_number: 
     print("Sorry that number is too low.") 
     guess_low = input("Guess a number between {} and 100 .".format(guess_num)) 
range_min = guess_num 

    else: 
     print("Sorry, but my number was {}".format(random_number)) 
      print("You are out of tries. Better luck next time.") 
+0

我的elif縮小了猜測的範圍,這樣用戶就可以輕鬆地猜出高於其數字的數字,如果數字太低或低於其數字,但是在新輸入之後又回到猜測1到100之間,而不是更新範圍 – Devalur

+0

我編輯了我的答案。當用戶輸入一個不正確的猜測時,循環會循環,然而要求新的猜測,但它不更新範圍。 –

0
  1. 不要使用break,因爲他們終止while循環。請參閱python語言參考。

  2. 您應該只詢問一次guess_num。當猜測過高或過低時(BTW變量名稱guess不正確),刪除兩個input

  3. 最後一個條件(出的嘗試)應該是while循環外,因爲當嘗試的次數超過800

  4. 提示它就會被執行。用戶可以用二進制搜索來玩這個遊戲(從50開始,然後根據更高/更低等級猜測25或75)。你應該允許8次嘗試(不是800次)。

+0

是的,謝謝你哈哈我有800以上的目的是跟蹤和錯誤。 – Devalur

0

這裏是如何更新範圍:

import random 
random_number = random.randint(1,100) 
tries = 0 
low = 0 
high = 100 
while tries < 800: 
    if(tries == 0): 
    guess = input("Guess a random number between {} and {}.".format(low, high))  
    tries += 1 
    try: 
    guess_num = int(guess) 
    except: 
    print("That's not a whole number!") 
    break  

    if guess_num < low or guess_num > high: 
    print("That number is not between {} and {}.".format(low, high)) 
    break  

    elif guess_num == random_number: 
    print("Congratulations! You are correct!") 
    print("It took you {} tries.".format(tries)) 
    break  

    elif guess_num > random_number: 
     print("Sorry that number is too high.") 
     high = guess_num 
     guess = input("Guess a number between {} and {} .".format(low, high))  

    elif guess_num < random_number: 
     print("Sorry that number is too low.") 
     low = guess_num 
     guess = input("Guess a number between {} and {} .".format(low, high))  

    else: 
     print("Sorry, but my number was {}".format(random_number)) 
     print("You are out of tries. Better luck next time.") 
+0

非常感謝你 – Devalur

+0

沒問題;)順便說一句,最後的else檢查並不需要在那裏,可以發生在while循環之外(它永遠不會到達那個代碼) – Abundance

0

這裏是我會怎麼做。不知道它的工作原理,但做法是:

import random 

random_number = random.randint(1,100) 
max_tries = 100 
tries = 0 
left = 0 
right = 100 
found = False 


def get_number(): 
    try: 
     guess = int(input("Guss a random number between {} and {}".format(left, right)))    
     if guess > right or guess < left: 
      print("That number is not between {} and {}".format(left, right)) 
     return guess 
    except: 
     print("That's not a whole number!") 
     get_number() 

def update_range(guess): 
    if guess >= left: 
     left = guess 
    else: 
     right = guess   

while tries <= max_tries and not found: 
    guess = get_number() 
    tries=+1 
    if guess == random_number: 
     print("Congratulations! You are correct!") 
     print("It took you {} tries.".format(tries)) 
     found = True 
    else: 
     update_range(guess) 

    if not found: 
     print("Sorry, but my number was {}".format(random_number)) 
     print("You are out of tries. Better luck next time.") 

正如你可以看到我使用輔助功能以減少的if/else結構的數量。

另外更新範圍是必要的。並感謝參數化的字符串我可以告訴用戶什麼是範圍。

我也設置一個標誌知道用戶是否發現在遊戲