def endcode(msg,secret_d):
for ch in msg:
for key,value in secret_d:
if ch == key:
msg[ch] = value
return msg
encode('CAN YOU READ THIS',{'A':'4','E':'3','T':'7','I':'1','S':'5'})
这是我的代码。我在这里尝试做的是对于字符串msg
中的每个字符,如果字符ch
是字典中的键secret_d
,该函数应该在字典中搜索并用映射字符串替换它。 1}}。
如果ch
不是secret_d
中的密钥,则保持不变。
对于示例,最终结果应为'C4N YOU R34D 7H15'
答案 0 :(得分:0)
您的函数名称为endcode
,但您正在调用encode
。
但更重要的是,我会告诉你一些事情的进展。这不会完全奏效,但它会让你回到正轨。
def endcode(msg,secret_d):
newstr=""
for ch in msg:
for key,value in secret_d.iteritems():
if ch == key:
newstr=newstr+value
print(msg)
endcode('CAN YOU READ THIS',{'A':'4','E':'3','T':'7','I':'1','S':'5'})
但如果你想要一个完整的答案,here就是我的。
答案 1 :(得分:0)
一些问题:
msg[ch]
正在尝试在字符串中分配项目,但这是不可能的,字符串是不可变的。你必须建立一个新的字符串。你不能“更新”它。(key, value)
对字典d
,您必须遍历d.items()
。迭代d
将仅遍历键。话虽如此,这是我的建议如何写这个:
>>> def encode(msg, replacers):
... return ''.join([replacers.get(c, c) for c in msg])
...
>>> result = encode('CAN YOU READ THIS',{'A':'4','E':'3','T':'7','I':'1','S':'5'})
>>> result
'C4N YOU R34D 7H15'
注意事项:
dict.get
。如果在字典中找不到它,我告诉它只返回当前字符。str.join
的参数而不是生成器表达式,这里是excellent explanation。