【问题标题】:My GTIN 8 check digit and validity check isn't working我的 GTIN 8 校验位和有效性检查不起作用
【发布时间】:2016-03-14 19:52:41
【问题描述】:

我的代码应该要求输入一个 7 位数字 (GTIN 8) 并告诉您第 8 位数字和/或要求您输入一个 8 位数字 (GTIN 8) 号码并判断它是否是有效的 GTIN 8 号码。我没有得到这些输出。

当我输入非 7 位数字时出现错误消息

c = int(GTIN[2])*3

IndexError: 字符串索引超出范围

当我输入一个 8 位数字时出现错误消息

如果 len(str(GTIN))==8 和 sum(total)%10==0:

TypeError: '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")

【问题讨论】:

  • 不应该检查GTIN 的长度开始尝试访问其中的单个字符吗?
  • 我不确定这对于您如何编写代码是否有必要。不过可能,谢谢

标签: python validation debugging check-digit


【解决方案1】:

我建议在这里做一些额外的检查,以确保您拥有所需的东西。因此,当您获得用户输入并检查 isdigit 时,还要确保长度。

此外,您不应像设置条件那样使用continue。如果通过初始验证,您应该让逻辑继续进行。因此,您可以做的是检查它是否不符合条件,您可以打印一条错误消息,然后传递continue 以重新提示用户:

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

【讨论】:

  • @Clink 如果此解决方案有帮助,请确保您接受它以帮助向其他读者指出
【解决方案2】:

要汇总数字,您可以使用一个简短列表,您可以将其用作变量来计算校验位。 我是这样写的:

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

那么当你计算时你可以使用rounded - num_sum = check digit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多