我們被要求編寫驗證GTIN-8代碼的程序。 的valdation如下:爲什麼我得到這個錯誤「IndexError:字符串索引超出範圍」
乘第一7位交替由3然後1
添加起來
減去該數量從10
的相等或更高的多
生成的數字是第八位數字
這裏是我的代碼:
def validgtin():
gtin = input("Enter the 8 digits of GTIN-8 product code: ")
valid = False
while valid == False:
if gtin.isdigit():
gtin = str(gtin)
if len(gtin) == 8:
valid = True
else:
print("That is not correct, enter 8 digits, try again: ")
gtin = input("Enter the 8 digits of GTIN-8 product code: ")
else:
print("That is not correct, type in numbers, try again: ")
gtin = input("Enter the 8 digits of GTIN-8 product code: ")
sumdigit = 3*(int(gtin[0])) + 1*(int(gtin[1])) + 3*(int(gtin[2])) + 1*(int(gtin[3])) + 3*(int(gtin[4])) + 1*(int(gtin[5])) + 3*(int(gtin[6])) #sum of the digits
gtin = str(gtin)
valid1 = False
while not valid1:
if sumdigit%10 == 0:
eightdigit = 0
else:
eightdigit = (((sumdigit + 10)//10)*10) - sumdigit
if eightdigit == (gtin[7]):
valid1 = True
print("Your GTIN-8 product code is valid.")
else:
print("Your GTIN-8 product code is not valid.")
gtin = input("Enter the 8 digits of GTIN-8 product code: ")
return
validgtin()
當我運行此代碼,然後鍵入一個無效的GTIN-8代碼它說,該代碼是無效的,並提示我輸入一個新的GTIN-8編碼
但
後,我在一個新的和有效的GTIN-8編碼鍵入它仍然說,這是無效的
和
之後,出現這種情況:
Traceback (most recent call last):
File "C:\Users\Yash Dwivedi\Documents\Year 10\GCSE Computing\Assignment\Task 1 v2.py", line 29, in validgtin
if eightdigit == (gtin[7]):
IndexError: string index out of range
我不明白爲什麼我 會感謝任何幫助。
你可以嘗試打印gtin,就在你出錯之前 – AlokThakur
gtin = str(gtin)'是什麼意思?這在Python 2中會有一些意義 - 但是在那種情況下你應該使用'raw_input'。另一方面,如果這個*是* Python 2那麼'gtin.isdigit()'會拋出一個運行時錯誤,如果用戶事實上輸入了一些只包含數字的東西。 –
請研究發佈指南,您必須提取一個最小的發佈示例,而不是您在此處引用的所有內容。這也是有原因的! –