В Python, есть ли способ, чтобы распечатать списки в строку, используя.обозначение формата?


Простое упражнение Madlibs:

STORY = "This morning I woke up and felt %s because %s was going to finally %s over the big %s %s."

WORD_types = ('an adjective','a pronoun','a verb','an adjective','a noun')

WORD_values = []

for s in WORD_types:
  print "Please give {}.".format(s)
  s = raw_input()
  WORD_values.append(s)

print STORY % tuple(WORD_values)

Есть способ выполнить эту последнюю строку .обозначение формата?

STORY = "This morning I woke up and felt {} because {} was going to finally {} over the big {} {}."

WORD_types = ('an adjective','a pronoun','a verb','an adjective','a noun')

WORD_values = []

for s in WORD_types:
  print "Please give {}.".format(s)
  s = raw_input()
  WORD_values.append(s)

print STORY.format(WORD_values)

Это приводит к следующей ошибке:

Traceback (most recent call last):
  File "Madlibs.py", line 12, in <module>
    print STORY.format(WORD_values)
IndexError: tuple index out of range
1 2

1 ответ:

Вы можете использовать *, чтобы распаковать список:

print STORY.format(*WORD_values)

Пример Вывода:

Please give an adjective
 optimistic
Please give a pronoun
 I
Please give a verb
 drive
Please give an adjective
 scary
Please give a noun
 hill
This morning I woke up and felt optimistic because I was going to finally drive over the big scary hill.

Вот соответствующая документация: распаковка списков аргументов и еще примеры форматов.