def apply_coder(text, coder):
"""
Applies the coder to the text. Returns the encoded text.
text: string
coder: dict with mappings of characters to shifted characters
returns: text after mapping coder chars to original text
"""
coder_dict = coder
text_list = list(text)
for letter in text_list:
if letter in coder_dict:
letter = coder_dict[letter]
print letter
return ''.join(text_list)
示例: 应用编码器(“你好,世界!”,build_encoder(3))应返回
'Khoor,czruog!'
相反,它又回来了
"Hello, world!"
但是,如果在if条件下使用print letter语句,它将打印正确的字母。你知道吗
语句
letter = coder_dict[letter]
只是在coder_dict
中查找letter
键,并将该值赋给letter
,这不会改变它。它打印出那封信。但是,您根本没有修改text_list
。有几种方法可以做到这一点,例如使用enumerate
:这将枚举
list
,然后用字母查找(如果可能)或字母本身重新分配每个索引元素,然后join()
分配list
和return
它。你知道吗通过改变
letter
,你是而不是改变列表中的任何东西text_list
。您应该构建一个新列表,而不是编码的结果:这也意味着您不必首先将
text
放入一个列表。你知道吗重新绑定当前迭代变量不会修改列表(希望-这会是一个非常烦人的副作用)。你知道吗
另外,将
coder
重新绑定到coder_dict
也没用,您可以对字符串进行迭代。长话短说,解决办法是用修改过的字母重建一个列表。。。既然你不需要列表本身,你也可以使用一个生成器表达式:相关问题 更多 >
编程相关推荐