这是一个随机的python循环代码示例:
for j in range(5):
try:
cats = raw_input("Enter age of your five cats")
except ValueError:
print ("Try again")
我对这段代码的问题是,当触发除行时,我的循环不能完全重置。会发生什么事情,当我得到一个异常时,异常本身在范围内计为1 ..
更具体:
假设用户没有触发异常,我们得到这5个年龄输入 5 4 5 3 2 (范围5),但是如果我们确实触发了异常,那么用户只能进入4个年龄 5 4 5 3 因为某些原因,异常计入范围计数。有谁知道如何解决这个问题?
答案 0 :(得分:3)
您可以执行以下操作:
for j in range (5):
badCat = True
while badCat:
try:
cats[j] = int (raw_input ("Enter age of cat # %d: " % (j + 1)))
badCat = False
except ValueError:
print ("Try again")
这将保留在一只猫上,直到你输入一个"适当的"年龄。
您会注意到我在您的输入函数调用周围包裹了int()
。我认为这是你最终要做的事情,因为我很确定raw_input()
并不会自己抛出ValueError
。
我还将猫的年龄存储在一个数组中,因为您的代码只会记住输入的最后一个年龄。
你可以通过稍作修改来消除对单独变量的需要(如果你担心那种事情(我倾向于不这样)):
for j in range (5):
while True:
try:
cats[j] = int (raw_input ("Enter age of cat # %d: " % (j + 1)))
break;
except ValueError:
print ("Try again")
答案 1 :(得分:1)
保持while
循环内的for
循环,直到获得所需的输入。
for j in range(5):
input_ok = False
while not input_ok:
try:
cats = raw_input("Enter age of your five cats")
input_ok = True
except ValueError:
print ("Try again")
这样,当您获得有效的猫龄时,您将只进入外部for
循环的下一次迭代。
答案 2 :(得分:0)
也许......
for j in range(5):
while True:
try:
cats = raw_input("Enter age of your five cats")
break
except ValueError:
print ("Try again")