求解,有答案能输出,但不是满分

img

img


身份证校验问题,输入一个n,表示接下来有n行身份证号码,统计正确的身份证号码,在输出正确的个数

n = int(input())
w = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]
ans = 0
for _ in range(n):
    id = input()
    s = sum(int(id[i])*w[i] for i in range(17))
    if id[-1] in "Xx": s += 10
    else: s += int(id[-1])
    if s % 11 == 1: ans += 1
print(ans)
def is_valid_id_number(id_number):
    factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    parity = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
    if len(id_number) != 18:
        return False
    if not id_number[:-1].isdigit():
        return False
    if id_number[-1] not in parity:
        return False
    sum = 0
    for i in range(17):
        sum += int(id_number[i]) * factor[i]
    check = parity[sum % 11]
    return check == id_number[-1]

n = int(input())
count = 0
for i in range(n):
    id_number = input()
    if is_valid_id_number(id_number):
        count += 1
print(count)