Шифр Цезаря, английский алфавит
На вход программе подается строка текста на английском языке, в которой нужно зашифровать все слова. Каждое слово строки следует зашифровать с помощью шифра Цезаря (циклического сдвига на длину этого слова). Строчные буквы при этом остаются строчными, а прописные – прописными.
Формат входных данных На вход программе подается строка текста на английском языке.
Формат выходных данных Программа должна вывести зашифрованный текст в соответствии с условием задачи.
Примечание. Символы, не являющиеся английскими буквами, не изменяются. Ввод Day, mice. "Year" is a mistake! Вывод Gdb, qmgi. "Ciev" ku b tpzahrl! Мой код
def encrypt(text,s):
result = ""
for i in range(len(text)):
char = text[i]
if (char.isupper()):
result += chr((ord(char) + s-65) % 26 + 65)
else:
result += chr((ord(char) + s - 97) % 26 + 97)
return result
#check the above function
text = input().split()
s = 4
print (text)
print (str(s))
print(encrypt(text,s))
Ответы (1 шт):
Вы пытаетесь обрабатывать слово как символ. Также Вы учитываете спец. символы при подсчёте длины слова. И return в блоке else.
Пример:
def encrypt(text: str) -> str:
words = []
for word in text.split():
new_word = ''
word_len = len([c for c in word if c.isupper() or c.islower()])
for char in word:
if char.isupper():
new_word += chr((ord(char) + word_len - 65) % 26 + 65)
elif char.islower():
new_word += chr((ord(char) + word_len - 97) % 26 + 97)
else:
new_word += char
words.append(new_word)
return ' '.join(words)
text = 'Day, mice. "Year" is a mistake!'
print(encrypt(text))
stdout:
Gdb, qmgi. "Ciev" ku b tpzahrl!