我正在使用python中的collatz序列代码。该代码应该给我一个以1结尾的数字序列。当我输入一个数字时,这里的代码就是这样做的。
try:
number = int(input('Pick a number'))
except ValueError:
print('Error! input a number')
def collatz(number):
if number % 2 == 0:
x = number // 2
return x
else:
x = 3 * number + 1
return x
while number != 1:
number = collatz(number)
print(number)
但是,当我尝试通过输入字母来调用try andexcept函数时,我得到了所需的错误消息,但同时也收到了NameError。
Traceback (most recent call last):
File "/home/PycharmProjects/collatz/collatz.py", line 14, in <module>
while number != 1:
NameError: name 'number' is not defined
Error! input a number *Desired Error Message*
当我删除try和except函数时,我没有收到此错误。我尝试将“名称”定义为全局变量,并且也使用缩进,但似乎没有任何效果。我将不胜感激任何帮助。
我正在使用python 3.6。
答案 0 :(得分:0)
出现NameError的原因是,number
根本没有定义。对int
的调用失败,因此对number
的分配永远不会发生,您可以捕获并打印错误,然后继续进行即可。要强制用户输入有效的号码,您必须重复提示,直到用户输入正确的输入为止。
def read_number():
while True:
try:
return int(input('Pick a number'))
except ValueError:
print('Error! Input a number')
然后,要读取数字序列,请执行以下操作:
while True:
number = read_number()
if number == 1:
break
答案 1 :(得分:0)
如果您的ValueError
得到提高,那么我认为您在其他任何地方都没有真正定义number
。这就是为什么您的while
循环会引发NameError
的原因。