我的代码应该要求输入 7 位数字 (GTIN 8) 并告诉您第 8 位数字和/或要求您输入 8 位数字 (GTIN 8) 数字并判断它是否是有效的 GTIN 8 编号。不过,我没有得到这些输出。
当我输入非 7 位数字时出现错误消息
c = int(GTIN[2])*3
索引错误: 字符串索引超出范围
输入 8 位数字时出现错误消息
如果 len(str(GTIN))==8 且 sum(total)%10==0:
类型错误:"int"对象不可迭代 我需要对我的代码执行哪些操作才能修复此错误?
谢谢。这是我的代码(我可以澄清任何你不确定的事情):
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")
我建议在这里做的是做一些额外的检查,以确保你有你需要的东西。因此,当您获得用户输入并检查isdigit
时,还要确保长度。
此外,您不应以设置条件的方式使用continue
。如果逻辑通过初始验证,则应让逻辑继续。因此,您可以做的是检查它是否与条件不匹配,您可以打印错误消息,然后传递continue
以重新提示用户:
if not GTIN.isdigit() or not len(GTIN) == 8:
print("invalid entry...")
continue
要对数字求和,您可以使用一个简短的列表,该列表可以用作计算校验位的变量。我把我的是这样的:
num_sum = num * 3 +num_1 + num_2 * 3 + num_3 + num_4 * 3 + num_5 + num_6 * 3
然后当你计算时,你可以使用 rounded - num_sum = check digit
.