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
答案 0 :(得分:3)
这里和那里有一些事情:
您的while循环无效,因为print
的返回值为None
。它不会执行,我认为这不是预期的。您可以按while True
或while 1
将其更改为无限循环。理论上,当某人输入“否”时,你的代码 会突破循环,但我们会明白......
您可以更改input()
语句,以便在输入值之前包含要在终端中显示的文本。例如,您可以将其中一个更改为roll = input('Type ROLL to roll for your stats.)
no
和NO
均未定义为变量。请记住,他们需要字符串才能对其进行评估,因为这正是您所寻找的。在将来,查看诸如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()
答案 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