如何用信息代替星星的图案?

2024-10-04 05:23:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图通过按照以下模式重复邮件中的项目来格式化邮件:

message = '123'
pattern = '** *** **** * **'

预期输出:12 312 3123 1 23

下面是我当前的代码,但是输出:123 12 31 231 23

def main():

    message = "123"
    
    pattern = "** *** ** ** *"
    print(patterned_message(message, pattern))

def patterned_message(message, pattern):
    
    c = 0
    res = ""
    jstr = [x.strip(" ") for x in message]
    for i in pattern:
        if c == (len(jstr)):
            c = 0
        else:
            if i == " ":
                res += " "
            else:
                res += i.replace("*","{}".format(jstr[c]))
                c += 1
          
    return res        

   

if __name__ == '__main__':
    main()

Tags: 项目inmessageforifmaindef模式
1条回答
网友
1楼 · 发布于 2024-10-04 05:23:47

您可以使用itertools.cycle作为生成器和小列表:

from itertools import cycle

message = '123'
pattern = '** *** **** * **'

x = cycle(message)

out = ''.join(next(x) if i == '*' else ' ' for i in pattern)

print(out)

输出:'12 312 3123 1 23'

对于python学习者,这里有一种更经典的方法:

def patterned_message(message, pattern):
    out = [' ']*len(pattern)
    n = 0
    for i, char in enumerate(pattern):
        if char == '*':
            out[i] = message[n%len(message)]
            n+=1
    return ''.join(out)

patterned_message('123', '** *** **** * **')

相关问题 更多 >