用更简洁的方法来完成这个程序中的其他部分?

2024-06-13 00:30:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为类编写一个Caesar密码程序,我知道这不是最整洁的方法,但它确实有效,我的问题是,对于中间的if/else位,有没有比在else部分使用newcode=newcode更好的方法?看起来很笨重,但我是一个完全的新手,这是我第一次想到的

plaintext = input("Input your message here: ")
shift = input("Input cyclic shift here: ")
message = ""

try:
    shiftn = int(shift)
except ValueError:
    print("Cyclic shift must be a number")
else:
    for i in plaintext:
        code = ord(i)
        if (32<=code<=47) or (58<=code<=64):
            newl = chr(code)
            message = message + newl
        elif (65<=code<=90):
            newcode = code + shiftn
            if newcode > 90:
                newcode = 64 + (newcode - 90)
            else:
                newcode=newcode
            newl = chr(newcode)
            message = message + newl
        elif (97<=code<=122):
            newcode = code + shiftn
            if newcode > 122:
                newcode = 96 + (newcode - 122)
            else:
                newcode = newcode
            newl = chr(newcode)
            message = message + newl
        elif (48<=code<=57):
            newcode = code + shiftn
            if newcode > 57:
                newcode = 47 + (newcode - 57)
            else:
                newcode = newcode
            newl = chr(newcode)
            message = message + newl
    print("your encrypted message is: ", message)

Tags: 方法messageinputyourifshiftcodeelse
1条回答
网友
1楼 · 发布于 2024-06-13 00:30:41

由于所有不同范围的代码都是相同的,所以您可以将它们放在一个列表中,并在列表上循环,在第一次匹配后中断。而且,elsechr(ord(i))一样是冗余的。你知道吗

for i in plaintext:
    code = ord(i)
    if (32 <= code <= 47) or (58 <= code <= 64):
        message += i
    else:
        for low, high in [(64, 90), (96, 122), (47, 57)]:
            if low < code <= high:
                newcode = code + shiftn
                if newcode > high:
                    newcode = low + (newcode - high)
                message += chr(newcode)
                break

另外,您在这里重新创建了模%,还可以这样计算newcode(但不确定这是否更简单):

                newcode = (code + shiftn - low) % (high - low) + low

相关问题 更多 >