Python Цезарь с двумя ключами - PullRequest
1 голос
/ 17 апреля 2020

Я хочу написать Цезарь с двумя ключами; один для гласных и другой для согласных.

У меня есть слова только с заглавными буквами. Я написал некоторый код, но я знаю, что это неправильно. Я хочу идти по этому пути. Может ли кто-нибудь помочь мне:

def ceasar(word, key1, key2): 
    c = "" 
    for i in range(len(word)): 
        zn = word[i]
        for x in zn:
                        if x=="A" or x=="E" or x=="I" or x=="O" or x=="U":
                                c += chr((ord(zn) + key1-65) % 26 + 65)                               
                else:
                                c += chr((ord(zn) + key2-65) % 26 + 65)


    return c

1 Ответ

1 голос
/ 17 апреля 2020

Просто обслуживая заглавные буквы и никаких других символов, вы можете заставить его работать, немного упростив его до:

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 для итератора по значению, чем для циклического перемещения по индексу и последующего использования этого значения индекса для доступа к итератору.

...