密码凯撒 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')
之间,即 97
和 ord('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
我正在尝试在 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')
之间,即 97
和 ord('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