gpt4 book ai didi

python - 当输出字符超出 'z' 时,凯撒密码失败

转载 作者:行者123 更新时间:2023-12-01 05:39:29 24 4
gpt4 key购买 nike

需要明确的是,我问这个问题是因为我已经尝试了大约 1.5 小时,但似乎没有得到任何结果。我没有参加编程类(class)或任何其他类(class),但今年夏天我有很多空闲时间,我用很多时间从这本书中学习Python。我想知道我将如何完成这个问题。

该问题要求您创建一个运行“凯撒密码”的程序,该程序将字符的 ascii 数字向下移动您选择的某个键。例如,如果我想写 sourpuss 并选择键 2,则程序会吐出全部向下移动 2 位的 ASCII 字符。所以 s 会变成 u,o 会变成 q(ascii 字母表中的 2 个字符......)。

我可以通过编写这个程序来获得该部分。

def main():
the_word=input("What word would you like to encode? ")
key=eval(input("What is the key? "))
message=""
newlist=str.split(the_word)
the_word1=str.join("",the_word)
for each_letter in the_word1:
addition=ord(each_letter)+key
message=message+chr(addition)
print(message)
main()

运行该程序,您将得到以下结果:

What word would you like to encode? sourpuss
What is the key? 2
uqwtrwuu

现在,下一个问题表明,如果您将 key 添加到 ascii 数字并导致数字高于 128,就会出现问题。它要求您创建一个程序来实现在该系统中,如果数字高于 128,字母表将重置,并且您将返回到 0 的 ascii 值。

我尝试做的是这样的:

if addition>128:
addition=addition-128

当我执行此操作后运行程序时,它不起作用,只是返回一个空格而不是正确的字符。有任何想法吗?

最佳答案

尝试使用模算术而不是条件:

((ord('z') + 0 - 97) % 26) + 97
=> 122 # chr(122) == 'z'

((ord('z') + 1 - 97) % 26) + 97
=> 97 # chr(97) == 'a'

((ord('z') + 2 - 97) % 26) + 97
=> 98 # chr(98) == 'b'

请注意这个表达式:

((ord(character) + i - 97) % 26) + 97

返回表示给定 character 的正确整数之后我们添加一个偏移量 i (,如您所说)。特别是,如果我们添加 0ord('z')然后我们得到 'z' 的代码。如果我们添加 1ord('z')然后我们得到a的代码, 等等。

这适用于 a-z 之间的小写字符,带有神奇数字 97a 的代码和26a 之间的字符数和z ;调整这些数字,您可以调整代码以支持更大范围的字符。

关于python - 当输出字符超出 'z' 时,凯撒密码失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com