璐璐_luna 2023-07-09 22:06 采纳率: 100%
浏览 19
已结题

下面这段压缩和解压的代码为什么无法正确解压换行符

压缩

def crt(a, n):
    s, p = 0, 1
    for x in n:
        p *= x
    for x, y in zip(a, n):
        q = p // y
        s += q * x * pow(q, -1, y)
    return s % p

def compress3to1(code):
    compressed=""
    for i in range(0, len(code), 3):
        a = [ord(c) - 32 for c in code[i:i+3]]
        compressed += chr(crt(a, [101, 102, 103]))
    print(compressed)

compress3to1(for i in range(69):\n print(i))

运行后得到一段乱码运行后得到一段乱码,输入到下面三个点的位置就可以运行code中的代码,但每次换行符都无法正确解压,被替换成了字符p

解压


exec(bytes(ord(c)%i+32 for c in '...' for i in b'efg'))
  • 写回答

2条回答 默认 最新

  • threenewbee 2023-07-10 04:05
    关注

    这段代码的原理是将3个字符的 ascii - 32
    然后分别对101 102 103取模,再合成成一个数字(用了CRT,中国同余定理)
    很显然,用这个代码必须保证原字符串的ascii在32-132之间
    很明显,这个范围不包括那些ascii低于32的字符,比如换行回车。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月18日
  • 已采纳回答 7月10日
  • 修改了问题 7月9日
  • 创建了问题 7月9日