Как заменить рисунок звезд сообщением?

#python #string

Вопрос:

Я пытаюсь отформатировать сообщение, повторяя его элементы в соответствии с шаблоном:

 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()
 

Комментарии:

1. пожалуйста, опубликуйте то, что вы уже пробовали

2. @user16473483 пожалуйста, опубликуйте свой код в виде текста

Ответ №1:

Вы можете использовать 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', '** *** **** * **')
 

Комментарии:

1. Я не могу это распечатать .

2. @user16473483 Я также предложил более классический подход, но вы должны попытаться понять и то, и другое 😉

3. Спасибо. Я новичок в этом деле.