这错在哪儿,怎么改?

w = (7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)  #权重元组
identityID = list(map(int, list(input()))) #输入身份证号码
lst = [w[i] * identityID[i] for i in range(17)]
num = (12 - sum(lst) % 11) % 11 #计算验证码
if num == identityID[17]  : #在此处填空,根据验证码判断身份证号码是否正确
    print("这是一个正确的身份证号码。")
else:
    print("这是一个错误的身份证号码。")

Exited with error status 1
Traceback (most recent call last):
  File "1e9a62e8526272f05df621e0939e3e5c", line 3, in <module>
    lst = [w[i] * identityID[i] for i in range(17)]
  File "1e9a62e8526272f05df621e0939e3e5c", line 3, in <listcomp>
    lst = [w[i] * identityID[i] for i in range(17)]
IndexError: list index out of range

这错在哪儿,怎么改

代码没错

只是你输入的必须18位数字,输入的少于18位就出错,你要加个判断

w = (7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)  #权重元组
s=input()
if s.isdigit() and len(s)==18:
    identityID = list(map(int, list(s))) #输入身份证号码
    lst = [w[i] * identityID[i] for i in range(17)]
    num = (12 - sum(lst) % 11) % 11 #计算验证码
    if num == identityID[17]  : #在此处填空,根据验证码判断身份证号码是否正确
        print("这是一个正确的身份证号码。")
    else:
        print("这是一个错误的身份证号码。")
else:
    print("输入错误。身份证号码应该是18位数字。")

 

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632