代码凯撒蟒蛇

时间:2018-01-29 21:57:27

标签: python caesar-cipher

我正在尝试在Python中创建一个简单的Caesar Cipher函数,它根据用户的输入移动字母,并在最后创建一个最终的新字符串。问题是最终的密文只显示最后一个移位的字符,而不是一个包含所有移位字符的整个字符串,当字母z例如程序没有在字母表的开头重新开始时 PS我受法国人教育,所以有些线路可能是法语 这是我的代码:

list=list()
r=0
choix=int(input("Veuillez entrer 1 pour coder ou 2 pour decoder"))
if choix==1 :
    cle=int(input("Quelle est votre clé?"))
    phrase=input("Quelle est votre phrase? ")
    for i in phrase :
        r=ord(i)
        r=(r+cle)%26
        lettre=chr(r)
        list.append(lettre)
    print(list)
elif choix==2 :
    cle=int(input("Quelle est votre clé?"))
    phrase=input("Quelle est votre phrase? ")
    for i in phrase :
       r=ord(i)
       r=(r-cle)%26
       lettre=chr(r)
       list.append(lettre)
    print(list)

3 个答案:

答案 0 :(得分:1)

好的我在这里承担,我只有第一部分(编码),但我认为这足以让你能够做其余的事情:

code=list()
choix=int(input("Veuillez entrer 1 pour coder ou 2 pour decoder"))
if choix==1 :
    cle=int(input("Quelle est votre clé?"))
    phrase=input("Quelle est votre phrase? ")
    for el in phrase:
        if el.islower():
            r = ((ord(el) - ord('a')) + cle) % 26 + ord('a')
            code.append(chr(r))
        elif el.isupper():
            r = ((ord(el) - ord('A')) + cle) % 26 + ord('A')
            code.append(chr(r))
        else:
            code.append(el)

    print(code)

这里有一个棘手的部分:((ord(el) - ord('a')) + cle) % 26 + ord('a'),因为你想循环使用较小的大小写字母,你必须在ord('a') 97和{{1}之间约束你的计算。这是ord('z')。由于@Malvolio建议使用模数,所以"重新启动"。

答案 1 :(得分:1)

这是一个可能让你开始的移位密码功能。

def shift_cipher(phrase, shift):
    '''Ceaser Ciphers/Unciphers a string'''
    alphabet = list(string.ascii_lowercase)

    phrase = str(phrase)
    phrase = phrase.lower()
    new_phrase = ''
    for letter in phrase:
        shift_letter_index = alphabet.index(letter) + shift
        new_phrase += alphabet[shift_letter_index % 26]

    return new_phrase

答案 2 :(得分:0)

有些观点:

  • 你实际上没有问过你的问题。有什么问题?
  • 你制作liste_lettre,但你从不做任何事情。
  • “重启”的方式(通常在英语中称为“换行”)是使用modulus。 Python(和大多数编程语言)中的模数符号是%