测试点通不过:
#查验身份证
def have_judge(my_list, judge_list, factor_list):
sum = 0
x = 0
last_num = my_list[-1]
my_list = my_list[:17]
for i in my_list:
if i >= '0' and i <= '9':
sum += int(i) * factor_list[x]
x += 1
else:
return False
remainder = sum % 11
if judge_list[remainder] == last_num:
return True
else:
return False
num = int(input())
count = 0
judge_list = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
factor_list = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10,5, 8, 4, 2]
for i in range(num):
my_list = input()
if have_judge(my_list, judge_list, factor_list) == False:
print(my_list)
else:
count += 1
if count == num:
print("All passed")
在判断输入的身份证号时,若是遇到的是非数字则直接的返回False,若是数字的话,直接的进行求和,不用再来一遍关门为了求和。
之前提交的那次一直是测试点2过不去,就是因为我在验证是否是数字,和求和是分了两个循环实现的,所以一直在报错,在网上查看了资料发现可以一块判断。然后需要注意的就是在判断的时候注意身份证的最后一位,要单独拿出判断,不然的话会出现下标越界的现象。