这个python代码有什么问题?输入后我收到错误

时间:2011-12-28 04:29:31

标签: python string variables

while print('Type ROLL to roll for your stats.'):
    roll = input() # I get my error right after I input
    if roll == "roll" or roll == "ROLL":
        strength = random.randint(1, 100)
        defense = random.randint(1, 100)
        attack = random.randint(1, 100)
    print('Your attack level is ' + attack + '.')
    print('Your strength level is ' + strength + '.')
    print('Your defense level is ' + defense + '.')
    print('Would you like to reroll?')
    reroll = input()
    if reroll == no or reroll == NO:
        break

我的错误是

Traceback (most recent call last):
roll
NameError: name 'roll' is not defined

5 个答案:

答案 0 :(得分:3)

这里和那里有一些事情:

  • 您的while循环无效,因为print的返回值为None。它不会执行,我认为这不是预期的。您可以按while Truewhile 1将其更改为无限循环。理论上,当某人输入“否”时,你的代码 会突破循环,但我们会明白......

  • 您可以更改input()语句,以便在输入值之前包含要在终端中显示的文本。例如,您可以将其中一个更改为roll = input('Type ROLL to roll for your stats.)

  • noNO均未定义为变量。请记住,他们需要字符串才能对其进行评估,因为这正是您所寻找的。在将来,查看诸如if reroll.lower() == 'no'之类的语句可能是有利的,因为这将节省多个字符串条目值的重复输入。

希望这些能让你走上正轨。不要忘记,如果你在这里看到你喜欢的答案,请随时接受(所以社区知道你得到了你的答案)。

答案 1 :(得分:2)

由于您似乎使用的是Python 2.x,因此请使用raw_input代替input。您可能正在关注为Python 3.x设计的教程。

答案 2 :(得分:0)

也许:

roll = eval(input())

import sys roll = sys.stdin.readline()

根据: http://docs.python.org/release/3.0.1/whatsnew/3.0.html

http://www.python.org/dev/peps/pep-3111/

答案 3 :(得分:0)

在Python 2中,使用input命令会导致您描述的错误:

>>> blah = input()
roll
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'roll' is not defined

对于Python 2,您将使用raw_input

>>> blah = raw_input()
roll
>>> print blah
roll

在Python 3中,第一个示例正常工作 - raw_input被重命名为input - 也许你意外地运行了错误的命令?您可以通过执行以下操作来验证这一点:

import sys
print sys.version

..在你的脚本某处

答案 4 :(得分:0)

roll = input('Type ROLL to roll for your stats. ')
if roll == "roll" or roll == "ROLL":
    #do your stats roll here
reroll = input('Would you like to reroll? ')
if reroll == 'no' or reroll == 'NO':
    break

我认为您的错误很可能来自于您正在打印问题,然后传递空白的input()函数。当您使用输入功能时,您应该在括号内键入问题字符串。

input('Place your question / prompt here, with a space at the end so there is a gap between the question and your input: ')

此外,当您测试reroll是否等于no或NO时,您必须记住单词no和NO 必须在引号中以表示字符串! Python将任何不在引号中的内容视为数字,变量,函数或保留字(如OR)。如果你还没有声明no和NO作为变量,你的程序将无法工作。因此,您必须在单词no和NO周围加上单引号或双引号,或者在程序开头必须将它们声明为变量,例如

no = 'no'
NO = 'NO'

此外,while循环已被破坏。对于无限循环,将第一个语句设置为While True。如果您希望循环在满足某个条件时中断,请在循环开始之前声明另一个变量并将其值设置为True(布尔值为true,而不是单词true)。完成此操作后,您可以将该变量设置为布尔值False以退出循环

rolling = True
While rolling:
    #do stuff
If exitcondition == True:
    rolling = False # When exitcondition is True, rolling is False and the loop is broken