凯撒密码循环



我有一些代码也有其他问题,但我真的很挣扎与循环部分(从z回到a)。

我看了很多其他的答案,但没有一个对我的情况有帮助。

import string
upper = string.ascii_uppercase
lower = string.ascii_lowercase
digit = string.digits
letters = string.ascii_letters

delrv = input("Vill du kryptera, skriv K. Vill du dekryptera, skriv D")
inm = input("Skriv en text eller siffror")
nyckel = (input("Ange nycklar"))
lista = []
listad = []
splitNyckel = nyckel.split(" ")
splitNyckel = [int(a) for a in splitNyckel]
#kryptering
if(delrv == "K" or delrv == "k"):
for i in range(len(inm)):
#for a in range(len(splitNyckel)):
#rakning = ord(inm[i]) + 1
#if(rakning == 90):

#elif(rakning == 122):
if(ord(inm[i]) + splitNyckel[i] == 90):
lista[i] = 65
elif(ord(inm[i]) + splitNyckel[i] == 122):
lista[i] = 97
lista.append(ord(inm[i]) + splitNyckel[i])
print(chr(lista[i]))

#Dekryptering
if(delrv == "D" or delrv == "d"):
for i in range(len(inm)):
lista.append(ord(inm[i]) - splitNyckel[i])
print(chr(lista[i]))

有两种方法可以做到。

最基本的是,只要你超过你想要保持的范围,就减去26。或者在移动另一个方向并在a/a之前结束的情况下,您可以添加26代替。

另一种选择是使用mod运算符保持在一定范围内,例如(some_val - ord('a')) % 26 + ord('a')将使您保持在ord('a')ord('z')的范围内。这将比纯加法或减法有优势,因为它也适用于大于26的移位。

最新更新