2016-03-14 37 views
0

我的代碼應該要求輸入一個7位數字(GTIN 8)並告訴您第8位數字和/或要求您輸入8位數字(GTIN 8)號碼和告訴它是否是有效的GTIN 8號碼。雖然我沒有得到這些輸出。當我在一個8位數字我的GTIN 8校驗碼和有效性檢查不起作用

if len(str(GTIN))==8 and sum(total)%10==0:

TypeError: 'int' object is not iterable What do I need to do to my code to fix this error?

由於輸入一個不7位數

ERROR消息,當I型

c = int(GTIN[2])*3

IndexError: string index out of range

ERROR消息。這是我的代碼(我可以澄清任何你不能確定):

while 2>1: 
    GTIN = input("Enter 7 digit number for check-digit. Enter 8 digit number for validity.") 
if GTIN.isdigit()==False: 
    continue 

a = int(GTIN[0])*3 
b = int(GTIN[1])*1 
c = int(GTIN[2])*3 
d = int(GTIN[3])*1 
e = int(GTIN[4])*3 
f = int(GTIN[5])*1 
g = int(GTIN[6])*3 

total = (a+b+c+d+e+f+g) 

checkdigit = (total + 9) // 10 * 10 - total 

if len(GTIN) == 7: 
    print("Your check digit is",checkdigit) 

if len(str(GTIN))==8 and sum(total)%10==0: 
    print("Valid GTIN-8 number") 
else: print("Invalid GTIN number") 
+0

在開始嘗試訪問單個字符之前,您不應該檢查'GTIN' *的長度嗎? –

+0

我不確定這對於您如何執行代碼是必要的。可能雖然,謝謝 – Clink

回答

0

我的建議在這裏做什麼是做一些額外的檢查,以確保你有你需要的東西。所以,當你得到用戶輸入並且你正在檢查isdigit時,確保長度。

此外,你不應該使用continue你的條件設置的方式。如果通過初始驗證,您應該讓邏輯繼續進行。所以,相反,你可以做的是檢查,如果不符合條件,就可以打印一個錯誤信息,然後通過一個continue再提示用戶:

if not GTIN.isdigit() or not len(GTIN) == 8: 
    print("invalid entry...") 
    continue 
+0

謝謝,會做 – Clink

+0

@Clink如果這個解決方案有幫助,請確保你接受它來幫助其他讀者 – idjaw

0

要總量可達你可以在數字使用一個可以用作變量來計算校驗位的短列表。 我把我的是這樣的:

num_sum = num * 3 +num_1 + num_2 * 3 + num_3 + num_4 * 3 + num_5 + num_6 * 3 

然後,當你計算你可以使用rounded - num_sum = check digit