Python 消息密码索引错误 + 空白问题

Python Message Cipher Indexation Error + WhiteSpace issue

我正在做一个练习,在 Python 中对消息进行编码。下面的函数应该接受一条消息和一个数字来将每个单词中的字母移动字母表中的那个数量,即字母 a 如果移动 3 spaced 将变成 d.

我有两个问题:

  1. 字母表的长度只有 26 个字符。如果你将一个字母移得太右,即超过 Z 的第 26 个位置,你会得到以下错误:

IndexError: 字符串索引超出范围

我很乐意将索引再次移回开头并根据超过 26 个字符的剩余部分移动字母索引,即如果 char y 移动 9,则26 之后剩下的 9 可以再次从 a 开始定位,使 y 成为字母 i.

  1. 如果我输入带有 space 的消息,即“我需要帮助”,返回的字符不会保留每个单词之间的原始白色 space。

任何人都可以帮助解决问题 1 或 2 吗?

def message_to_code():
normal_message = input(str("Please enter a message you would like coded: "))
Cipher_shift = int(input("Please enter the whole number you would like to act as the key to hide your message "))
Alphabet = "abcdefghijklmnopqrstuvwxyz"
Cipher_message = ' '
for letter in normal_message:
    Encrypted_letter = Alphabet.find(letter) + Cipher_shift
    Cipher_message = Cipher_message + Alphabet[Encrypted_letter] 
return print(Cipher_message)

message_to_code()

您的第一个问题可以通过检查 Alphabet.find(letter) + Cipher_shift >= len(Alphabet) 轻松解决。如果是,那么 Encrypted_letter = Encrypted_letter - len(Alphabet).

你的第二个问题很难完全理解,但我认为你正在寻找的修复方法是检查 letter 是否是 space。如果是,则循环到下一个字符,如果不是,则对该字符执行逻辑。

错误修复如下所示:

def message_to_code():
normal_message = input(str("Please enter a message you would like coded: "))
Cipher_shift = int(input("Please enter the whole number you would like to act as the key to hide your message "))
Alphabet = "abcdefghijklmnopqrstuvwxyz"
Cipher_message = ' '
for letter in normal_message:
    if letter != ' ':
        Encrypted_letter = Alphabet.find(letter) + Cipher_shift

        if Encrypted_letter >= len(Alphabet):
            Encrypted_letter -= len(Alphabet)

        Cipher_message = Cipher_message + Alphabet[Encrypted_letter]
    else:
        Cipher_message += ' '

我还解决了其他一些问题。例如,如果你有一个大写字母,你的原始代码就不会捕捉到它,因为 Alphabet 只填充了小写字母。为了解决这个问题,我添加了第二个专用于大写字母的数组,并检查 letter 是否为大写字母。

第二个修复是检查 letter 是否是字母表的一部分。如果不是,则意味着 letter 是:'/'、'.'、','、':'、';' 等。如果它恰好是这些字符之一,它只是将其原始自身添加到加密字符串中。

修改后的代码如下所示:

def message_to_code():
normal_message = input(str("Please enter a message you would like coded: "))
Cipher_shift = int(input("Please enter the whole number you would like to act as the key to hide your message "))
Alphabet = "abcdefghijklmnopqrstuvwxyz"
AlphabetCaps = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Cipher_message = ""

is_letter = True
for letter in normal_message:
    if letter != ' ':
        if Alphabet.find(letter) != -1:
            Encrypted_letter = Alphabet.find(letter) + Cipher_shift
            is_letter = True
        elif AlphabetCaps.find(letter) != -1:
            Encrypted_letter = AlphabetCaps.find(letter) + Cipher_shift
            is_letter = True
        else:
            is_letter = False
        
        if is_letter:
            if Encrypted_letter >= len(Alphabet):
                Encrypted_letter -= len(Alphabet)

            if Alphabet.find(letter) != -1:
                Cipher_message += Alphabet[Encrypted_letter]
            else:
                Cipher_message += AlphabetCaps[Encrypted_letter]
        else:
            Cipher_message += letter
    else:
        Cipher_message += ' '

return print(Cipher_message)