Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Шаг 10 – Шифр Цезаря – Stepik

Аве, Цезарь 🌶️
На вход программе подается строка текста на английском языке, в которой нужно зашифровать все слова. Каждое слово строки следует зашифровать с помощью шифра Цезаря (циклического сдвига на длину этого слова). Строчные буквы при этом остаются строчными, а прописные – прописными. Гарантируется, что между различными словами присутствует один пробел.

Формат входных данных
На вход программе подается строка текста на английском языке.

Формат выходных данных
Программа должна вывести зашифрованный текст в соответствии с условием задачи.

Примечание. Символы, не являющиеся английскими буквами, не изменяются.

Sample Input 1:
Day, mice. "Year" is a mistake!

Sample Output 1:
Gdb, qmgi. "Ciev" ku b tpzahrl!

Sample Input 2:
my name is Python!

Sample Output 2:
oa reqi ku Veznut!

По дате
По рейтингу
Аватар пользователя
11мес

Работающий говнокод:

1234567891011121314151617181920212223
 lower = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 
upper = [lowlet.upper() for lowlet in lower] 
letters = lower + upper 
 
text = input() 
result = "" 
 
for word in text.split(): 
    word_len = 0 
    for char in word: 
        if char in letters: 
            word_len += 1 
 
    for char in word: 
        if char in lower: 
            result += lower[(lower.index(char) + word_len) % len(lower)] 
        elif char in upper: 
            result += upper[(upper.index(char) + word_len) % len(upper)] 
        else: 
            result += char 
    result += " " 
 
print(result[:-1]) 
Аватар пользователя
Знаток
11мес
123456789101112131415161718192021222324252627
 from string import ( 
    ascii_lowercase, 
    ascii_uppercase, 
    punctuation 
) 
 
letters_set = set(ascii_lowercase) 
letters_list_lower = ascii_lowercase 
letters_list_upper = ascii_uppercase 
punct_set = set(punctuation) 
 
 
def make_caesar_shift_by_len(s: str, size: int) -> str: 
    s = [*s] 
    for i in range(len(s)): 
        cur_char = s[i] 
        if cur_char.lower() in letters_set: 
            if cur_char.isupper(): 
                s[i] = letters_list_upper[(letters_list_upper.index(cur_char) + size) % 26] 
            else: 
                s[i] = letters_list_lower[(letters_list_lower.index(cur_char) + size) % 26] 
    return ''.join(s) 
 
 
def make_text_caesar_shift(s: str) -> str: 
    return ' '.join(make_caesar_shift_by_len(w, len(w) - len([*filter(lambda x: x in punct_set, w)])) for w in s.split()) 
 

Код немного корявый, но рабочий

Аватар пользователя
11мес

Привет! Как я могу помочь вам с этим кодом на Python?