程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

我该如何修复这个凯撒密码?

发布于2024-11-30 15:44     阅读(1003)     评论(0)     点赞(7)     收藏(4)


我对 Python 一窍不通,在解决这个问题时遇到了麻烦。

此代码片段应使用字母移位对一段文本进行编码。这有意义吗?

用移位“2”对单词“no”进行编码应为 = “pq”yes。代码到这里为止都有效,但反向。

用移位“2”解码单词“pq”应该=“no”但是不...结果是“ns”?!

代码:

alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

direction = input("Type 'encode' to encrypt, type 'decode' to decrypt:\n").lower()
text = input("Type your message:\n").lower()
shift = int(input("Type the shift number:\n"))

def caesar(original_text, shift_amount, encode_or_decode):
    output_text = ""
    for letter in original_text:

        if encode_or_decode == "decode":
            shift_amount *= -1

        shifted_position = alphabet.index(letter) + shift_amount
        shifted_position %= len(alphabet)
        output_text += alphabet[shifted_position]
    print(f"Here is the {encode_or_decode}d result: {output_text}")

caesar(original_text=text, shift_amount=shift, encode_or_decode=direction)

解决方案


问题出在以下几行:

if encode_or_decode == "decode":
    shift_amount *= -1

上述代码位于 for 循环的“内部”。因此,对于它正在处理的每个字母,在“解码”时,它会将移位量乘以 -1。因此,例如,假设移位量为 2,则第一个字母为 -2,但下一个字母为 -1 * -2,即 +2,下一个字母为 -1 * 2,即 -2,同样如此。因此,-2、+2、-2、+2,... 这是不正确的。

修复此问题最简单的方法是将这两行代码移到 for 循环之外。如下所示:

alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

direction = input("Type 'encode' to encrypt, type 'decode' to decrypt:\n").lower()
text = input("Type your message:\n").lower()
shift = int(input("Type the shift number:\n"))

def caesar(original_text, shift_amount, encode_or_decode):
    if encode_or_decode == "decode":
        shift_amount *= -1

    output_text = ""
    for letter in original_text:
        shifted_position = alphabet.index(letter) + shift_amount
        shifted_position %= len(alphabet)
        output_text += alphabet[shifted_position]
    print(f"Here is the {encode_or_decode}d result: {output_text}")

caesar(original_text=text, shift_amount=shift, encode_or_decode=direction)


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/2046227/be7fcf739812e0ad4ca4/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

7 0
收藏该文
已收藏

评论内容:(最多支持255个字符)