鱼lele 发表于 2022-7-27 19:15:49

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:08:48

本帖最后由 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>

asky533 发表于 2022-9-2 11:13:33

再运行一次试试
页: [1]
查看完整版本: python学习30讲的一个题目不太懂