问题描述
我看到了这个问题: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)