【问题标题】:Python Message Cipher Indexation Error + WhiteSpace issuePython消息密码索引错误+空白问题
【发布时间】:2021-11-26 03:04:50
【问题描述】:

我正在做一个用 Python 编码消息的练习。下面的函数应该接受一条消息和一个数字,以将每个单词中的字母按字母表中的那个量移动,即如果移动 3 个间距,字母 a 将变为 d。

我有两个问题:

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

IndexError: 字符串索引超出范围

我会很高兴有一个修复程序将索引再次移回开始位置,并根据超过 26 个字符的剩余部分移动字母索引,即如果 char y 有 9 的移位,那么剩下的26 之后的 9 可以重新从 a 开始定位,使 y 成为字母 i。

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

任何人都可以帮助解决问题 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()

【问题讨论】:

    标签: python indexing


    【解决方案1】:

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

    您的第二个问题很难完全理解,但我认为您正在寻找的解决方法是检查 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"
    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)
    

    【讨论】:

    • 谢谢!它适用于我的文本编辑器。我是新手,所以会按照你的逻辑工作。
    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多