2014-07-05 135 views
-1

我是Python新手,无法将函数转换为列表理解。修真涉及value功能,其中包含类如下:加入Python列表理解

class Card(object): 

    # Lists containing valid candidates for a card's rank and suit. 
    suits = [None, "spade", "club", "heart", "diamond"] 
    ranks = [None, "ace", "two", "three", "four", "five", "six", 
      "seven", "eight", "nine", "ten", "jack", "queen", "king"] 

    # Dictionary containing the ranks and their associative values. 
    values = {None:0, "ace":1, "two":2, "three":3, "four":4, 
       "five":5,"six":6,"seven":7, "eight":8,"nine":9, 
       "ten":10, "jack":10, "queen":10, "king":10} 

    def __init__(self, rank=None, suit=None): 
     """Constructor.""" 
     if rank not in self.ranks: 
      raise ValueError("Invalid rank.") 
     if suit not in self.suits: 
      raise ValueError("Invalid suit.") 
     self.rank = rank 
     self.suit = suit 

    def __str__(self): 
     """A string representation of the Card.""" 
     return "{0}:{1}".format(self.rank, self.suit) 

不同的类创建卡对象的列表,并定义了以下功能:

def value(self): 
    """Returns an int value containing the summed values of the hand's cards.""" 
    result = 0 
    for card in self.cards: 
     result += Card.values[card.rank] 
    return result 

从我可以看,value函数是一个列表理解的候选人,但我不能得到它的工作。我相信以下内容是正确的,但是我继续得到语法错误,我不知道我做错了什么。请注意,我是新来的Python和list解析:

def value(self): 
    result = [x += y for x = Card.values[y.rank] for y in self.cards] 

回答

2

您可以简单地使用sum功能和发电机表达这样

def value(self): 
    return sum(Card.values[card.rank] for card in self.cards) 

如果您想使用列表理解,那么你就可以简单地转换使用列表中理解语法发电机表达式,像这样

def value(self): 
    return sum([Card.values[card.rank] for card in self.cards]) 
+0

这是梦幻般的,它完美的作品,似乎不是在这种情况下,用列表更好地理解。为了我自己的缘故,你是否也可以向我展示如何将它作为列表理解来完成? – Cristian

+0

@Cristian List Comprehension用于创建列表,但您只是试图对值进行求和。 – thefourtheye

+0

非常感谢您的帮助。等待接受。 – Cristian