【发布时间】:2021-05-17 22:15:02
【问题描述】:
我看到了这个问题:Generating all 5 card poker hands,但我是用 Python 编程的。
我已经编写了自己的逻辑来生成所有可能的组合,但它运行了很长时间,虽然我确保卡片 2 到 5 没有重复之前的卡片,但我忘记在增加我的下标时检查接下来生成的卡片之前没有使用过。
所以我要回答我自己的问题来展示我做了什么。
【问题讨论】:
标签: python-3.x itertools poker
我看到了这个问题:Generating all 5 card poker hands,但我是用 Python 编程的。
我已经编写了自己的逻辑来生成所有可能的组合,但它运行了很长时间,虽然我确保卡片 2 到 5 没有重复之前的卡片,但我忘记在增加我的下标时检查接下来生成的卡片之前没有使用过。
所以我要回答我自己的问题来展示我做了什么。
【问题讨论】:
标签: python-3.x itertools poker
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, 2, 3, 4, 5)
(1, 2, 3, 4, 6)
(1, 2, 3, 5, 6)
(1, 2, 4, 5, 6)
(1, 3, 4, 5, 6)
(2, 3, 4, 5, 6)
【讨论】: