我正在尝试创建一个程序,该程序允许用户玩扑克(为赚钱,请不要追究我的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
现在这可行,但是我认为必须有一个更优雅的解决方案...
答案 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!