用 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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...