While循环忽略循环外的变量,这会导致在明确定义时出现未定义的错误

2024-04-25 16:39:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一个学校项目在Python上做一个数字猜测游戏,遇到了两个我找不到解决方法的问题。我有两个问题,但决定张贴作为一个问题,以避免垃圾邮件堆栈溢出。你知道吗

  1. 如何在while循环中添加while true循环?你知道吗

我发现了一个巧妙的技巧,当有人不小心插入一个字母时,你可以要求游戏继续要求一个数字,而不是结束整个代码。你知道吗

while True:
  try:
    guess = int(input("Guess which number I am thinking of: "))
  except ValueError:
    guess = print("That's not a number, guess a NUMBER!")
    continue
  else:
    break

我的游戏允许玩家在失败之前猜六次。我使用while循环来实现这一点,因此我如何将上述while true循环添加到我已经拥有的while循环中:

while GuessesTaken < 6:

  GuessesTaken = GuessesTaken + 1;
  GuessesLeft = 6 - GuessesTaken;

  guess = input("Guess which number I am thinking of: ")
  guess = int(guess)

  if guess < hidden and GuessesLeft==0:
    GuessesLeft=str(GuessesLeft)
    print("Your guess is too low, you have " + GuessesLeft + " guesses left")
    break

  elif guess < hidden and GuessesLeft > 0:
    GuessesLeft=str(GuessesLeft)
    print("Your guess is too low, you have " + GuessesLeft + " guesses left")

  elif guess > hidden and GuessesLeft==0:
    GuessesLeft=str(GuessesLeft)
    print("Your guess is too low, you have " + GuessesLeft + " guesses left")
    break

  elif guess > hidden and GuessesLeft > 0:
    GuessesLeft=str(GuessesLeft)
    print("Your guess is too low, you have " + GuessesLeft + " guesses left")

  elif guess==hidden:
    break
  1. 当变量在循环外定义,但在循环内使用时,表示变量未定义。你知道吗

我不知道如何解决第一个问题,但为了解决第二个问题,我做了很多尝试。你知道吗

def main():
  hidden = random.randint(1,100)  

while GuessesTaken < 6:

  GuessesTaken = GuessesTaken + 1;
  GuessesLeft = 6 - GuessesTaken;

  guess = input("Guess which number I am thinking of: ")
  guess = int(guess)

  if guess < hidden and GuessesLeft==0:
    GuessesLeft=str(GuessesLeft)
    print("Your guess is too low, you have " + GuessesLeft + " guesses left")
    break

  elif guess < hidden and GuessesLeft > 0:
    GuessesLeft=str(GuessesLeft)
    print("Your guess is too low, you have " + GuessesLeft + " guesses left")

  elif guess > hidden and GuessesLeft==0:
    GuessesLeft=str(GuessesLeft)
    print("Your guess is too low, you have " + GuessesLeft + " guesses left")
    break

  elif guess > hidden and GuessesLeft > 0:
    GuessesLeft=str(GuessesLeft)
    print("Your guess is too low, you have " + GuessesLeft + " guesses left")

  elif guess==hidden:
    break

这个代码带有一个

NameError: name 'hidden' is not defined

但如果我加上

hidden = random.randint(1,100)

在这部分代码下面的顶部

score = 0
GuessesTaken = 0
currenttime = str(datetime.now())
currenttime = (
currenttime[0:19])
yesList =("yes", "sure", "yeah", "ye", "yea", "y", "fine", "okay", "ok", "yep")

在我走到比赛的这一步之前它一直有效

if guess!=hidden:
  hidden=str(hidden)
  print("Fail! The number I was thinking of was " + hidden)
  restart=input("Would you like to play again?").lower()
  if restart in yesList:
    main()

代码停止工作。你知道吗

我最后尝试的是将while true循环添加到def main():如下所示

def main():
  hidden = random.randint(1,100)

  while GuessesTaken < 6:

    GuessesTaken = GuessesTaken + 1;
    GuessesLeft = 6 - GuessesTaken;

    guess = input("Guess which number I am thinking of: ")
    guess = int(guess)

    if guess < hidden and GuessesLeft==0:
      GuessesLeft=str(GuessesLeft)
      print("Your guess is too low, you have " + GuessesLeft + " guesses left")
      break

    elif guess < hidden and GuessesLeft > 0:
      GuessesLeft=str(GuessesLeft)
      print("Your guess is too low, you have " + GuessesLeft + " guesses left")

    elif guess > hidden and GuessesLeft==0:
      GuessesLeft=str(GuessesLeft)
      print("Your guess is too low, you have " + GuessesLeft + " guesses left")
      break

    elif guess > hidden and GuessesLeft > 0:
      GuessesLeft=str(GuessesLeft)
      print("Your guess is too low, you have " + GuessesLeft + " guesses left")

    elif guess==hidden:
      break

出现了另一个错误消息。你知道吗

NameError: name 'guess' is not defined

Tags: andyouyourishavelefthiddenlow
1条回答
网友
1楼 · 发布于 2024-04-25 16:39:56
  1. 常量拼写为LIKE_THIS,变量和函数拼写为like_this,类拼写为LikeThis。你知道吗
  2. 每个游戏的猜测次数必须初始化。你知道吗
  3. var += 1var = var + 1相同
  4. 在代码中多次使用文本(例如您使用的6)是一个很好的迹象,表明应该将其移动到常量。它还可以让你很快改变这一点。你知道吗
  5. 您已经在破坏循环,因此再次检查剩余猜测是否为0只会减慢代码的速度。你知道吗
  6. 你在几个地方做同样的事情,而它们只能做一次。你知道吗

代码类似于:

import random

YES_LIST = ("yes", "sure", "yeah", "ye", "yea", "y", "fine", "okay", "ok", "yep")
MAX_GUESSES = 6  # WIN RATES: 1 ->  1% ; 2 ->  3% ; 3 ->  7%
                 #            4 -> 15% ; 5 -> 31% ; 6 -> 63%

def guess_game():
    hidden = random.randint(1, 100)
    guesses_taken = 0
    while guesses_taken < MAX_GUESSES:

        guess = int(input("Guess which number I am thinking of: "))
        guesses_taken += 1
        guesses_left = MAX_GUESSES - guesses_taken

        if guess == hidden:
            break

        if guess < hidden:
            print("Your guess is too low, you have {} guesses left.".format(guesses_left))
        else:
            print("Your guess is too high, you have {} guesses left.".format(guesses_left))

    else:
        # An else of a while loop will only be executed if we do NOT break from it,
        # this is, this part will only be executed if it did not find out the answer
        return False, hidden  # We return False meaning it failed and the hidden number

    # As we returned already if he didn't guess, this will only be executed if he did guess
    return True, hidden  # We return True meaning it succeeded and the hidden number

def main():
    restart = True
    score = 0
    games = 0
    while restart:
        success, number = guess_game()
        games += 1
        if success:
            score += 1
            print("Congrats, you guessed my number.")
        else:
            print("Fail! The number I was thinking of was {}.".format(number))
        restart = input("Want to play again?").lower() in YES_LIST
    print("Thank you! You guesses {} out of {} numbers.".format(score, games))

main()

我添加了一些代码,允许用户在显示提示时重播您自己也在这样做。你知道吗

相关问题 更多 >

    热门问题