2009-02-11 1 views
24

В настоящее время я пытаюсь получить метод в Python, чтобы вернуть список нулевой, одной или двух строк, чтобы подключиться к форматированию строк, а затем передайте их методу string. Мой код выглядит примерно так:Вернуть кортеж аргументов, которые нужно передать в string.format()

class PairEvaluator(HandEvaluator): 
    def returnArbitrary(self): 
    return ('ace', 'king') 

pe = PairEvaluator() 
cards = pe.returnArbitrary() 
print('Two pair, {0}s and {1}s'.format(cards)) 

Когда я пытаюсь запустить этот код, компилятор дающую IndexError: индекс кортежа из диапазона.
Как я должен структурировать возвращаемое значение, чтобы передать его в качестве аргумента для .format()?

ответ

59
print('Two pair, {0}s and {1}s'.format(*cards)) 

Вы отсутствующего только звезды: D

+2

Это потрясающе. Каково определение оператора * в этом контексте? –

+12

Он распаковывает кортеж, например, из «(a, b, c)» в «a, b, c». –

+1

Это только что сделало мой freakin 'день, спасибо! – erbaker

1

Это попытка использовать «карты» как одноформатный ввод для печати, а не содержимое карт.

Попробуйте что-то вроде:

print('Two pair, %ss and %ss' % cards) 
4

Формат предпочтительнее оператора%, а его введение в Python 2.6: http://docs.python.org/2/library/stdtypes.html#str.format

Также гораздо проще просто распаковать кортеж с помощью * - или dict с ** - вместо того, чтобы изменять строку формата.

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