我们被要求编写验证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()'会抛出一个运行时错误,如果用户事实上输入了一些只包含数字的东西。 –
请研究发布指南,您必须提取一个最小的发布示例,而不是您在此处引用的所有内容。这也是有原因的! –