Python:将校验位自动添加到4位数字

时间:2019-01-19 11:01:22

标签: python

我有一个程序,允许用户输入10个名称并使用for循环存储在列表中。在循环内部,我创建了一个唯一的ID号,我想在该号上添加一个校验位(方法:将数字加起来,乘以1-4的位置),然后使用MOD 10)

如何将校验位添加到循环中的每个唯一编号并存储在列表中。

感谢您的帮助。

Staff =[] 
ID = [] 
Unique = 100 
Check = 0 
for i in range (0,3):
    Name = input("Enter your name:\n") 
    Staff.append (Name) 
    Unique = Unique + 1 
    p1 = (Unique[0]) 
    p2 = Unique [1] 
    p3 = Unique [2] 
    Check = ((p1*3)+(p2*2)+(p3*1))%10 
    Full = Unique,Check 
    ID.append (Full) 

for i in range (0,3): 
    print(Staff [i], ID [i]) 

#Error: 'int' object is not subscriptable 

1 个答案:

答案 0 :(得分:0)

在您的for循环中,您使用:

for i in range (0,3):
    Name = input("Enter your name:\n") 
    Staff.append (Name) 
    Unique = Unique + 1 
    strUnique = str(Unique)
    p1 = int(strUnique[0])
    p2 = int(strUnique[1]) 
    p3 = int(strUnique[2]) 
    Check = ((p1*3)+(p2*2)+(p3*1))%10 
    Full = Unique,Check 
    ID.append (Full) 

int对象不能下标,str对象不能下标。

您还可以使其更具Pythonic:

for i in range (0,3):
    Name = input("Enter your name:\n") 
    Staff.append (Name) 
    Unique = Unique + 1 
    p1,p2,p3 = map(int,str(Unique))
    Check = ((p1*3)+(p2*2)+(p3*1))%10 
    Full = Unique,Check 
    ID.append (Full) 

或只在一行中完成:

for i in range (0,3):
    Name = input("Enter your name:\n") 
    Staff.append (Name) 
    Unique = Unique + 1 
    Check = sum(map(lambda t:t[0]*t[1],enumerate(map(int,str(unique)[::-1]),1)))%10
    Full = Unique,Check 
    ID.append (Full)