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())
Код немного корявый, но рабочий def make_text_caesar_shift(s: str) -> str:
return ' '.join(make_caesar_shift_by_len(w, len(w) - len([*filter(lambda x: x.lower() not in letters_set, w)])) for w in s.split())
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])
На вход программе подается строка текста на английском языке, в которой нужно зашифровать все слова. Каждое слово строки следует зашифровать с помощью шифра Цезаря (циклического сдвига на длину этого слова). Строчные буквы при этом остаются строчными, а прописные – прописными. Гарантируется, что между различными словами присутствует один пробел.
Формат входных данных
На вход программе подается строка текста на английском языке.
Формат выходных данных
Программа должна вывести зашифрованный текст в соответствии с условием задачи.
Примечание. Символы, не являющиеся английскими буквами, не изменяются.
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!