循环通过字符模式并打印出相应的文本

时间:2017-04-05 22:25:42

标签: python

您正在处理一种莫尔斯码问题,用户会以这样的格式输入字符串

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

寻找一个解决方案,用连字符分隔这些点和破折号 - 只是有点难过。思考可能会分裂 - 基于单词 - 但只是不确定如何实现这一点。任何帮助都非常感激。

4 个答案:

答案 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 = []