Python: Как учесть пробелы в шифре Цезаря? - PullRequest
0 голосов
/ 09 марта 2020
code = "xuo jxuhu! jxyi yi qd unqcfbu ev q squiqh syfxuh. muhu oek qrbu je tusetu yj? y xefu ie! iudt cu q cuiiqwu rqsa myjx jxu iqcu evviuj!"
alphabet = "abcdefghijklmnopqrstuvwxyz"
punctuations = '''!()-[]{};:'"\,<>./?@#$%^&*_~'''

no_punct = ""
for char in code:
    if char not in punctuations:
        no_punct = no_punct + char

print(no_punct)

code_cracked = ""

for i in no_punct:
    found = alphabet[alphabet.find(i)]
    new = (alphabet.find(found)+10) % 26
    new_alpha = alphabet[new]
    new_code = i.replace(i, new_alpha)
    code_cracked += new_code

print(code_cracked)

output: heyjtherejthisjisjanjexamplejofjajcaesarjcipherjwerejyoujablejtojdecodejitjijhopejsojsendjmejajmessagejbackjwithjthejsamejoffset

Привет всем, новичок ie до Python здесь. Я пытаюсь решить проблему с шифром Цезаря в Python. Цель состоит в том, чтобы использовать «алфавит» + 10 для определения «кода». Например: первая буква в коде - это «x», индексная позиция x равна 23, проблема требует, чтобы вы добавили 10 к номеру индекса, и как только вы достигнете «z», вы go вернетесь к «a», чтобы возобновить подсчет. Итак, «x», позиция 23 = «h», позиция 7.

До сих пор мне удавалось решать вплоть до замены алфавитов. Мне пришлось погуглить часть% 26, так как я не мог этого понять.

Мне почти удалось понять часть шифра. Я просто не знаю, как обращаться с пробелами в предложении. Я пытался добавить операторы if / elif, но безрезультатно, поэтому я удалил операторы if.

Заранее благодарю за помощь.

Ответы [ 2 ]

1 голос
/ 09 марта 2020
  1. Вы не можете использовать некоторые специальные символы в строке, не используя "\". как вы можете видеть в отредактированном коде
  2. , вы можете использовать оператор if, чтобы проверить, является ли символ пробелом или нет, и откорректировать символ, который добавляется к расшифрованному коду
code = "xuo jxuhu! jxyi yi qd unqcfbu ev q squiqh syfxuh. muhu oek qrbu je tusetu yj? y xefu ie! iudt cu q cuiiqwu rqsa myjx jxu iqcu evviuj!"
alphabet = "abcdefghijklmnopqrstuvwxyz"
punctuations = '''
!()-[]{};:\'\"\\,<>./?@#$%^&*_~
'''

no_punct = ""
for char in code:
    if char not in punctuations:
        no_punct = no_punct + char

print(no_punct)

code_cracked = ""

for i in no_punct:
    if i != ' ':
        found = alphabet[alphabet.find(i)]
        new = (alphabet.find(found)+10) % 26
        new_alpha = alphabet[new]
        new_code = i.replace(i, new_alpha)
        code_cracked += new_code
    else:
        code_cracked += i

print(code_cracked)

0 голосов
/ 09 марта 2020

Используйте .index () вместо .find () и используйте оператор try / исключением. .Find () возвращает -1, если значение не найдено, но .index () вызывает ValueError, так что вы должны сделать это обернуть его в метод try / исключением и поймать исключение ValueError.

foo = 'hello'

print(foo.find('1')) #-1

print(foo.index('1')) #ValueError

try:
    print(foo.index('1'))
except ValueError:
    print(' ') 
...