循环计算器(Python)

时间:2013-09-10 06:37:07

标签: python

所以我现在正在制作小费计算器。我坚持的是他们可以输入总费用的地方。如果他们输入一个整数我希望它突破循环,但如果他们输入的东西不是整数,我希望它留在循环中并告诉他们输入一个整数。这是我为这部分编写的代码。 (不是所有代码)

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个空格。无论如何,请让我知道你将如何完成我需要的任务。

2 个答案:

答案 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不是整数的字符串,

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")

异常使控制流程不明显,应尽可能避免。