#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. Спасибо. Я новичок в этом деле.