Цезарь Шифр, Python 3, новый программист - PullRequest
0 голосов
/ 16 апреля 2020

первая публикация в Stackoverflow!

Я новый программист, так что терпите меня, пожалуйста, поскольку я еще не в курсе всех возможных функций, так что, возможно, я только сейчас мне не хватает информации о функции или методе, которые могут быстро решить мою проблему.

Я пытаюсь создать сценарий python 3, который может расшифровать зашифрованный текст с использованием шифра Цезаря. В настоящее время я сделал это так, чтобы мой код сравнивал зашифрованный текст со строкой алфавита, а затем сохранял 3 самых популярных буквы. По какой-то причине пунктуация здесь не была проблемой.

Когда дело дошло до дешифрования текста, программа не может преодолеть пунктуацию. Он расшифровывается, сдвигая алфавит так, что самая распространенная буква становится буквой «Е». Я не могу понять способ попросить python просто проигнорировать и напечатать пунктуацию. Я сделал строку, содержащую пунктуацию отдельно, но я не знаю, что делать дальше. Код прилагается ниже, в Python 3

Вся помощь приветствуется!

#string used for comparing code to
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

#strings for shifting the code
shift = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
punctuation = ".,!;:?"

#ask user for the encrypted text
code = input("Enter text: ")

#variables storing the most common letters and the # of times they come up
common1 = 0
common2 = 0
common3 = 0
ac = 0
bc = 0
cc = 0

for i in range(0, len(alphabet)):
    # print number of times each letter comes up --- print( str(alphabet[i]) + " is present " + str(code.count(alphabet[i])) + " number of times" )

    #finding the number of times the most common letter comes up
    if code.count(alphabet[i]) > common1:
        common3 = common2
        cc = bc
        common2 = common1
        bc = ac
        common1 = code.count(alphabet[i])
        ac = alphabet[i]

    elif code.count(alphabet[i]) > common2:
        common3 = common2
        cc = bc
        common2 = code.count(alphabet[i])
        bc = alphabet[i]

    elif code.count(alphabet[i]) > common3:
        common3 = code.count(alphabet[i])
        cc = alphabet[i]


print("Most common letter, " + str(ac) + ", comes up " + str(common1) + " times")
print("Second most common letter, " + str(bc) + ", comes up " + str(common2) + " times")
print("Third most common letter, " + str(cc) + ", comes up " + str(common3) + " times")


for i in range(0, len(code)):
    a = shift.index("E") + 26 - shift.index(ac)
    print(shift[a + shift.index( code[i] ) ], end = "")

1 Ответ

1 голос
/ 16 апреля 2020

Вы должны проверить, что значение кода в каждой позиции находится в вашем алфавите. Если нет, просто выведите значение из кода и переходите к следующему l oop.


for i in range(0, len(code)):
    if code[i] not in alphabet:
        print(code[i])
        continue
    a = shift.index("E") + 26 - shift.index(ac)
    print(shift[a + shift.index( code[i] ) ], end = "")
...