我正在制作一个多重计算器,我几乎把它弄坏了,问题是,当我请求一个数字时,如果用户给出一个字符串输入,即使我有一个用于else:语句的if,代码也会中断并抛出一个错误。
def Start():
numberOneList = []
numberTwoList = []
multiples = 100000
iterations = 0
multiplicity = int(input("How many common multiplicities you would like to find between two numbers: "))
if multiplicity > 0 and multiplicity < 100001:
numberOne = int(input("Input the first number: "))
if numberOne > 0 and numberOne < 100001:
numberTwo = int(input("Input the second number: "))
if numberTwo > 0 and numberTwo < 100001:
for i in range(multiples):
mNumberOne = numberOne * i
numberOneList.append(mNumberOne)
mNumberTwo = numberTwo * i
numberTwoList.append(mNumberTwo)
print("")
print("Common multiplicities:")
print("")
print("Calculating...")
print("")
for i in numberOneList:
for a in numberTwoList:
if a == i:
if a != 0:
print(numberOne, "x", i / numberOne, "=", i)
print(numberTwo, "x", a / numberTwo, "=", a)
print("")
iterations += 1
if iterations == multiplicity:
Again()
else:
continue
else:
continue
else:
continue
else:
print("Invalid answer, restarting")
Start()
else:
print("Invalid answer, restarting")
Start()
else:
print("Invalid answer, restarting")
Start()
def Again():
calculateAgain = input("Calculate again? [y/n]: ")
if calculateAgain == "y":
Start()
if calculateAgain == "n":
quit()
else:
Again()
Start()发布于 2017-04-18 00:00:13
您得到了一个错误,因为您在用户的输入上断言一个int类型,而不首先检查它是否有效。正如@kindall在comment中所指出的,try/except允许您捕获失败的类型断言并优雅地处理它们。用下面这样的东西包装您的int转换应该可以做到这一点:
try:
multiplicity = int(input("How many common multiplicities you would like to find between two numbers: "))
except ValueError as e:
print('Please input a valid number')
return str(e)(请注意,您可能只是重复提示,而不是返回错误文本。)
发布于 2017-04-18 00:12:18
当前代码的一个快速修复方法是创建一个函数,以获取输入或无效值(如果不是int )。
def input_positive_integer(message):
while(True):
try:
value = int(input(message))
if (value<=0 or value > 100000 ):
raise ValueError("Not in range")
break
except ValueError as e:
print("Value error!! Try again!")然后,您可以更改接收整数的所有输入,以使用此函数。
注意,它将保持循环状态,直到该值有效为止。
我真的建议您避免对代码进行递归,尝试使用一个简单的while循环.
https://stackoverflow.com/questions/43461395
复制相似问题