凯撒密码环

2024-09-28 20:46:25 发布

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

我想知道这段代码的一个合适的循环,在它到达Z之后把它带回a,我对python非常陌生,这会帮我很多忙,谢谢。在

reset = "yes"

def encrypt():
    answer = ""
    for letter in message:
        new=ord(letter)+ offset
        answer=answer+chr(new)
    print(answer)



def decrypt():
    answer = ""
    for letter in message:
        new=ord(letter)- offset
        answer=answer+chr(new)
    print(answer)

while reset == "yes":   
    message= input("Type in a message.")
    offset= int(input("How many do you want offset the letters by?"))
    reset = "yes"
    while offset > 26:
            offset= int(input("How many do you want offset the letters by?(0-26)"))

    eord=input("Type E for encrypt, or D for decrypt")
    if eord == "e":
        encrypt()
    elif eord == "d":
        decrypt()
    else:
        eord=input("Type E for encrypt, or D for decrypt")

    reset= input("do you want to do another?")

Tags: answerinmessagenewforinputtypedo
1条回答
网友
1楼 · 发布于 2024-09-28 20:46:25

正如我在评论中提到的,你要求的是“E”或“D”,但要检查的是“E”或“D”。在你的最后一行,你应该告诉他们输入“是”(而不是“是”或“是”)。还需要将消息和偏移量变量传递给encypt和decrypt函数。在

您提到它应该从Z循环回A(而不是在移位中使用非字母字符)。为此,您需要使用if语句测试ord值,如this example

for letter in message:

    # ..removed some code..

    # This part in particular is what you want (for both A and a)
    elif ord(letter) == 122:   # 'z' has ord value of 122
        new = 'a'
        # and so on ...

这是您的代码的编辑版本。它所需要的只是上述在encryptdecrypt函数定义中提到的ord检查:

^{pr2}$

相关问题 更多 >