2017-03-16 8 views
-1

他の関数を呼び出す関数を呼び出すと、このTypeErrorが取得され、最初の関数を呼び出すときにその理由がわかりません。ここでは、コードです:TypeError: 'int'オブジェクトはサブスクリプト化できません(ネストされた関数)

def codeChar(c,key): 
    k = ord(c) + key 
    if key > 26: 
     key = key % 26 
    if 91 <= k <= 96: 
     k = k - 26 
    elif 123 <= k: 
     k = k - 26 
    c = chr(k) 
    return c 

def codeBlock(word,key): 
    i = 0 
    result = "" 
    while i < len(word): 
     k = int(key[i]) 
     result = result + codeChar(word[i],k) 
     i = i + 1 
    return result 

def isletter(h): 
    i = ord(h) 
    if 65 <= i <= 90: 
     return True 
    elif 97 <= i <= 122: 
     return True 
    else: 
     return False 

def codeString(string,key): 
    i = 0 
    result = "" 
    while i < len(string): 
     k = int(key[i]) 
     if isletter(string[i]) == True: 
      result = result + codeBlock(string[i],k) 
      i = i + 1 
     else: 
      i = i + 1 
    return result 

print(codeString(input("Enter a sentence to be coded: "),input("Enter an 8 digit key: "))) 

エラーコードを受信し、私はそれがこれです実行すると、事前に

Enter a sentence to be coded: Hello world 
Enter your student number: 16061226 
Traceback (most recent call last): 
    File "E:\cw.1\cw.1.py", line 89, in <module> 
    print(codeString(input("Enter a sentence to be coded: "),input("Enter your student number: "))) 
    File "E:\cw.1\cw.1.py", line 82, in codeString 
    result = result + codeBlock(string[i],k) 
    File "E:\cw.1\cw.1.py", line 39, in codeBlock 
    k = key[i] 
TypeError: 'int' object is not subscriptable 

ありがとう!

+1

エラーはどこで発生しますか?エラーメッセージ全体は何でしたか? –

+0

ちょっと追加しましたが、私はそれを忘れてしまったことに気付きました – Jack

答えて

0

kcodeBlockに36行で渡すと、関数が期待している文字列ではなく、整数です。代わりにkeyを使用する予定ですか?

+0

キーを使用するとIndexErrorが返されます:文字列インデックスが 'result = result + codeBlock(string [i]、key [i])'行の範囲外です – Jack

+0

文字列がキーよりも短いと仮定しているためです。文字列がキーよりも長い場合は、記述したエラーが発生します。 –

0

他の関数から関数を呼び出すこととは関係ありません。 をcodeStringから呼び出すときは、パラメータkを整数に渡します。もう一方の側では、の関数codeBlockで、int(key[i])を実行してその整数にインデックスを付けると、typeErrorが返されます。

関連する問題