让我们专注于这个代码:
for c in s:
if len(s)!= 4:
valid = False
if not c.isdigit():
print (c, 'is not a valid input')
number = int(s)
首先要说的是,在len()
检查应的字符循环外移动。
if len(s)!= 4:
valid = False
for c in s:
...
下一个要做的评论是,当你检测到非数字时,你继续执行代码,就像没有任何错误一样。你大概打算将valid
设置为False
。
if not c.isdigit():
print (c, 'is not a valid input')
valid = False
现在,问题的主要部分。当检测到无效输入时,您需要跳过转换为int
。
if valid:
number = int(s)
...
如果你想继续这样的做法你的代码应该是这样的:
valid = True
s = input('please type a 4-digit integer \n')
if len(s)!= 4:
valid = False
print(len(s), 'is an invalid amount of digits')
if valid:
for c in s:
if not c.isdigit():
valid = False
print (c, 'is not a valid input')
if valid:
number = int(s)
firstOne = number // 100
secondOne = number % 100
sum = firstOne + secondOne
x = '/'
print('your integer is ' + str(number), x, 'first two digits are ' + str(firstOne), x, 'second two digits are ' + str(secondOne), x, 'sum of two new numbers is ' + str(sum))
说了这一切,我可能会重新组织代码颇有几分应对只要检测到错误,就会发生错误。如果你能以这种方式组织你的错误处理,代码将更容易理解。
s = input('please type a 4-digit integer \n')
if len(s)!= 4:
sys.exit(str(len(s)) + ' is an invalid amount of digits')
for c in s:
if not c.isdigit():
sys.exit(c + ' is not a valid input')
number = int(s)
firstOne = number // 100
secondOne = number % 100
sum = firstOne + secondOne
x = '/'
print('your integer is ' + str(number), x, 'first two digits are ' + str(firstOne), x, 'second two digits are ' + str(secondOne), x, 'sum of two new numbers is ' + str(sum))
现在,这是一个正确的方向,但您仍然可以继续以这种方式让代码更好更好。 Sven's answer为您提供了一个很好的例子,说明这样一个过程最终会导致什么。
这非常有帮助!非常感谢你。虽然你的解决方案似乎是最简单的,有没有什么办法可以维护我的代码中的有效和布尔逻辑,并仍然避开错误信息? – dustdustdust 2012-02-16 14:18:47
@垃圾粉尘:如果你认为这个答案是最有用的答案(我认为是这样),考虑接受它。 – 2012-02-16 14:59:52
@垃圾粉尘当然。我已经更新了答案,真正拼出来了。但我不能强调这是一个不好的解决方案。这个问题存在的事实表明了基于“if”的错误处理的问题。 – 2012-02-16 15:00:32