所以我现在正在制作小费计算器。我坚持的是他们可以输入总费用的地方。如果他们输入一个整数我希望它突破循环,但如果他们输入的东西不是整数,我希望它留在循环中并告诉他们输入一个整数。这是我为这部分编写的代码。 (不是所有代码)
Integer = range(1,10000)
while True:
while True:
Cost = raw_input("What was the cost? ")
Cost = int(Cost)
if Cost in Integer:
break
else:
pass
间距可能看起来不正确,但它在实际脚本中。我仍然不知道如何在这里粘贴代码而不必为每一行添加4个空格。无论如何,请让我知道你将如何完成我需要的任务。
答案 0 :(得分:2)
但是,将String对象强制转换为int可能会引发ValueError异常
由于raw_input()
会返回str
个对象,因此您可以轻松检查它是否为isdigit()
的所有数字。 isdigit()
的完整文档是found here
if cost.isdigit():
cost = int(cost)
break
else:
cost = raw_input("What is the cost? ")
那是问题1。
您遇到的问题2是if Cost in Integer
。
这不是如何工作的,你可能在if isinstance(cost, int):
之后,因为你想要检查它是否是一个整数(因为你正在转换它)
最后:
你不应该使用while True
,虽然这对你有用,但你没有能够打破它,因为你没有将True
分配给变量。
outer = True
inner = True
while outer:
while inner:
#your code here
inner = False #now it will break automatically from the inner loop.
答案 1 :(得分:1)
Cost = int(Cost)
将引发ValueError。
因此,
while True:
Cost = raw_input("What was the cost? ")
try:
Cost = int(Cost)
break
except ValueError:
print("Please enter an Integer for the cost")
如您所见,只有在未引发ValueError时才会执行break。
你不应该这样做。你应该做的是在铸造之前测试isdigit:
while True:
Cost = raw_input("What was the cost? ")
if Cost.isdigit():
Cost = int(Cost)
break
else:
print("Please enter an Integer for the cost")
异常使控制流程不明显,应尽可能避免。