我正在尝试实现凯撒的密码,它用给定的密钥偏移任何字母(例如,如果密钥是2,那么“a”变成“c”)
这是我的密码:
key = 2
code = "abc def hi"
code_splitted = code.split()
for word in code_splitted:
for char in word:
char = chr(ord(char) + key)
print (" ".join(code_splitted))
但是,输入的是相同的代码“abc def hi”。有什么问题吗
Tags:
您不能修改项目,您正在修改副本/尝试更改不可变对象
也就是说,最好的方法是使用2个嵌套的生成器理解结构:
结果:
请注意,没有创建临时列表,因此它的性能更好,而且更具pythonic(不涉及索引)
python中的foreach循环提供了在提供的iterable中找到的项的副本。这意味着,当您更改“char”时,实际上并没有更改字符串中的数据。以下可能是您想要的:
这样做时,所有更改都直接对原始数组进行,而不是在python中创建副本
编辑:忘记字符串是不变的,固定的代码
如果您运行这个并选中
char
,您将看到您正在更新那个对象,但不是您最初引用的对象。您可以创建一个临时空白字符串并将新的键串起来,然后将其添加到列表中下面的代码大部分用于维护您的代码:
相关问题 更多 >
编程相关推荐