課題が与えられていて、ほぼ完了しました。最後のビットで苦労しています。プログラムはシーザー暗号テキストを与えられ、次に最も頻繁な文字が何であるかを調べ、これを端末に印刷します。 (私が行っているところで) これは、最も頻繁な文字に基づいてキーシフトを提案し、ユーザはこのキーシフト、またはそれ自身のキーシフトを手動で入力することができ、テキストは解読される。文字の違いを調べるpython
私は、シーザーテキストの中で最も頻繁に出てくる文字を取り、それを英語の中で最も頻繁に出てくる文字である「E」と比較して、それがどれだけ離れているかを調べるプログラムが必要です。
たとえば事前に
import sys
def decrypt(plain, key):
"returns a Caesar cipher text given plain text and a key"
cipher = ""
for index in range(len(plain)):
if plain[index].isalpha():
if plain[index].islower():
cipher = cipher + chr((ord(plain[index]) -101- key+26) % 26+ 101)
else:
cipher = cipher + chr((ord(plain[index]) -65- key+26) % 26+ 65)
else:
cipher = cipher + plain[index]
return cipher #do nothing here
#main program
key = int(sys.argv[4])
action = sys.argv[2]
try:
in_file = open(sys.argv[1], "r")
except:
sys.exit("There was an error opening the file: {}".format(sys.argv[1]))
try:
out_file = open(sys.argv[3], "w")
except:
sys.exit("There was an error opening the file: {}".format(sys.argv[3]))
line = in_file.readline()
freq_dict = { }#letter : 0 for letter in LETTERS }
while len(line) != 0:
for letter in line.replace(" ",""):
if letter in freq_dict:
freq_dict[letter] += 1
else:
freq_dict[letter] = 1
line = in_file.readline()
cipher = decrypt(line, key)
out_file.write(cipher)
in_file.close()
out_file.close()
for letter in freq_dict:
print(letter, "times", freq_dict[letter])
ありがとう:最も一般的なシーザーテキスト文字は、これまでに= 9
コードのn-E Nである場合。
ベース(ゼロシフト)リファレンスには何を使用していますか?文字列、リスト、すべての文字の辞書? [string.ascii_letters](https://docs.python.org/3/library/string.html#string.ascii_letters)が便利かもしれません。そうすれば[str.find](https://docs.python)を使うことができます。 org/3/library/stdtypes.html#str.find)。 – wwii
こんにちは、お返事ありがとうございます。私は基本参照としてEを使用するつもりです。次に、最も頻繁に使用されるシーザー文字の手紙がいくつあるのかを考えてみたいと思います。もう一度ありがとう – helpme123
MITのedxコースからこの問題を解決していますか? –