私のレッスンでは、入力の文字列を受け取り、文字の頻度を使用して可能な限り最良の文字列を見つけるシーザー暗号デコーダーを作成するという任務を負いました。それがどれほど意味があるかわからない場合は、質問を投稿しましょう:
次のことを行うプログラムを作成します。まず、エンコードされたメッセージである1行の入力を読み取る必要があり、大文字とスペースで構成されます。プログラムは、シフトSの26の可能な値すべてを使用してメッセージのデコードを試行する必要があります。これらの26の可能な元のメッセージのうち、最高の良さを持っているものを印刷します。便宜上、変数letterGoodnessを事前に定義します。これは、上記の度数分布表の値に等しい長さ26のリストです。

私はこれまでにこのコードを持っています:
x = input()
NUM_LETTERS = 26 #Can't import modules I'm using a web based grader/compiler
def SpyCoder(S, N):
    y = ""
    for i in S:
        x = ord(i)
        x += N
        if x > ord('Z'):
            x -= NUM_LETTERS
        elif x < ord('A'):
            x += NUM_LETTERS
        y += chr(x)
    return y  
def GoodnessFinder(S):
    y = 0
    for i in S:
        if x != 32:
            x = ord(i)
            x -= ord('A')
            y += letterGoodness[x]
    return y 
def GoodnessComparer(S):
    goodnesstocompare = GoodnessFinder(S)
    goodness = 0
    v = ''
    for i in range(0, 26):
        v = SpyCoder(S, i)
        goodness = GoodnessFinder(v)
        if goodness > goodnesstocompare:
            goodnesstocompare = goodness
    return v
y = x.split()
z = ''
for i in range(0, len(y)):
    if i == len(y) - 1:
        z += GoodnessComparer(y[i])
print(z)
編集:CristianCiupituによって提案された変更を加えましたインデントエラーは無視してください。コードをコピーしたときに発生した可能性があります。
プログラムは次のように機能します。
- 入力を取得し、リストに分割します
 - すべてのリスト値について、私はそれを良さのファインダーに送ります。
 - それは弦の良さを取り、他のすべてを比較し、より高い良さがあれば、より高いものを比較する良さにします。
 - 次に、そのテキストの文字列をi量だけシフトして、良さが高いか低いかを確認します。
 
問題がどこにあるのかよくわかりません。最初のテスト:LQKP OG CV GKIJV DA VJG BQQ
正しいメッセージを出力します:JOIN ME AT AT BY THE ZOO
ただし、次のテスト:UIJT JT B TBNQMF MJOF PG UFYU GPS EFDSZQUJOH次
のジャンク文字列を指定します:SGHR HR Z RZLOKD KHMD NE SDWS ENQ 
CDBQXOSHMF  
私は私がしなければならないことを知っています:
すべてのシフト値を試してください
単語の「良さ」を取得し
ます最高の良さを持つ文字列を返します。
私は今かなり混乱しているので、私の説明が理にかなっていることを願っています。