按照一定的规则排序每局中打出的牌

2024-05-15 12:48:34 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一对卡片。每一张牌代表一个玩家所玩的一张牌。你知道吗

('9D',   '9S',   '3S',   '0D')
Player0 Player1 Player2 Player3

我想在里面找到赢家的牌,记下谁是赢家。你知道吗

决定胜利者的规则很混乱。。。你知道吗

首先,我有一张王牌,用来决定胜负。 假设我有2D作为王牌。然后西装钻石变成王牌西装。你知道吗

第二,元组中的第一张牌意味着领先的牌和所有其他玩家应该尝试跟随该牌,如果不是这样,那么该玩家所玩的牌实际上就输了。你知道吗

我想比较一下那些卡片的面值。0在本例中代表10。价值最高的牌,也跟在后面的牌获胜。下面是我的代码,我还没有接近目标。我知道我的目标是什么。但我的代码肯定包含冗余。有没有更好的方法来实现这一点?你知道吗

任何关于如何实现整洁解决方案的建议都将不胜感激。你知道吗

我的代码:

    tricks = ('9D', '9S', '3S', '0D')
    counter = 1
    for i in tricks:
        while counter < len(i):
            if max_score[1] == deck_top[1]:
                # Check if it is in trump suit. 
                if int(i[counter-1][0]) < int(i[counter][0]):
                    # Compare face value
                if i[counter-1][0] == i[counter][0]:
                    # Compare the suit.
                    if i[counter][1] == i[counter][1]:

Tags: 代码in目标ifcounter玩家代表int
2条回答

如果我正确理解这个问题,这里有一个可能的解决方案。。你知道吗

trump_suit = 'S'
cards = ('9D', '9S', '3S', '0D')

suit_to_follow = cards[0][1]

leading_player = None
leading_value = None  # (is_trump, value)
for player, card in enumerate(cards):
    value = int(card[0]) or 10
    suit = card[1]
    is_trump = suit == trump_suit

    current_value = (is_trump, value)
    if is_trump or suit == suit_to_follow:
        if current_value > leading_value:
            leading_player = player
            leading_value = current_value

print 'winning player:', leading_player

您可以使用列表理解、max()和自定义排序键来完成。我不确定我是否正确理解了这个问题,但我把它解释为:赢家是价值最高的牌,和王牌一样的牌

def getCardValue(inputVal): #custom key func that calculates zero as a 10
    num = int(inputVal[:-1])
    if num == 0:
        return 10
    return num

trumpCard = '2D'
tricks = ('9D', '9S', '3S', '0D')
potentialWinners = [x for x in tricks if x[-1] == trumpCard[-1]] #remove cards that don't have same suit as trumpCard
print(max(potentialWinners, key=getCardValue)) #get max card value while calculating zero as 10

修改getCardValue以使用J、Q、K、A

def getCardValue(inputVal): #custom key func that calculates zero as a 10
    inputVal = inputVal[:-1]
    specialValues = {"J": 11, "Q": 12, "K": 13, "A": 14}
    if inputVal in specialValues.keys():
        return specialValues[inputVal]

    num = int(inputVal)
    if num == 0:
        return 10
    return num

修改以获得获胜者的索引

将最后两行更改为:

winner = max(potentialWinners, key=getCardValue) #get max card value while calculating zero as 10
print("player", tricks.index(winner), "wins with the card", winner)

相关问题 更多 >