Просто обслуживая заглавные буквы и никаких других символов, вы можете заставить его работать, немного упростив его до:
def caesar(word, key1, key2):
c = ""
for x in word:
if x in "AEIOU":
c += chr((ord(x) + key1 - 65) % 26 + 65)
else:
c += chr((ord(x) + key2 - 65) % 26 + 65)
return c
У вас было два цикла, но это не нужно, как в вашем коде, zn
в любом случае это всего лишь один символ, поэтому не требуется второй l oop.
Я упростил проверку гласных, так как вы можете проверить, появляется ли символ в строке гораздо проще, чем используя несколько or
условий.
Это также гораздо чаще встречается в Python - l oop для итератора по значению, чем для циклического перемещения по индексу и последующего использования этого значения индекса для доступа к итератору.