2016-05-21 6 views
0

私はPythonにはかなり新しく、7桁の数字をチェック桁のGTIN-8コードに変換できるプログラムを書いています。それは私がそれを実行することができますが、私は私の電話番号を入力した後、それは私にエラー与える:ハイライトされている部分がある私のコードを実行しているときにインデックスエラーがある

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() 

IndexError: String index out of range 

私のコードを次のようにされて

a = int(sevenNum[0])*3 

何か助けていただければ幸いです。ありがとう。

+0

この質問コードのインデントなどに応じて、sevenNumは期待どおりのグローバル変数ではない可能性があります。助言として、引数を渡して変数を渡してみてください(これも一般的にはより良い習慣です)。 –

+0

@ScottStainton Alex Hallが私にそれに対して良い修正を与えました。あなたはインデックスがないということを私は見ている。とにかくありがとうございます。 – Jordan

答えて

1

sevenNumは、sevenNumAskのローカル変数で、上に作成したグローバル変数には影響しません。これを行う:

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

これは期待どおりに動作します。さらに、クラスを使用するか、パラメータとしてsevenNumを渡してください。グローバル変数は一般的に悪いものであり、これが理由の1つです。

+0

私はすでにコードの先頭にsevenNumを宣言しています。私はそれを修正し、何が起こるか見ることを試みます。 – Jordan

+0

作品、大変感謝しています! – Jordan

+0

あなたはそれを一番上に宣言しましたが、関数はグローバル定義を使用することを知らなかった(したがって 'global'修飾子) –

関連する問題