2016-03-14 8 views
0

Мой код должен запросить 7-значное число (GTIN 8) и указать вам восьмую цифру и/или попросить ввести 8-значный номер (GTIN 8) и укажите, является ли это допустимым номером GTIN 8. Однако я не получаю эти результаты.Моя контрольная цифра GTIN 8 и проверка действительности не работают

Сообщение об ошибке при вводе в не 7 цифр

c = int(GTIN[2])*3

IndexError: string index out of range

сообщение об ошибке, когда я набираю в 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?

Спасибо. Это мой код (я могу уточнить, что вы не уверены):

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

@ Если это решение помогло, пожалуйста, убедитесь, что вы приняли его, чтобы помочь указать другим читателям – 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.