您正在处理一种莫尔斯码问题,用户会以这样的格式输入字符串
pattern = ['.', '.', '_', '.', '_', '.']
并且代码会打印出每个生成的单词,如下所示:
"dot-dot-dash-dot-dash-dot"
我试过这个:
def ss(pattern):
dotdash = ""
for s in pattern:
if s == ".":
dotdash+=("dot")
elif s == "_":
dotdash+=("dash")
x = "-".join(dotdash)
print(x)
ss(['.', '.', '_', '.', '_', '.'])
但这只是给我这样的输出:
d-o-t-d-o-t-d-a-s-h-d-o-t-d-a-s-h-d-o-t
寻找一个解决方案,用连字符分隔这些点和破折号 - 只是有点难过。思考可能会分裂 - 基于单词 - 但只是不确定如何实现这一点。任何帮助都非常感激。
答案 0 :(得分:2)
您传递给join()
函数的是一个字符串,因此它将遍历字符串中的每个字母,这就是您获得此输出的原因。你真正想要做的是使用一个列表,以便join()
遍历列表中的每个单词:
...
dotdash = []
for s in pattern:
if s == ".":
dotdash.append("dot")
elif s == "_":
dotdash.append("dash")
x = "-".join(dotdash)
...
答案 1 :(得分:2)
您可以先使用join
添加连字符,它会为您提供一个字符串,然后应用两个替换来获取最终字符串:
def ss(pattern):
return '-'.join(pattern).replace('.', 'dot').replace('_', 'dash')
print(ss(['.', '.', '_', '.', '_', '.'])) // dot-dot-dash-dot-dash-dot
答案 2 :(得分:0)
好吧,我会继续回答我自己的回答 - woops。这里简单的解决方案 - 我只是将dotdash更改为列表,并解决了我所有的问题。
答案 3 :(得分:0)
使用尾随逗号将(" dot")更改为(" dot",),并为(" dash")执行相同操作。 尾随逗号强制它成为列表类型。
编辑:此外,将dotdash更改为初始化,如dotdash = []