问题在于:
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"
,结果也是一样的答案 0 :(得分:9)
您可以使用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
或您传入的第二个参数。
答案 1 :(得分:2)
您需要对输入字符串进行迭代,然后将键(char)的相应值附加到变量(以下示例中为f
)。
def morse(s):
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':"--.."}
f = ""
for i in s:
if not i == ' ':
f += morsecode[i]
else:
f += ' '
return f
答案 2 :(得分:1)
问题在于您首先在字典上进行迭代,因此您要将在字符串中找到的任何内容的转换添加到输出变量中,该变量的顺序不正确。
你可以尝试 -
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(s):
outputs = ''
for item in s:
outputs += morsecode.get(item,item)
return outputs
答案 3 :(得分:0)
试试这个
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 item in mystring:
if item in morsecode.keys():
output+=morsecode[item]
return output