if/else 语句中的代码中断
Code breaking in if/else statement
我正在制作一个多重计算器,但我差点搞砸了,问题是当我要求一个数字时,如果用户输入了一个字符串,代码就会中断并抛出一个错误,即使我有 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()
您收到错误消息是因为您在用户输入中断言了 int
类型,而没有首先检查以确保其有效。正如@kindall 在 中指出的那样,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)
(请注意,您可能只是重复提示,而不是返回错误文本。)
您当前代码的一个快速修复方法是创建一个函数来获取输入或无效值(如果它不是 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 循环...
我正在制作一个多重计算器,但我差点搞砸了,问题是当我要求一个数字时,如果用户输入了一个字符串,代码就会中断并抛出一个错误,即使我有 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()
您收到错误消息是因为您在用户输入中断言了 int
类型,而没有首先检查以确保其有效。正如@kindall 在 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)
(请注意,您可能只是重复提示,而不是返回错误文本。)
您当前代码的一个快速修复方法是创建一个函数来获取输入或无效值(如果它不是 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 循环...