2016-05-23 5 views
0

私は学校で仕事をしていました。これはアルファベットに沿って移動されたテキストを解読すること(それが何であるか分からない)であった。 abcからbcdへ。単純解読プログラム

alpha = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] 

userInput = str(input("Enter text: ")) 
key = 1 
userInput = userInput.lower() 
print(userInput) 

def userText(userInput, alpha, key): 
    translated = "" 
    for x in (userInput): 
     num = ord(alpha[x]) 
     num += key 
    translated += chr(num) 
    print(translated) 

print(userText(userInput, alpha, key)) 

私はエラーを得た:

File "/Users/Andreasjensen/Documents/decipher.py", line 13, in userText 
    num = ord(alpha[x]) 
TypeError: list indices must be integers or slices, not str 

私はそれはそれはアルファで数えることができないことを意味だと思いますか?本当に分かりませんが、問題を見つけることを望んでいました。

+1

あなたのステートメント 'for x in(userInput):'は、文字列の各*文字*に 'x'を設定して次のコードを実行します。文字をリストのインデックスとして直接使用することはできません。最初に番号に変更する必要があります。 –

+0

これを試してください: 'x in range(len(userInput)):' –

+0

'translated'を設定するとインデントが間違っています。それはforループ内になければなりません。 – hhbilly

答えて

0

xは既にテキスト文字です。 - それはあるこれは配列は無用であるあなたのアルファことを意味していること

num = ord(x) 

注:代わりに、私はあなたが最初のループ文は、整数への単純な転送することをしたいと思います。基本的な翻訳はあなたが作ったように見えますが、アルファベットの最後を囲む必要があります。

for x in userInput: 
    translated += chr(ord(x) + key) 

を...または単にリストの内包表記を使用します:あなたのループが崩壊できることに注意してください、あなたはすべての個々の文字変換のリストを作成し、次に文字列にそのに参加:

translated = ''.join([chr(ord(x) + key) for x in userInput]) 

しかし、これはまだラップアラウンドを処理しません。私はこれがあなたの次のステージだと思います。

関連する問題