簡體   English   中英

猜數字游戲python

[英]Guessing number game python

所以我正在做一個猜測數字游戲,要求之一是要更新數字的“范圍”,以便用戶可以更輕松地進行猜測。 當數字太高或太低時,我都創建了一個新輸入。 但是,我對循環不是很好,而且我無法弄清楚為什么我的循環只重復一次而沒有一遍又一遍地粘貼代碼。 任何人都可以幫忙,以便elif語句會重復直到數字正確為止?

到目前為止,這是我的代碼...

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.")
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或大於100,則循環將中斷(因為在第15行的“ if notgues_num> 0或notgues_num <101:”下有一個break語句)。

如果用戶輸入的錯誤猜測在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.") 
  1. 不要使用break ,因為它們會終止while循環。 請參閱python語言參考。

  2. 您只需要詢問一次guess_num 當猜測值太高或太低(BTW變量名稱guess不正確)時,請刪除兩個input

  3. 最后一個條件(嘗試次數除外)應在while循環之外,因為它將在嘗試次數超過800次時執行。

  4. 暗示。 用戶可以進行與二分搜索相當的游戲(從50開始,然后猜測25或75,具體取決於更高/更低,等等)。 您應該允許大約8次嘗試(而不是800次)。

以下是更新范圍的方法:

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.")

這就是我要怎么做。 不知道它是否有效,但是方法是:

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結構的數量。

此外,還需要更新范圍 並且由於參數化的字符串,我可以告訴用戶范圍是多少。

我還設置了一個標志來了解用戶是否在游戲結束時找到了號碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM