-1

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

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 个空格。不管怎样,请让我知道你会做什么来完成我需要的任务。

4

2 回答 2

2

将 String 对象转换为 int 可能会引发 ValueError 异常,但是由于raw_input()返回一个str对象,您可以轻松检查它是否都是带有isdigit(). 的完整文档isdigit()在此处找到

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.
于 2013-09-10T06:49:46.117 回答
1

Cost = int(Cost)如果 Cost 不是 Integer 的字符串,将引发 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")

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

于 2013-09-10T06:46:37.673 回答