簡體   English   中英

如何在 n 次迭代后停止 while 循環?

[英]How to stop a while loop after n iterations?

我正在學習 python 並且我正在嘗試創建具有兩個難度級別的猜謎游戲:簡單(10 次嘗試)和困難(5 次嘗試)。 我的代碼運行良好,但我需要強制 while 循環在困難級別嘗試 5 次和簡單級別嘗試 10 次后停止詢問猜測。 但是,使用我的代碼我沒有達到我的目標,因為 while 循環在 n 變量 < 5 或 10 之后不會停止。我如何使用下面的代碼達到這個目標:

from random import *

def levels():
  user_level=input('Type E for easy level and D for difficult level: ')
  if user_level=='e':
    easy_level()
  else:
    difficult_level()

number=randint(1,100)

def difficult_level():
  n= 0
  while n < 5:
    user_number=int(input('Guess the number: '))
    if user_number > number:
      print('Too high')
    elif user_number < number:
      print('Too low')
    elif user_number == number:
      print(f'You guessed the number {number}! Congratulations!')
      play_again=input('Would you like to play again? type y for yes or n for no: ')
      if play_again =='y':
        levels()
      else:
        print('Bye')
        break
  print('Sorry, no more attempts :(')


def easy_level():
  n= 0
  while n < 10:
    user_number=int(input('Guess the number: '))
    if user_number > number:
      print('Too high')
    elif user_number < number:
      print('Too low')
    elif user_number == number:
      print(f'You guessed the number {number}! Congratulations!')
      play_again=input('Would you like to play again? type y for yes or n for no: ')
      if play_again =='y':
        levels()
      else:
        print('Bye')
         break
  print('Sorry, no more attempts :(')


levels()

看起來您忘記在循環中遞增n ,因此n始終 = 0。通常您在循環開始或循環結束時遞增“tracker”變量。 遞增 python 可以用n += 1完成。

簡短的回答是你需要在 while 循環中添加一個n += 1 ,就像這樣:

def easy_level():
  n= 0
  while n < 10:
    user_number=int(input('Guess the number: '))
    if user_number > number:
      print('Too high')
    elif user_number < number:
      print('Too low')
    elif user_number == number:
      print(f'You guessed the number {number}! Congratulations!')
      play_again=input('Would you like to play again? type y for yes or n for no: ')
      if play_again =='y':
        levels()
      else:
        print('Bye')
         break

    n += 1

  print('Sorry, no more attempts :(')

長答案是你真的應該考慮使用 for 循環,下面是一個如何做到這一點的例子:

def easy_level():
  for i in range(10)
    user_number=int(input('Guess the number: '))
    if user_number > number:
      print('Too high')
    elif user_number < number:
      print('Too low')
    elif user_number == number:
      print(f'You guessed the number {number}! Congratulations!')
      play_again=input('Would you like to play again? type y for yes or n for no: ')
      if play_again =='y':
        levels()
      else:
        print('Bye')
         break

  print('Sorry, no more attempts :(')

你應該通過刪除像這樣的重復代碼來使你的腳本更清晰:

from random import *

def chooseLevel():
  user_level=input('Type E for easy level and D for difficult level: ')
  if user_level=='e':
    return 10
  else:
    return 5

number = randint(1,100)
for i in range(chooseLevel()):
    user_number = int(input('Guess the number: '))
    if user_number > number:
      print('Too high')
    elif user_number < number:
      print('Too low')
    elif user_number == number:
      print(f'You guessed the number {number}! Congratulations!')
      play_again = input('Would you like to play again? type y for yes or n for no: ')
      if play_again =='y':
        levels()
      else:
        print('Bye')
         break

  print('Sorry, no more attempts :(')

在這里,我刪除了你擁有的兩個函數,我做了它,以便只有一個循環使代碼更清晰,我還將levels() function 名稱更改為chooseLevel()以使其更清楚 function 的作用我還在=之間添加了空格,這讓事情看起來更干凈。

我還使用了這樣的 for 循環for i in range(chooseLevel())這意味着如果chooseLevel() function 返回5就好像我for i in range(5)如果chooseLevel() function返回10就好像我寫了for i in range(10)

謝謝。

您需要在每次迭代后遞增 n,方法是重新分配n (例如n = n + 1 ),或使用+=運算符,如下所示:

from random import *

def levels():
  user_level=input('Type E for easy level and D for difficult level: ')
  if user_level=='e':
    easy_level()
  else:
    difficult_level()

number=randint(1,100)

def difficult_level():
  n= 0
  while n < 5:
    user_number=int(input('Guess the number: '))
    if user_number > number:
      print('Too high')
    elif user_number < number:
      print('Too low')
    elif user_number == number:
      print(f'You guessed the number {number}! Congratulations!')
      play_again=input('Would you like to play again? type y for yes or n for no: ')
      if play_again =='y':
        levels()
      else:
        print('Bye')
        break

    n += 1 # increment n after each iteration

  print('Sorry, no more attempts :(')


def easy_level():
  n= 0
  while n < 10:
    user_number=int(input('Guess the number: '))
    if user_number > number:
      print('Too high')
    elif user_number < number:
      print('Too low')
    elif user_number == number:
      print(f'You guessed the number {number}! Congratulations!')
      play_again=input('Would you like to play again? type y for yes or n for no: ')
      if play_again =='y':
        levels()
      else:
        print('Bye')
         break

    n += 1 # increment n after each iteration

  print('Sorry, no more attempts :(')


levels()

像這樣使用for循環可能更容易:

def levels():
  easy_turns = 5
  hard_turns = 10
  user_level=input('Type E for easy level and D for difficult level: ')
  if user_level=='e':
    play(easy_turns)
  else:
    play(hard_turns)

def play(turns):
  for _ in range(turns):
    user_number=int(input('Guess the number: '))
    if user_number > number:
      print('Too high')
    elif user_number < number:
      print('Too low')
    elif user_number == number:
      print(f'You guessed the number {number}! Congratulations!')
      play_again=input('Would you like to play again? type y for yes or n for no: ')
      if play_again =='y':
        levels()
      else:
        print('Bye')
         break
  print('Sorry, no more attempts :(')

一個好的經驗法則是,如果您兩次使用相同的代碼,請將其放入 function。隨着時間的推移,它肯定會不同步,那么您會想知道為什么“簡單”有效,但“困難”卻做了一些奇怪的事情(或一些的變化)。

暫無
暫無

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

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