NameError:名称'guessesTaken'未定义问题

时间:2018-02-21 18:12:12

标签: python python-3.x

大家好,我希望每个人都过得愉快!我已经在python中编码了大约6个月了,我一直在研究这个“猜我的数字代码”,基本上计算机在1-100之间选择一个随机数,然后用户试图猜测它。我的变量guessesTaken有问题,说没有定义,但我明确地在第5行定义。

以下是代码:

import random

def Loop():

  guessesTaken = 0

print('Hello! What is your name?')
myName = input()

number = random.randint(1, 100)
print('Hi, ' + myName + ', I am thinking of a number between 1 and 100.')

mod = number % 2
if mod > 0:
    print("The number I am thinking of is odd.")
else:
    print("The number I am thinking of is even.")


while guessesTaken < 10:
    print('Take a guess.')
    guess = input()
    guess = int(guess)

    guessesTaken = guessesTaken + 1

    if guess < number:
        print('Your guess is too low.') 

    if guess > number:
        print('Your guess is too high.')
        if guess == number:
          break

    if guess == number:
        print('Good job, ' + myName + '! You guessed my number in ' + str(guessesTaken) + ' guesses!')
        guessesTaken = 10




if guess != number:
  print('Nope. The number I was thinking of was ' + str(number))

  playagain = input('Would you like to play again')
  if playagain == "yes":
            Loop()
  if playagain == "no":
            print ( 'Goodbye :)')
            Loop()

我收到错误“Traceback(最近一次调用最后一次):   文件“python”,第20行,in NameError:名称'guessesTaken'未定义“

我一直在尝试调试这个问题1-2周,但仍然没有发现代码有什么问题。 请不要直接告诉我问题是什么,请给我一些提示或线索

真诚的,你是Hardit一个6个月的python程序员

2 个答案:

答案 0 :(得分:1)

问题在于作用域和(部分)初始化。 我建议您查看这些内容是如何工作的,它们是编程中的核心概念。 将创建变量guessesTaken&#34; inside&#34;函数循环,并且在该函数内可用 ONLY
一旦函数返回,范围就会改变,你的变量不再在范围内(它不能被&#34;看到&#34;)。

快速解决方法是在您要使用的同一范围内添加guessesTaken = 0。在这种情况下,范围是整个文件。导入后添加行guessesTaken = 0即可完成。

注意: Python不是强类型的,您可以拥有whatever = 0,然后将whatever分配给任何类型的对象。在其他语言中,您必须与其类型一致地分配变量。

答案 1 :(得分:0)

此错误存在,因为在您的代码中,您在函数Loop中初始化guessesTaken。但是,您没有调用该函数,因此尚未创建猜测。要使这项工作,您必须在while循环之前调用循环。或者在函数外部初始化猜测。