我是一个绝对的初学者,所以请原谅我在编码方面的愚蠢。忽略法国人
min='abcdefghijklmnopqrstuvwxyz'
maj='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
def CoderCesar(txt,clef):
crypt='' #string pour message crypté
txt='' #string
for c in txt: #pour chaque caractere
index=min.find(c) #regarder s'il appartient a l'alphabet en minuscule
if index==False: #si ce n'est pas le cas
index=maj.find(c) #vérifier s'il appartient alors a l'alphabet majuscule
if index==False: #si le caractere n'est pas dans l'alphabet,
crypt+=c #le laisser et l'incrémenter tel quel dans le message crypté
else: #si c'est une lettre majuscule
cryptindex=index+clef #le nouvel indice est égal a l'indice de la lettre + plus la clé
cryptindex%=len(maj) #revenir au début de la liste si l'indice dépasse la lettre 'z'
crypt+=maj[cryptindex] # ajouter le caractere au message crypté
else: #si c'est bien une lettre minuscule, faire exactement le meme proces qu'avant, en remplacant la liste majuscule par minuscule
cryptindex=index+clef
cryptindex%=len(min)
crypt+=min[cryptindex]
print("original:",txt)
print("message crypt:",crypt)
CoderCesar(txt='Super! je sais coder ce message',clef=19)
发布于 2021-02-18 18:16:26
您在函数开始时将txt重新初始化为一个空字符串,因此您传入的字符串("Super ! ...")将被覆盖。
删除
txt = ""线路。
编辑:这是你的代码的一个简化版本,可以做到这一点。
min = "abcdefghijklmnopqrstuvwxyz"
maj = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def caesar_cipher(txt, key):
crypt = ""
for c in txt: # for each character in source...
for charlist in (min, maj): # for each character list...
index = charlist.find(c)
if index == -1:
continue # Character c not found in this list
crypt_index = (index + key) % len(charlist)
crypt += charlist[crypt_index]
break # did encrypt character, break from loop and don't run below else
else: # Did not break from the loop, not a regular character
crypt += c
return crypt
message = "Super! je sais coder ce message"
clef = 25
crypt = caesar_cipher(txt=message, key=clef)
print(message)
print(crypt)
decrypt = caesar_cipher(txt=crypt, key=-clef)
print(decrypt)https://stackoverflow.com/questions/66257817
复制相似问题