如何修复此“名称未定义”?

时间:2014-11-17 04:21:12

标签: python

只是想知道,我该如何解决这个问题?无论我做什么,我都无法工作。由于我已经开始使用Python,我的主要问题是调用变量,我该怎么做呢?例如,在这种情况下如何修复它,或者在另一个代码中如何将变量从一个部分调用到另一个部分?

我得到了

  

Traceback(最近一次调用最后一次):File" C:/Users/Test.py" ;, line   12,在   猜猜!=数字:名称错误:名称'猜测'未定义

错误

作为旁注,为什么使用Global X = Global X + 1不起作用?

import random

def main():
 guessesTaken = 0
 guess = 0
 number = random.randint (1, 1000)
 print('Guess a number from 1 to 1000. debug=',number,)
 guess = float(input('  '))
 Hot = number + 10
 Cold = number - 10

while guess != number:

 guessesTaken = guessesTaken + 1   
 if guess > number:
  print('Too High!')

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

 elif guess < Hot > number:
  print('Your guess Hot!')

 elif guess < Cold > number:
  print('Your guess is Cold!.')

 else:
  print('Error')

while guess == number:
  print('You got it!, you guessed the number in' + guessesTaken + ' guesses!')

main()

3 个答案:

答案 0 :(得分:2)

NameError: name 'guess' is not defined的具体问题是因为您guess函数中定义了main,但失败的while循环不在该函数之内。

这个应用程序你的缩进是完全错误的。

如果您希望while guess != number:能够正常工作,则需要将其作为main的一部分

def main():
    guessesTaken = 0
    guess = 0
    number = random.randint (1, 1000)
    print('Guess a number from 1 to 1000. debug=',number,)
    guess = float(input('  '))
    Hot = number + 10
    Cold = number - 10

    while guess != number:
        ...

你也有其他的问题。在main内,您的行会缩进5个空格(而不是PEP8 prescribed 4 spaces)。

你的while循环不会做你所希望的。如果用户在第一次尝试时没有得到正确答案,那么它将会点击您的while guess != number:并永久循环。要解决此问题,您的输入也应该在循环中进行。第二个while循环while guess == number:将达到相同的无限循环。为什么需要重复打印?它可以像if

一样正常工作

答案 1 :(得分:1)

在python中,缩进确定代码块(以及范围)。

所以,在你的代码中,当你为while循环取消注释时:

def main():
   guessesTaken = 0
   guess = 0
   number = random.randint (1, 1000)
   print('Guess a number from 1 to 1000. debug=',number,)
   guess = float(input('  '))
   Hot = number + 10
   Cold = number - 10

while guess != number:   # The unindent here 
   guessesTaken = guessesTaken + 1
   ...

解释器将Cold = number - 10视为main()的结尾。因此,你的循环不是main()的一部分,也不能访问main的本地变量(例如guess)。

我的猜测是你的意图是让while循环成为main的一部分。所以他们应该缩进匹配:

import random
def main():
     guessesTaken = 0
     guess = 0
     number = random.randint (1, 1000)
     print('Guess a number from 1 to 1000. debug=',number,)
     guess = float(input('  '))
     Hot = number + 10
     Cold = number - 10

     while guess != number:
         guessesTaken = guessesTaken + 1
         if guess > number:
             print('Too High!')
         elif guess < number:
            print('Your guess is too low.')
         elif guess < Hot > number:
            print('Your guess Hot!')
         elif guess < Cold > number:
            print('Your guess is Cold!.')
         else:
            print('Error')

     while guess == number:
         print('You got it!, you guessed the number in' + guessesTaken + ' guesses!')

main()

虽然你的代码还有其他问题;它给了我一个无限循环。

答案 2 :(得分:0)

从你的代码缩进来判断,我猜这里唯一的问题是你没有缩进while循环。

python中的缩进非常重要。这是更正后的代码:

import random


def main():
     guessesTaken = 0
     guess = 0
     number = random.randint (1, 1000)
     print('Guess a number from 1 to 1000. debug=',number,)
     guess = float(input('  '))
     Hot = number + 10
     Cold = number - 10

     while guess != number:

         guessesTaken = guessesTaken + 1

         if guess > number:
             print('Too High!')


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


         elif guess < Hot > number:
            print('Your guess Hot!')


         elif guess < Cold > number:
            print('Your guess is Cold!.')

         else:
            print('Error')

您当前的代码似乎发生的事情是,即使在调用main()函数之前,也会调用while循环。因此,'guess'和'number'在这种情况下都不存在。