【发布时间】:2025-12-31 01:30:06
【问题描述】:
我的代码有问题。 它运行得很好,但在某些情况下(例如 input=8913266562747895)它给出了错误的答案。 这是我的代码:
def ccv(s):
k=list(s)
if len(k)==19:
for i in(0,1,2,3,5,6,7,8,10,11,12,13,15,16,17,18):
if not k[i].isdigit():
return False
for i in(4,9,14):
if k[i]!=" " and k[i]!="-":
return False
l=[int(c) for c in s if c.isdigit()]
if not 4<=l[0]and l[0]<=7:
return False
s=0
for i in range(0,16, 2):
l[i]=2*l[i]
if l[i]/10!=0:
l[i]= l[i]/10+(l[i]%10)
for i in range(16):
s=s+l[i]
return s%10==0
elif len(k)==16:
for i in range(16):
if not k[i].isdigit():
return False
l=[int(c) for c in s if c.isdigit()]
if not 4<=l[0]and l[0]<=7:
return False
else:
s=0
for i in range(0,16, 2):
l[i]=2*l[i]
if l[i]/10!=0:
l[i]= l[i]/10+(l[i]%10)
for i in range(16):
s=s+l[i]
return s%10==0
else:
return False
n=raw_input()
while n!="END" and n!="end":
print ccv(n)
n=raw_input()
你能告诉我问题出在哪里吗?
【问题讨论】:
-
这种代码有助于将其分解为较小的函数,每个函数检查一个状态,或者(甚至更好)使用有助于 CC 验证的库。
-
为什么不使用regex for such matters?
-
请描述“错误答案”的组成。举例输入输出;解释你对问题的理解。
-
@damienfrancois:因为正则表达式无法计算校验位(我认为这段代码正在这样做)。
-
您的测试编号 8913266562747895 should in fact return
True。请记住,即使您组成一个完全随机的 16 位数字,它也有十分之一的机会“有效”,即具有正确的控制和。
标签: python validation