我有一些代码也有其他问题,但我真的很挣扎与循环部分(从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的移位。