微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用 Python 生成所有 5 张牌的扑克牌

如何解决用 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?