python学习30讲的一个题目不太懂
题目:凯撒密码是一种通过位移加密的方法,对 26 个(大小写)字母进行位移加密,比如下方是正向位移 6 位的字母对比表:明文字母表如下
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
密文字母表如下版权属于:
GHIJKLMNOPQRSTUVWXYZABCDEFghijklmnopqrstuvwxyzabcdef
所以,如果给定加密的明文是:
I love FishC?
那么程序加密后输出的密文便是:
O rubk LoynI&H
text = input("请输入需要加密的密文(只支持英文字母):")
number = int(input("请输入移动的位数:"))
dz = 0 #当与位数相加时 >z
DZ = 0
secret = ""
if number > 0 :
for i in text:
if i != " ":
if ord(i) + number > ord('z'):
dz = ord('a') + ((ord(i) + number) - ord('z'))
secret = secret + chr(dz)
elif ord(i) + number > ord('z'):
DZ = ord('A') + ((ord(i) + number) - ord('Z'))
secret = secret + chr(DZ)
else:
secret = secret + chr(ord(i) + number)
else:
secret = secret + " "
else:
for i in text:
if i != " ":
if ord(i) + number < ord('a'):
dz = ord('z') - (ord('a') - (ord(i) + number) ) + 1
secret = secret + chr(dz)
elif ord(i) + number < ord('A'):
DZ = ord('Z') - (ord('A') - (ord(i) + number) ) + 1
secret = secret + chr(DZ)
else:
secret = secret + chr(ord(i) + number)
else:
secret = secret + " "
print(secret)
想请各位大佬帮忙看一下 为什么我这串代码输入:I love FishC 和 -6
得到的是:] fipy ZcmbW
而不是:C fipy ZcmbW 本帖最后由 jackz007 于 2022-7-27 20:21 编辑
text = input("请输入需要加密的密文(只支持英文字母):")
number = int(input("请输入移动的位数:")) % 26
secret = ""
for c in text:
if c >= 'A' and c < 'Z':
secret += chr(ord('A') + (ord(c) - ord('A') + number) % 26)
elif c >= 'a' and c < 'z':
secret += chr(ord('a') + (ord(c) - ord('a') + number) % 26)
else:
secret += c
print(secret)
运行实况:
D:\\Python>python x.py
请输入需要加密的密文(只支持英文字母):I love FishC
请输入移动的位数:-6
C fipy ZcmbW
D:\\Python> 再运行一次试试
页:
[1]