如何确定最佳扑克手踢手(Python中列表的相等性)

时间:2019-05-10 23:30:47

标签: python list

我正在尝试创建一个程序,该程序允许用户玩扑克(为赚钱,请不要追究我的IRS),并且在尝试确定更好的牌手时遇到了问题。因此,起初我的想法是对我喜欢[14, 12, 10, 8, 6]的纸牌(不带花色)的值进行排序(王牌为14)。并将其与另一个列表进行比较,说出[14, 12, 10, 8, 7](7个踢脚),以查看哪个排名更高。每手牌来自德州扑克游戏中7张可用卡中的5张卡组合之一。我最初的想法是:

def better_hand_with_kicker(list0, list1):
    for index in range(5):
        if list0[index] >= list1[index]:
            continue
        else:
            return False
    return True

但是,如果任何数字较小,此功能将无效。例如在[14, 12, 10, 8, 6][14, 13, 9, 7, 5]之间,它将返回[14, 12, 10, 8, 6]是优越的,因为即使(13> 12)使得另一手获胜,也会触发(9 <10)的第三个空位return False子句。

因此,我想到了一个稍微复杂一点的东西:

def better_hand_with_kicker(list0, list1):
    for index in range(5):
        if list0[index] == list1[index]:
            continue
        elif list0[index] > list1[index]:
            return True
        else:
            return False
    return True # this would really be a tie

现在这可行,但是我认为必须有一个更优雅的解决方案...

1 个答案:

答案 0 :(得分:1)

有一个更优雅的解决方案!在网上搜索有关列表之间不平等的想法并找到this amazing post之后,我意识到我的解决方案非常不足。最好的解决方案是使用:

def better_hand_with_kicker(list0, list1):
    if list0 > list1:
        return True
    return False

这利用了一个事实,即列表的不等式的求值结果与我创建的其他函数类似,具体来说:

  

比较使用字典顺序:首先比较前两个项目,如果它们不同,则确定比较的结果;如果它们相等,则比较下两个项目,依此类推,直到用尽任何一个序列。

需要注意的是,在进行不平等评估之前,每个列表必须为sorted()。希望这篇文章可以帮助将来尝试使用整数列表中的不等式的人。在我的用例中,它是如此的简洁,它把我正在编写的整个函数变成了一个单独的if语句,我不再真正需要一个函数!现在我的代码可以简单地是:

if list0 > list1:
    # do stuff

没有必要的功能。我不确定为什么在线教程似乎没有涵盖此功能...无论如何,

赞美StackOverflow!