改变元音“ aeiou”的凯撒密码函数

问题描述 投票:0回答:2

因此,我试图编写一个在元音“ aeiou”和“ AEIOU”的参考字符串内移动的函数。这是我到目前为止的内容:

vowels = "aeiouAEIOU"

    def encrypt(message, shift):
      output = ''
      for char in message:
        index = vowels.find(char)
        if index < 0: 
          output += ' '

        else:
          new_index = (index + shift) % len(vowels)
          new_character = vowels[new_index]
          output += new_character
      return output

例如,如果我输入encrypt(“ a”,2),输出应该是“ i”,encrypt(“ A”,2)->“ I”,但是,如果我输入crypto(“ a”,6),我希望输出为“ e”而不是“ E”。另外,当我输入不同于元音的数字(例如数字或“ k”)时,该函数应返回“ k”或数字。最后一件事是,如果我想使用编写的函数在句子字符串中查找所有元音并将其移位?

python python-3.x shift caesar-cipher
2个回答
0
投票

您可以简单地使用字符串的maketranstranslate方法创建转换表,然后转换字符串。

def ceaser_shift_vowels(sentance: str, offset: int):
    clear = "aeiouAEIOU"
    cipher = clear[offset:] + clear[:offset]
    translator = sentance.maketrans(clear, cipher)
    return sentance.translate(translator)

sentance = "The quick brown fox jumps over the lazy dog"
for i in range(10):
    print(ceaser_shift_vowels(sentance, i))

输出

The quick brown fox jumps over the lazy dog
Thi qAock bruwn fux jAmps uvir thi lezy dug
Tho qEuck brAwn fAx jEmps Avor tho lizy dAg
Thu qIAck brEwn fEx jImps Evur thu lozy dEg
ThA qOEck brIwn fIx jOmps IvAr thA luzy dIg
ThE qUIck brOwn fOx jUmps OvEr thE lAzy dOg
ThI qaOck brUwn fUx jamps UvIr thI lEzy dUg
ThO qeUck brawn fax jemps avOr thO lIzy dag
ThU qiack brewn fex jimps evUr thU lOzy deg
Tha qoeck briwn fix jomps ivar tha lUzy dig

这还有一个bennefit,可以解密字符串,只需要将偏移量传递为负数即可

sentance = "The quick brown fox jumps over the lazy dog"
offset = 6
crypt_string = ceaser_shift_vowels(sentance, offset)
print(crypt_string)
decrypt_string = ceaser_shift_vowels(crypt_string, -offset)
print(decrypt_string)

输出

ThI qaOck brUwn fUx jamps UvIr thI lEzy dUg
The quick brown fox jumps over the lazy dog

0
投票

我相信,这将满足您的要求。

vowels = "aeiouAEIOU"


def encrypt(message, shift):
    output = ''
    for char in message:
        index = vowels.find(char)
        if index < 0:
            output += char

        else:
            shift %= 5

            if index >= 5:
                new_index = (index + shift) % 5 + 5
            else:
                new_index = (index + shift) % 5
# Or, alternatively to the above 4 lines:
#           new_index = (index + shift) % 5 + 5 * int(index >= 5)
            new_character = vowels[new_index]
            output += new_character
    return output
encrypt('the quick brown fox jumped over the lazy dogs', 1)
Out[3]: 'thi qaock bruwn fux jampid uvir thi lezy dugs'
encrypt('the quick brown fox jumped over the lazy dogs'.upper(), 1)
Out[4]: 'THI QAOCK BRUWN FUX JAMPID UVIR THI LEZY DUGS'
encrypt('the quick brown fox jumped over the lazy dogs'.upper(), 13)
Out[5]: 'THU QIACK BREWN FEX JIMPUD EVUR THU LOZY DEGS'

您可以使用int(True)为1且int(False)为0的质量,通过将大写检查插入到加法中来简化if语句的第4行

new_index = (index + shift) % 5 + 5 * int(index >= 5)
© www.soinside.com 2019 - 2024. All rights reserved.