【问题标题】:Generating all 5 card poker hands with Python用 Python 生成所有 5 张牌扑克手
【发布时间】:2021-05-17 22:15:02
【问题描述】:

我看到了这个问题:Generating all 5 card poker hands,但我是用 Python 编程的。

我已经编写了自己的逻辑来生成所有可能的组合,但它运行了很长时间,虽然我确保卡片 2 到 5 没有重复之前的卡片,但我忘记在增加我的下标时检查接下来生成的卡片之前没有使用过。

所以我要回答我自己的问题来展示我做了什么。

【问题讨论】:

    标签: python-3.x itertools poker


    【解决方案1】:
    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)
    

    【讨论】:

      猜你喜欢
      • 2011-04-19
      • 1970-01-01
      • 2016-02-24
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 2015-10-01
      相关资源
      最近更新 更多