【问题标题】:Variable not defined?变量未定义?
【发布时间】:2017-12-22 21:07:11
【问题描述】:

我是 python 的早期初学者,需要一些帮助。游戏的重点是猜测一个数字,如果它不正确,numguesses 加 1。我知道代码效率不高,但我需要它用于项目。代码如下:

import random

from datetime import datetime
answer = random.randint(1, 2)
guess = 0
now = datetime.now()
play = 'y'


print 'Welcome to Hi-Lo'
print 'The current time is: ' '%s-%s-%s' % (now.year, now.month, now.day)

while play != 'n':
while guess != answer:
    guess =  int(input('Pick a number inbewteen 1-100 to see if its higher or lower:'))
    if guess == answer:
        numguesses = numguesses + 1
        print 'You are correct! The number was: ' + str(answer)
        print 'It took ' + str(numguesses) + ' guess(es)'
    elif guess > answer:
        print 'Too high'
    else:
        print 'Too low'

play = str(input('Play again? [y/n]?'))

它产生的错误是:

Traceback (most recent call last):
  File "C:-----------------------------.py", line 17, in <module>
numguesses = numguesses() + 1

NameError: name 'numguesses' 未定义

因此,如果有人可以对此提供简单的解释,我将不胜感激。谢谢!

【问题讨论】:

  • numguesses 从来没有初始值,那怎么加1呢?在 while 循环之前,您需要 numguesses = 0
  • 错误信息与脚本中的行不匹配。为什么numguesses后面有()
  • while play != 'n'的正文还需要缩进
  • 如果您刚开始使用 Python,并且在 Windows 上,为了您的理智,请立即安装 Python 3

标签: python variables


【解决方案1】:

您必须在增加之前设置 numguesses。试试这个:

import random

from datetime import datetime
answer = random.randint(1, 2)
guess = 0
numguesses = 0
now = datetime.now()
play = 'y'


print 'Welcome to Hi-Lo'
print 'The current time is: ' '%s-%s-%s' % (now.year, now.month, now.day)

while play != 'n':
    while guess != answer:
        guess =  int(input('Pick a number inbewteen 1-100 to see if its higher or lower:'))
        if guess == answer:
            numguesses = numguesses + 1
            print 'You are correct! The number was: ' + str(answer)
            print 'It took ' + str(numguesses) + ' guess(es)'
        elif guess > answer:
            print 'Too high'
        else:
            print 'Too low'

    play = str(input('Play again? [y/n]?'))

在将第二个 while 循环嵌套在第一个循环中时,您还犯了另一个缩进错误。我也解决了这个问题。

【讨论】:

    【解决方案2】:

    你必须给numguesses 一个起始值。试试这个:

    numguesses = 0
    while guess != answer:
        guess =  int(input('Pick a number inbewteen 1-100 to see if its higher or lower:'))
        if guess == answer:
            numguesses = numguesses + 1
    

    只需在 while 循环之前添加 numguesses = 0 即可。您必须在使用变量之前声明它们。

    【讨论】:

      【解决方案3】:
        1 #!/usr/bin/env python
        2
        3 import random
        4 from datetime import datetime
        5
        6 answer = random.randint(1, 2)
        7 guess = 0
        8 # You need to define and initialise numguesses before you can increment below by 1
        9 numguesses = 0
       10 now = datetime.now()
       11 play = 'y'
       12
       13 print 'Welcome to Hi-Lo'
       14 print 'The current time is: ' '%s-%s-%s' % (now.year, now.month, now.day)
       15
       16 while play != 'n':
       17   while guess != answer:
       18     guess =  int(input('Pick a number inbewteen 1-100 to see if its higher or lower:'))
       19     if guess == answer:
       20         numguesses = numguesses + 1
       21         print 'You are correct! The number was: ' + str(answer)
       22         print 'It took ' + str(numguesses) + ' guess(es)'
       23         # after the user has guessed correctly, it will start all over again
       24         # hence you need to reset 'guess' and 'numguesses'
       25         guess = 0
       26         numguesses = 0
       27         play = raw_input('Play again? [y/n]? ')
       28         # and you need to get out of the loop altogether if user selects 'n'
       29         break
       30     elif guess > answer:
       31         print 'Too high'
       32         # everytime guess fails, numguesses needs to be increased by 1
       33         numguesses = numguesses + 1
       34     else:
       35         print 'Too low'
       36         # everytime guess fails, numguesses needs to be increased by 1
       37         numguesses = numguesses + 1
      

      请阅读代码中的cmets

      【讨论】:

        猜你喜欢
        • 2011-06-11
        • 2021-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-16
        • 2021-10-15
        • 2017-07-03
        相关资源
        最近更新 更多