注册 登录
编程论坛 Python论坛

python初学者有个问题问问各位大佬

haun 发布于 2018-10-30 13:08, 1050 次点击
运行代码,报错显示元组索引超出范围
 Traceback (most recent call last):
  File "C:/Users/15059/Desktop/Python/12222.py", line 11, in <module>
    b+=int(i)*t[n]
IndexError: tuple index out of range
注释第11行 n+=1 之后则不报错,萌新实在想不通为什么,求大佬解答
以下为代码:
只有本站会员才能查看附件,请 登录

t=(7,9,10,5,8,4,2,1,6,7,9,10,5,8,4,2)
f=(1,0,"x",9,8,7,6,5,4,3,2,1)
n,b=0,0
while 1:
    a=input("请输入身份证号:")
    if len(a)==18:
        break
    else:
        print("身份证长度错误,请重新输入!")
for i in a:
    b+=int(i)*t[n]
    n+=1
if b%11==t[b%11] and t[b%11]==a[18]:
    print("身份证号为真!")
    if int(a[17])%2==0:
        print("性别为女")
    else:
        print("性别为男")
else:
    print("身份证号为假!")

1 回复
#2
傻眼猫咪2021-08-02 22:38
樓主,你的t=(7,9,10,5,8,4,2,1,6,7,9,10,5,8,4,2)和f=(1,0,"x",9,8,7,6,5,4,3,2,1)打錯了

程序代码:

# 以下為我的代碼
factor = (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
last = ('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')

while True:
    try:
        id_num = list(map(int, (input('輸入18位身份證號:'))))
        if len(id_num) != 18:
            print('輸入錯誤')
            continue
        if id_num[16]%2 == 0: sex = '女性'
        else: sex = '男性'
        if last[((sum(list(map(lambda x: factor[x]*id_num[x], range(17)))))%11)-1] == str(id_num[-1]):
            print(sex)
        else: print('非法身份證,請重新', end = '')
    except ValueError:
        print('輸入錯誤,請重新', end = '')
        continue

1