python - 编程新手。为什么我的 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
函数,改成offset
14,用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”,而且我一生都无法弄清楚原因。
谁能告诉我我做错了什么,或者我在这里没有看到什么。提前致谢!
解决方案
线
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
隐藏了
推荐阅读
- email - 如何获取电子邮件表单提交脚本以从工作表中排除空白响应值?
- mysql - MySQL - 修剪大量孤立行的最高效方法
- ios - 如何降低 ViewController 的高度
- javascript - 使用传单地图上的按钮更改标记文本
- unity3d - Unity Oculus - 当玩家没有站在原点时,角色上的旋转空父级会在一个奇怪的轴上旋转
- javascript - 用jquery查找div类号的问题
- javascript - if/else 和 setInterval
- c# - 在我的 MVC 应用程序中,为什么添加此代码后性能如此缓慢?
- r - Quanteda vs caret 中的朴素贝叶斯:截然不同的结果
- javascript - 节点 | 要求未定义