首页 > 解决方案 > 编程新手。为什么我的 Python 代码在这种情况下除外?

问题描述

我是编程新手,暂时一直在使用 Codecademy 自学 Python。今天,我开始了我的第一个平台外项目,我的代码似乎可以完美运行,直到遇到一个情况。

所以这是项目:您正在与朋友交谈并发送编码消息。根据偏移量,通过将字母向下移动几个位置来对消息进行编码。例如,如果我们使用 3 的偏移量,“hello”将被编码为“ebiil”,同样“ebiil”将被解码为“hello”。在此示例中,“a”将回绕并编码为“x”。我编写了以下函数来解码消息:

message = "xuo jxuhu! jxyi yi qd unqcfbu ev q squiqh syfxuh. muhu oek qrbu je tusetu yj? y xefu ie! iudt cu q cuiiqwu rqsa myjx jxu iqcu evviuj!"
offset = 10

def decoder(message, offset):
    decoded_message = ""
    for char in message:
        if char in alphabet:
            
            #i = The decoded index of the character.
            #i2 = Index once wrapped back around.
            
            i = alphabet.find(char)+offset
            if i < len(alphabet):
                decoded_message += alphabet[i]
            else:
                i2 = offset-(26%alphabet.find(char))
                decoded_message += alphabet[i2]
        else:
            decoded_message += char
    return decoded_message

print(decoder(message,offset))

一切正常,直到我进入一个新步骤,需要我使用不同的偏移量解码消息。我用了decoder函数,改成offset14,用message = "bqdradyuzs ygxfubxq omqemd oubtqde fa oapq kagd yqeemsqe ue qhqz yadq eqogdq!"了,打印出来了performing multiple cmesmr ciphers to code your messmges is even more secure!。无论出于何种原因,在这种情况下,我的代码无法识别“m”应该更改为“a”,而且我一生都无法弄清楚原因。

谁能告诉我我做错了什么,或者我在这里没有看到什么。提前致谢!

标签: pythonpython-3.x

解决方案


线

i2 = offset-(26%alphabet.find(char))

以 26 为模计算字母在字母表中的位置。这没有意义。你通常会想要alphabet.find(char) % 26. 或者alphabet.find(char) % len(alphabet),如果您想更详细一些。

将其减去偏移量也很奇怪。你似乎在倒退。

我只需将里面的块替换为:

i = alphabet.find(char)+offset
if i < 0:
   i += len(alphabet)
i = i % len(alphabet)
decoded_message += alphabet[i]

然后您可以简单地更改编码或解码的符号。

另请注意,您的编码器功能的 else 分支(现在在历史中)与主要功能完全相同。

PS:我肯定见过i2 = alphabet.find(char)-10历史上没有的行,它变成了,可能被宽限期i2 = alphabet.find(char)-offset隐藏了


推荐阅读