1

ユーザーが記号/文字のペアを辞書に送信してコードを解読するコード解読ゲームを作成しようとしています。次に、コードで辞書を使用して、記号の各インスタンスをペアの文字に置き換えます。

次のコードがあります。

words = imported list of coded words where each letter is replaced by a symbol. from a text file so i can change later
clues = dictionary of symbol and letter pairs that can be added to, removed from

次のことを試しましたが、失敗しました:TypeError: list indices must be integers, not str

def converter(words,clues):

    progression = words


    for words in progression:#cycles through each coded word in the list
        for key in clues: #for each symbol in the dictionary
            progression[words] = progression[words].replace(key, clues[key]) #replaces


    return progression

誰でも提供できるどんな助けでも、私はとても感謝しています。

アダム

4

2 に答える 2

2

progressionリストです。そこからコンテンツにアクセスするには、文字列ではなく整数であるインデックス値を使用する必要があるため、エラーが発生します。

あなたはおそらく欲しい:

for i, j in enumerate(words):
    words[i] = clues.get(j)

enumerate が行うことは、単語のリストをループすることです。ここiで、 はインデックス値で、jはコンテンツです。.get()に似てdict['key']いますが、キーが見つからない場合はNone、エラーを発生させる代わりに戻ります。

次にwords[i]、単語のインデックス番号でリストを変更します

于 2013-06-27T14:41:43.837 に答える
1

Haidroはかなりうまく説明してくれましたが、私は彼のコードを拡張し、別の問題にも対処したいと思いました。

まず、Inbar Roseが指摘したように、あなたの命名規則は良くありません。これにより、コードの読み取り、デバッグ、および保守がはるかに困難になります。簡潔でわかりやすい名前を選び、必ずPEP-8に従ってください。特に同じスコープ内で、異なるものに同じ変数名を再利用することは避けてください。

さて、コードに:

words = ['Super', 'Random', 'List']
clues = {'R': 'S', 'd': 'r', 'a': 'e', 'o': 'e', 'm': 't', 'n': 'c'}


def decrypter(words, clues):

    progression = words[:]

    for i, word in enumerate(progression):
        for key in clues:
            progression[i] = progression[i].replace(key, clues.get(key))

    return progression

これにより、 のキーではprogression[i]なく、 のコンテンツ内の文字が置き換えられるようになりました。progression[i]clues

また、アクションするリストのコピーを作成するために変更progression = wordsされました。progression = words[:]単語への参照を渡し、その同じ参照を進行に割り当てます。を操作するときprogressionは を操作するので、この場合は使用しても無駄になりますwordsprogression

使用例:

print words
print decrypter(words, clues)
print words

を使用して出力progression = words:

['スーパー', 'ランダム', 'リスト']
['スーパー', 'シークレット', 'リスト']
['スーパー', 'シークレット', 'リスト']

を使用して出力progression = words[:]:

['スーパー', 'ランダム', 'リスト']
['スーパー', 'シークレット', 'リスト']
['スーパー', 'ランダム', 'リスト']

于 2013-06-27T16:46:08.410 に答える