我正在尝试在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)
答案 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
,但你从不做任何事情。%
。