首页 > 解决方案 > 如果for循环中的数字小于97,则加26

问题描述

我正在尝试制作凯撒密码。我目前有当前代码:

import string

def code_to_encrypt():
    print("This program will encode your messages using a Caesar Cipher")
    print("")

    key = -3
    message = input("Enter the message: ")
    
    for letter in message:
        if ord(letter) > 96:
            print(chr(ord(letter) + key))
    
code_to_encrypt()

我怎样才能使字母随键的数量而变化?例如,如果数字为 96,则应更改为 122。

标签: python

解决方案


我会使用一个单独的函数来执行移位

def shift(letter, num):
    return chr(((ord(letter.upper()) - 65 + num) % 26) + 65)

例如letter = shift('a', 3)

您还需要转换正 3 而不是负 3(使用负数进行解密)

def caesar_encrypt(text):
    result = ''
    for letter in text:
        result += shift(letter, 3)
    return result

def caesar_decrypt(text):
    result = ''
    for letter in text:
        result += shift(letter, -3)
    return result

输出

caesar_encrypt("plaintext")
'SODLQWHAW'
caesar_decrypt("SODLQWHAW")
'PLAINTEXT'

推荐阅读