高考 python 程序关于加密题的问题,能帮我解释下这个答案为啥是这个吗?

1.ZIP
2.1⃣️array[j]=array[j+1]
2⃣️news+=chr(a[i][j]+ord("A"))
3.a[x][y]=(t+k)%26

img

1、第一问可以按照题目步骤反着往回推(+k -> -k ; 左移 -> 右移):

  • 根据步骤5:密文是 QA#J,对应的矩阵为[[Q,A],[#,J]] -> [[16,0],[-1,9]]
  • 根据步骤4:由于加密是左移k位,所以解密就是右移k位。得到矩阵[[0,16],[9,-1]]
  • 根据步骤3:由于加密是+k,所以解密就是-k。得到矩阵[[25,15],[8,-1]]
  • 根据步骤2、1:按列读取,顺序为 25、8、15、-1,对应字母为 ZIP

2、第二问可以根据示例逻辑推理出答案:

  • 第一个空对应的函数,根据代码可以得出yw函数实现的是步骤4的功能(左移),左移的操作实质上就是将后面位置的数字放前面,而填空位置的是左移一位的操作,所以答案就是array[j]=array[j+1]
  • 第二个空根据代码可以判断出实现的是将数字转换成对应的字母,所以答案就是news+=chr(a[i][j]+ord("A"))

3、第三问根据代码可以看出是在实现步骤3:

  • 对于步骤3中的要求,+k后超过26的重新从0开始。所以答案需要对26取余,即a[x][y] = (t+k)%26

图片问题 可以看这张清楚的!

img


def yw(array,k):
    for i in range(k):
        temp = array[0]
        for j in range(0,len(array)-1):
            array[j] = array[j+1]
        array[-1] = temp
s = input("请输入明文:")
n = int(input("n="))
k = int(input("k="))
a = [[-1 for i in range(n)]for i in range(n)]
for i in range(len(s)):
    if "A" <= s[i] <= "Z":
        t = ord(s[i])-ord("A")
        x = i//n
        a[x][y] = t+k
news = ""
for i in range(n):
    yw(a[i],k)
    for j in range(n):
        if a[i][j] == -1:
            news += "#"
        else:
            news += chr(int(a[i][j]))
print(news)
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632