2009-02-11 23 views
24

Hiện tại, tôi đang cố gắng lấy một phương thức bằng Python để trả về một danh sách không, một hoặc hai chuỗi để cắm vào một trình định dạng chuỗi, và sau đó chuyển chúng vào phương thức chuỗi. Mã của tôi trông giống như sau:Trả về một tuple đối số để được cấp cho 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)) 

Khi tôi cố gắng chạy mã này, trình biên dịch cung cấp chỉ mục IndexError: tuple nằm ngoài phạm vi.
Tôi nên cấu trúc giá trị trả lại của mình như thế nào để chuyển nó thành một đối số cho .format()?

Trả lời

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

Bạn đang thiếu chỉ ngôi sao: D

+2

Thật tuyệt vời. Định nghĩa của toán tử * trong ngữ cảnh này là gì? –

+12

Nó giải nén tuple, ví dụ từ "(a, b, c)" đến "a, b, c". –

+1

Điều này chỉ làm cho ngày của tôi freakin, cảm ơn! – erbaker

1

Điều này cố gắng sử dụng "thẻ" làm đầu vào định dạng duy nhất để in, không phải nội dung của thẻ.

Hãy thử một cái gì đó như:

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

Format được ưa thích hơn các nhà điều hành%, như giới thiệu của nó bằng Python 2.6: http://docs.python.org/2/library/stdtypes.html#str.format

Nó cũng đơn giản hơn rất nhiều chỉ để giải nén tuple bằng * - hoặc một dict với ** - thay vì sửa đổi chuỗi định dạng.

Các vấn đề liên quan