如何解决用 Python 生成所有 5 张牌的扑克牌
我看到了这个问题:Generating all 5 card poker hands,但我是用 Python 编程的。
我已经编写了自己的逻辑来生成所有可能的组合,但它运行了很长时间,虽然我确保卡片 2 到 5 没有重复之前的卡片,但我在增加下标时忘记检查下一张生成的卡片之前没有使用过。
所以我回答我自己的问题来展示我做了什么。
解决方法
import itertools
from time import time
import datetime as datetime1
startTime = time()
startDateNowFmt = datetime1.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("Server Start DateTime=" + str(startDateNowFmt))
# Get all permutations of [1,2,3,etc... ]
max_number = 52
cards_per_hand = 5
top_of_range = max_number + 1
list_of_numbers = range(1,top_of_range) # one more than highest number
print("result")
result_list = list(itertools.combinations(list_of_numbers,cards_per_hand))
print("Number of combinations=",len(result_list))
# for testing,show a few,but don't show when generating all 2+ million hands
if len(result_list) < 100:
for item in result_list:
print(item)
endTime = time()
# print("StartTime=" + str(startTime) + " EndTime=" + str(endTime))
elapsedTime = endTime - startTime
endDateNowFmt = datetime1.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print("\n")
print("Server Start DateTime=" + str(startDateNowFmt))
print("Server End DateTime=" + str(endDateNowFmt))
minutes = elapsedTime / 60
print("ElapsedTime=" + str(elapsedTime) + " seconds,or " + str(minutes) + " minutes")
注意:我倾向于在我的所有程序中显示经过的时间。它在不到 1 秒的时间内运行,让我感到震惊!
这将返回一个数组数组,每个数组中有 5 个数字。从那里开始,我必须与我现有的逻辑和类相匹配,以便为每张卡片分配名称、套装、等级等。
输出:
Server Start DateTime=2021-02-14 18:04:50
result
Number of combinations= 2598960
Server Start DateTime=2021-02-14 18:04:50
Server End DateTime=2021-02-14 18:04:50
ElapsedTime=0.2652921676635742 seconds,or 0.004421536127726237 minutes
输出较少的数据,并在其中打印数组(使用下面显示的这些变量设置)。这有助于准确说明它在做什么。
max_number = 6
cards_per_hand = 5
Number of combinations= 6
(1,4,5)
(1,6)
(1,5,6)
(2,6)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。