2015-09-24 1 views
-4

Я работаю над простым кодом mad-libs esque, но я не смог найти более эффективный способ сделать это.Лучший способ сделать отпечатки с кортежами?

print madlib1 % (madlib1_answers[0],madlib1_answers[1],madlib1_answers[2],madlib1_answers[3],madlib1_answers[4],madlib1_answers[5],madlib1_answers[6],madlib1_answers[7],madlib1_answers[8],madlib1_answers[9],madlib1_answers[10],madlib1_answers[11],madlib1_answers[12]) 

madlib1 это просто переменная строка, которая имеет% S для каждого ответа, и Madlibs имеет 13 ответов всего.

+0

Вы уже узнали о петлях? –

+0

Какой формат? Будет что-то вроде 'print '.join (map (str, madlib1_answers))'? Если вам нужно больше сложностей, используйте 'str.format' и распакуйте кортеж в него -' template.format (* madlib1_answers) '. – jonrsharpe

+0

Попробуйте 'madlib1% tuple (madlib1_answers [: 13])', если 'madlib1_answers' уже является кортежем, тогда звонок не требуется. –

ответ

2

Есть много способов, вы можете сделать это:

# If madlib1_answers is already a tuple with correct number of elements 
print madlib1 % madlib1_answers 

# If you need to crop the tuple: 
print madlib1 % madlib1_answers[:13] 

# If it's not a tuple yet 
print madlib1 % tuple(madlib1_answers) 
+0

Что делать, если 'madlib1_answers' не является кортежем или содержит больше элементов, чем заполнители, предоставленные в' madlib1'? –

+0

'print madlib1% tuple (madlib1_answers [: 13])' будет удовлетворять OP. – chepner

4

Если переключиться на использование .format(), вы можете просто раскатать madlib1_answers так:

print madlib1.format(*madlib1_answers) 

Это имеет то преимущество, что позволяет вам используйте format specification language.

Одно предупреждение, если у вас есть больше значений, чем у вас спецификаторы в вашей неформатированной строке, он выкинет любые дополнительные значения.

Смежные вопросы