问题是:
morsecode = {'a':".-", 'b':"-...", 'c':"-.-.", 'd':"-..", \
'e':".", 'f':"..-.", 'g':"--.", 'h':"....", 'i':"..", \
'j':".---", 'k':"-.-", 'l':".-..", 'm':"--", \
'n':"-.", 'o':"---", 'p':".--.", 'q':"--.-", \
'r':".-.", 's':"...", 't':"-", 'u':"..-", 'v':"...-", \
'w':".--", 'x':"-..-", 'y':"-.--", 'z':"--.."}
def morse(mystring):
output=""
for key, code in morsecode.items():
for item in mystring:
if key==item:
output+=code
return output
我想得到这样的东西:
>>> morse("a boy")
'.- -... --- -.--'
但我只能得到:
>>> morse("a boy")
'-.---.....- ---'
即使我输入“yob a”,结果也是一样的
请您参考如下方法:
您可以使用join 和生成器表达式
def morse(s):
return ''.join(morsecode.get(i, i) for i in s)
这将替换所有字母,但会保留空格字符。
详情
join接受一系列 str 并将它们连接成一个字符串。
语法(something for something in sequence)被称为“generator expression”。它是一个紧凑的 1 行,相当于一个 for 循环。您还应该研究“列表理解”,因为这是一种非常相似的技术,但它创建的是列表而不是生成器。
get从 dict 中查找键比 [] 更安全,因为如果该键不存在,它不会抛出异常。它要么返回 None,要么返回您传入的第二个参数。
