Python除外ValueError:While为True
我尝试使用“while true”要求用户输入0或正整数。我试过几种不同的方法,它们似乎都有不同的问题。函数def positive_int拒绝字母和负整数,但不允许阶乘函数工作。阶乘函数自身工作。我得到一个错误代码:TypeError:范围(1,num+1)中的I的+的不支持的操作数类型:'NoneType'和此行的'int'。谢谢你的帮助Python除外ValueError:While为True,python,while-loop,valueerror,except,Python,While Loop,Valueerror,Except,我尝试使用“while true”要求用户输入0或正整数。我试过几种不同的方法,它们似乎都有不同的问题。函数def positive_int拒绝字母和负整数,但不允许阶乘函数工作。阶乘函数自身工作。我得到一个错误代码:TypeError:范围(1,num+1)中的I的+的不支持的操作数类型:'NoneType'和此行的'int'。谢谢你的帮助 def positive_int(prompt=''): while True: try: num
def positive_int(prompt=''):
while True:
try:
num = int(input(prompt))
if num < 0:
raise ValueError
break
except ValueError:
print("Please enter a positive integer.")
print('\n')
print("The program will compute and output the factorial number.")
def factorial():
num = positive_int('Please enter the number to factorial: ')
factorial = 1
if num == 0:
print("\nThe factorial of 0 is 1")
else:
for i in range(1,num + 1):
factorial = factorial*i
print("\nThe factorial of", num,"is",factorial)
factorial()
def正整数(提示符=“”):
尽管如此:
尝试:
num=int(输入(提示))
如果num<0:
升值误差
打破
除值错误外:
打印(“请输入一个正整数。”)
打印(“\n”)
print(“程序将计算并输出阶乘数。”)
def factorial():
num=正整数('请输入阶乘:'的数字)
阶乘=1
如果num==0:
打印(“\n 0的阶乘是1”)
其他:
对于范围内的i(1,num+1):
阶乘=阶乘*i
打印(“\n的阶乘”,num,“is”,阶乘)
阶乘()
您正在使用阶乘作为函数名和变量名。问题是正整数没有返回任何内容
尝试:
def正整数(提示符=“”):
尽管如此:
尝试:
num=int(输入(提示))
如果num<0:
升值误差
return num#更改为返回值而不是中断
除值错误外:
打印(“请输入一个正整数。”)
打印(“\n”)
print(“程序将计算并输出阶乘数。”)
def factorial():
num=正整数('请输入阶乘:'的数字)
阶乘=1
如果num==0:
打印(“\n 0的阶乘是1”)
其他:
对于范围内的i(1,num+1):
阶乘=阶乘*i
打印(“\n的阶乘”,num,“is”,阶乘)
阶乘()
函数positive\u int()
不返回任何内容,这意味着num=positive\u int()
将num
设置为None
。稍后,当代码尝试将此None
值添加到int时,代码失败
您可以通过将break
语句替换为return来修复此问题,或者在中断循环后返回num
:
def positive_int(prompt=''):
while True:
try:
num = int(input(prompt))
if num < 0:
raise ValueError
return num # Replacing break with return statement
except ValueError:
print("Please enter a positive integer.")
def正整数(提示符=“”):
尽管如此:
尝试:
num=int(输入(提示))
如果num<0:
升值误差
return num#用return语句替换break
除值错误外:
打印(“请输入一个正整数。”)
或
def正整数(提示符=“”):
尽管如此:
尝试:
num=int(输入(提示))
如果num<0:
升值误差
打破
除值错误外:
打印(“请输入一个正整数。”)
return num#打破循环将您带到这里
让阶乘函数只有一个用途:计算阶乘,包括在参数非法时引发异常。从提示符读取int应该通过从main调用pisitive_int单独完成
def positive_int(prompt=''):
while True:
try:
num = int(input(prompt))
if num < 0:
raise ValueError
return num # Replacing break with return statement
except ValueError:
print("Please enter a positive integer.")
def positive_int(prompt=''):
while True:
try:
num = int(input(prompt))
if num < 0:
raise ValueError
break
except ValueError:
print("Please enter a positive integer.")
return num # Breaking out of the loop takes you here