分别是要求和我写的代码,中间部分我觉得应该没问题,输出部分应该怎么修改,如果能讲讲原因就更好了
补张样例2
我个人感觉最大的问题在All passed的输出上
对齐有问题,加权求和放出来。然后验证前17位为数字的if判断的else语句去掉。同时t在for循环中要重新赋值为0
不过题注的逻辑还是没符合输出要求,输入和输出混合一起了,一个用一个数组收集错误的身份证,最后再一起输出
n=int(input())
t=0
lst=[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
M=["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]
num=['0','1','2','3','4','5','6','7','8','9']
allPass=True##是否存在错误身份证
errIds=[]
for i in range(0,n):
s=list(input())
t=0
pre17AllNumber=True
for j in range(0,17):
if (s[j] not in num)==True:
errIds.append(''.join(s))############
allPass=False
pre17AllNumber=False
break
if not pre17AllNumber:#前17位不全为数字,不执行下面加权验证
continue
for j in range(0,17):
t=t+(lst[j]*int(s[j]))
z=t%11
m=M[z]
if m!=s[17]:
allPass=False
errIds.append(''.join(s))############
if allPass:
print('All passed')
else:
print('\n'.join(errIds))