2016-05-21 3 views
0

Я довольно новичок в Python, и я пишу программу, которая может конвертировать семизначное число в код GTIN-8 с контрольной цифрой. Это позволяет запускать его, но после того, как ввести свой номер он дает мне ошибку:Ошибка индекса при запуске моего кода

IndexError: String index out of range 

Мой код выглядит следующим образом:

sevenNum = "" 
gtinNum = "" 
checkDigit = "" 
total = "" 

a = 0 
b = 0 
c = 0 
d = 0 
e = 0 
f = 0 
g = 0 

def GTINCalc(): 
    a = int(sevenNum[0])*3 
    b = int(sevenNum[1])*1 
    c = int(sevenNum[2])*3 
    d = int(sevenNum[3])*1 
    e = int(sevenNum[4])*3 
    f = int(sevenNum[5])*1 
    g = int(sevenNum[6])*3 

    total = int(a+b+c+d+e+f+g) 

    checkDigit = (total + 9) // 10 * 10 - total 

    print("GTIN-8 Code: {0}{1}{2}{3}{4}{5}{6}{7}".format(a, b, c, d, e, f, g, checkDigit)) 


def sevenNumAsk(): 
    sevenNum = input("Enter a 7 digit number to be converted into a GTIN-8 Number") 
    if sevenNum.isdigit() == True and len(sevenNum) == 7: 
     print("Valid Number - Calculating GTIN-8...") 
     GTINCalc() 
    else: 
     print("The number is not valid - please re-enter ") 
     sevenNumAsk() 

sevenNumAsk() 

Та часть, которая выделяется на:

a = int(sevenNum[0])*3 

Любая помощь приветствуется. Благодарю.

+0

В зависимости от отступов и т. Д. Этого кода вопросов sevenNum не может быть глобальной переменной, как вы ожидаете. В качестве побочной заметки попробуйте передать переменные через аргументы (что тоже лучше, в общем) –

+0

@ScottStainton Alex Hall дал мне хорошее исправление. Я вижу, что вы имеете в виду без индекса. Благодарю вас. – Jordan

ответ

1

sevenNum - локальная переменная внутри sevenNumAsk и не влияет на глобальную переменную, созданную вверху. Сделайте это:

def sevenNumAsk(): 
    global sevenNum 
    sevenNum = ... 

и будет действовать так, как вы ожидаете. Еще лучше использовать класс или пройти sevenNum в качестве параметра. Глобальные переменные, как правило, плохие, и это одна из причин.

+0

Я уже объявил sevenNum в верхней части кода. Я попытаюсь изменить его и посмотреть, что произойдет. – Jordan

+0

Работы, очень ценится! – Jordan

+0

вы указали его наверху, но функция не знала, что использовать глобальное определение (следовательно, «глобальный» модификатор) –

Смежные вопросы