2012-12-08 162 views
0

有人可以帮助我正确获得此打印吗?打印嵌套列表 - Python

class Deck(object): 
    def __init__(self): 
     self.cards = [] 
     from random import shuffle 
     shuffle(self.cards) 

    #views all cards in the deck 
    def view_deck(self): 
     for x in self.cards: 
      print(x.name) 

    #takes in an (x) integer and views the top x cards of the deck 
    def view_number_of_cards(self, cards_to_view): 
     for x in self.cards[:cards_to_view]: 
      print(x.name) 

class Player(object): 
    def __init__(self): 
     self.hand = [] 
     self.row_1 = [] 
     self.row_2 = [] 
     self.row_3 = [] 
     self.row_4 = [] 
     self.row_5 = [] 
     self.rows = [] 
     self.rows.append(self.row_1) 
     self.rows.append(self.row_2) 
     self.rows.append(self.row_3) 
     self.rows.append(self.row_4) 
     self.rows.append(self.row_5) 
     self.graveyard = [] 
     self.deck = Deck() 

    #draw a card from deck to hand 
    def draw_card(self): 
     c = self.deck.cards 
     cardDrawn = c.pop(0) 
     self.hand.append(cardDrawn) 

    #shuffle deck 
    def shuffle_deck(self): 
     from random import shuffle 
     shuffle(self.deck.cards) 

    def play_card(self, card, row): 
     self.rows[row-1].append(card) 
     self.graveyard.append(card) 
     self.hand.remove(card) 

    def update(self): 
     i = 1 
     for x in self.rows: 
      print "Lane "+str(i)+": "+str(x[0]), 
      i = i+1 

当我试试这个:

x = Player() 
x.deck.cards = [1, 2, 3, 4] 
x.draw_card() 
x.play_card(x.hand[0], 1) 
x.rows 
[[1], [], [], [], []] 
x.update() 

这种情况

Lane 1: 1 

Traceback (most recent call last): 
    File "<pyshell#5>", line 1, in <module> 
    x.update() 
    File "C:/Users/Carl/Desktop/try.py", line 53, in update 
    print "Lane "+str(i)+": "+str(x[0]), 
IndexError: list index out of range 

在它似乎能正常工作,如果我尝试打印控制台 “第1道:” +行[ 0] [0]等,但由于某种原因,我不断收到这个IndexError,这对我来说没有意义,因为x列表中有绝对的其他列表。在最坏的情况下,因为列表是预定义的(row_2 = []),所以它应该打印“第2巷道”,但这甚至不会发生。谢谢您的帮助!

回答

2

问题是,正如你所说,row_2 = []。因为它是空的,它在指数无元素0

要获得空白“里X:”行,你可以重写更新,像这样:

def update(self): 
    for x in self.rows: 
     for i in range(5): 
      print("Lane {}: ".format(i), end='') 
      if len(x): 
       print(x[0]) 
      else: 
       print() 

您还需要在增加进口开始获取打印功能而不是打印语句:

from __future__ import print_function 
+0

感谢您的意见。出于某种原因,我认为它只是打印空白。像“第2巷:”关于如何做到这一点的任何想法? –