[英]Python: automatically add a check digit to a 4 digit number
我有一個程序,允許用戶輸入 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
在您的 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.