请问python我这个程序到底哪里写错了?

这是题目

img

我写的程序如下

img


多次检查都找不出哪里出了错,但第一个号码应该输出YES,我的总是NO

for i in range(1,17) 这个意思是1-16 少算一位,应该是for i in range(1,18) 1-17,if x[17]判断放在第二个for循环外(向前缩进移位),改的代码如下

n = int(input())
for i in range(n):
    x = input()
    sum = 0
    for j in range(1,18):
        sum += (int(x[i-1]))*(2**(18-i))
    if x[17] == "X":
        sum += 10
    else:
        sum += int(x[17])
    if sum % 11 == 1:
        print("YES")
    else:
        print("NO")

你的问题太多 你参考这个吧

img

while True:
    IDcard = input("请输入一个身份证:")
    i = 17
    total = 0
    for str_num in IDcard:
        if str_num == "X":
            str_num = '10'
        total += int(str_num) * (2**i)
        print(f"{str_num}x2**{i}")
        i -= 1
    if total % 11 == 1:
        print("Yes")
    else:
        print("No")