测试点0一直通不过,代码:
num = int(input())
weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
exam = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
dic = {}
k = 0
for i in range(num):
IDN = input()
dic[IDN] = True
IDLs = list(IDN)
target = IDLs.pop(-1)
try:
IDLn = list(map(int, IDLs))
prod = list(map(lambda a, b: a * b, IDLn, weight))
prod = sum(prod)
prod = prod % 11
if IDN[17] == exam[prod]:
dic[IDN] = False
k = k + 1
except ValueError:
pass
if k == num:
print("All passed")
else:
for i in dic:
if dic[i]:
print(i)
“Devil组”引证GPT后的撰写:
修改的几个问题:
输入的身份证号码应该是18位,而不是17位。因此,第3行的权重列表应该包含18个元素,而不是17个。
在计算身份证号码校验码时,应该将计算得到的值与校验码进行比较,而不是与身份证号码的最后一位进行比较。因此,第14行应该改为:
if exam[prod] == target:
输入的身份证号码可能会包含非数字字符,例如字母。在这种情况下,将无法将非数字字符转换为整数,并且代码将引发ValueError异常。因此,应该将try语句的位置更改为内部循环中,以便在转换失败时继续进行下一个循环。例如:
for i in range(num):
IDN = input()
dic[IDN] = True
IDLs = list(IDN)
target = IDLs.pop(-1)
try:
IDLn = list(map(int, IDLs))
prod = list(map(lambda a, b: a * b, IDLn, weight))
prod = sum(prod)
prod = prod % 11
if exam[prod] == target:
dic[IDN] = False
else:
raise ValueError
except ValueError:
pass
当所有身份证号码都通过验证时,应该输出"All passed",而不是"ALL passed"。因此,第19行应该改为:
print("All passed")
通过这些修改后,代码应该能够通过OJ的测试。