密码凯撒 python

Code Caesar python

我正在尝试在 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)

几点:

  • 你实际上并没有问你的问题。有什么问题吗?
  • 你创造了 liste_lettre 但你从来没有用它做任何事情。
  • "restart"(英文通常称为"wrap")的方法是使用modulus。 Python(以及大多数编程语言)中的模数符号是 %

好的,请耐心等待,我只有第一部分(编码),但我认为您可以完成其余部分:

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') 之间,即 97ord('z')122。正如@Malvolio 建议使用模数,"restarting".

这是一个可以帮助您入门的移位密码函数。

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