【问题标题】:My code in Python is not replacing the string contents. Some of the letters seem to be missed我在 Python 中的代码没有替换字符串内容。有些字母似乎漏掉了
【发布时间】:2021-10-09 18:45:48
【问题描述】:

我的 Python 代码没有替换字符串内容。有些字母似乎遗漏了。输出是

['x', 'y', 'p', 's', 'v', 'r', 'p', 'u', 'n', 'p']

['c', 'b', 'k', 'h', 'e', 'i', 'k', 'f', 'm', 'k']

但似乎 .replace 应该把它放回原来的样子。

message = "cypherpunk"

new_message = []

for letter in message:
    x = letter.replace("z","a").replace("y","b").replace("x","c").replace("w","d").replace("v","e").replace("u","f").replace("t","g").replace("s","h").replace("r","i").replace("q","j").replace("p","k").replace("o","l").replace("n","m").replace("m","n").replace("l","o").replace("k","p").replace("j","q").replace("i","r").replace("h","s").replace("g","t").replace("f","u").replace("e","v").replace("d","w").replace("c","x").replace("b","y").replace("a","z").replace("#","!")
    new_message.append(x)
    print(x)

print(new_message)

decode = []

for letter in new_message:
    x = letter.replace("a","z").replace("b","y").replace("c","x").replace("d","w").replace("e","v").replace("f","u").replace("g","t").replace("h","s").replace("i","r").replace("j","q").replace("k","p").replace("l","o").replace("m","n").replace("n","m").replace("o","l").replace("p","k").replace("q","j").replace("r","i").replace("s","h").replace("t","g").replace("u","f").replace("v","e").replace("w","d").replace("x","c").replace("y","b").replace("z","a").replace("!","#")
    decode.append(x)

print(decode)

【问题讨论】:

  • 字典是一个更好的方法来一次性完成所有replace() 调用。
  • 您能说出您打算如何“加密”字符串吗?你有很多.replace()
  • .replace("n","m").replace("m","n")没有意义,不会有m

标签: python string replace


【解决方案1】:

问题是您正在对每个先前替换的结果进行另一次替换。举个简单的例子,如果你有:

message = "a"
x = message.replace("a", "z").replace("z", "a")
print(x)

这将打印a,因为它首先将a 转换为z,然后将z 转换为a。另一方面,

message = "a"
x = message.replace("z", "a").replace("a", "z")
print(x)

将打印z,因为第一个替换没有任何作用(z 中没有z),所以只有第二个替换有效。

由于您在编码期间以相反的字母顺序进行替换,因此任何被翻译为字母表中较早字母的字母都会被翻译回其自身。而在解码过程中,则相反。

不要多次调用替换,而是使用带有翻译的字典:

encode_dict = {"a": "z", "b": "y", ..., "#": "!"}
decode_dict = {"a": "z", "b": "y", ..., "!": "#"}

message = "cypherpunk"

new_message = []

for letter in message:
    x = encode_dict.get(letter, letter)
    new_message.append(x)

print(new_message)

decode = []

for letter in new_message:
    x = decode_dict.get(letter, letter)
    decode.append(x)

print(decode)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多