
SPADE = 'spade'
CLOVER = 'clover'
DIAMOND = 'diamond'
HEARTH = 'hearth'
ACE = 'A'
JACK = 'J'
QUEEN = 'Q'
KING = 'K'

def AllColor():
    return (SPADE,CLOVER,DIAMOND,HEARTH)

def AllFigure():
    return (ACE,2,3,4,5,6,7,8,9,10,JACK,QUEEN,KING)

def FigureValue(fig):
    if fig == ACE:
        return 1
    elif fig in [JACK,QUEEN,SPACE,CLOVE]:
        return 10
    elif fig in range(2,11):
        return fig
    else:
        raise Exception('not a figure %s'%fig)

def FigureRank(fig):
    RankDict = dict([
        (figure, rank)
        for (rank, figure) in enumerate(AllFigure()
        ])
    if not fig in RankDict:
        raise Exception('not a ranked figure %s' % fig)
    return RankDict[fig]

def AllCard():
    return (
        (figure, color)
        for figure in AllFigure()
        for color in AllColor()
    )

def AllPossible15():
    twoCard = [ [(figA,ColA),(FigB,ColB)]
        for FigA,ColA in AllCard()
        for FigB,ColB in AllCard()
        if (FigA,ColA) != (FigB, ColB)
        if FigureValue(FigA) + FigureValue(FigB) == 15
    ]
    threeCard = [ [(FigA,ColA),(FigB,ColB),(FigC,ColC)]
        for FigA,ColA in AllCard()
        for FigB,ColB in AllCard()
        for FigC,ColC in AllCard()
        if (FigA,ColA) != (FigB,ColB)
        if (FigC,ColC) != (FigB,ColB)
        if (FigA,ColA) != (FigC,ColC)
        if FigureValue(FigA) + FigureValue(FigB) + FigureValue(FigC) == 15
    ]


def dropwhat(cards=[]):
    pass









