簡體   English   中英

Python:自動為4位數字添加校驗位

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM