我有一个程序,允许用户输入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
答案 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)