【问题标题】:Is my Lotto Python script running correctly?我的 Lotto Python 脚本运行正确吗?
【发布时间】:2022-01-08 20:36:52
【问题描述】:

我写的脚本真的可以正常工作吗?我试图模拟一个乐透抽奖场景,只是想看看实际上不可能选择正确的号码(并将其展示给正在玩的朋友)。

乐透游戏的规则模仿“EuroJackpot”游戏,您需要从 50 中选择 5 和(!)从 10 中选择 2。请参阅 here

这是我的脚本:

#!/usr/bin/python3

import random

given = [[8, 16, 12, 46, 47], [2, 4]]

def pickRandomNumbers():
    # source: stackoverflow.com/a/9755548/11160383
    fiveOutOf50 = random.sample(range(1, 50), 5)
    twoOutOf10 = random.sample(range(1, 10), 2)

    fiveOutOf50.sort()
    twoOutOf10.sort()

    return [fiveOutOf50, twoOutOf10]

# source: stackoverflow.com/a/61960902/11160383
def colored(r, g, b, text):
    return "\033[38;2;{};{};{}m{} \033[38;2;255;255;255m".format(r, g, b, text)


solution = pickRandomNumbers()
while given != solution:
    if(given.__contains__(solution[0]) and given.__contains__(solution[1])):
        print(colored(0, 255, 0, solution))
    else:
        print(colored(255, 0, 0, solution))
        solution = pickRandomNumbers()

它有一个given,这是玩家选择的数字。一个while循环选择随机数,直到它与玩家的选择相匹配。我让它运行了很长时间,但显然从未匹配过...

【问题讨论】:

  • 你计算过获得比赛的几率吗?在获得匹配之前,您预计要进行多少次迭代?
  • 显然它有 1:96 百万的机会 - 所以它非常渺茫。但是while循环正确吗? Python 不是我选择的第一语言
  • 顺便说一句,x.__contains__ y 应该写成y in x
  • 您的问题是“从 50 中选择 10...”,但网上列出的规则是从 50 中选择 5 和从 10 中选择 2。这使得赔率 1:(50.choose .5 * 10.choose.2),或 1:95344200。
  • @pjs 哦,我把变量拼错了,谢谢你指出这一点

标签: python random


【解决方案1】:

它永远不会匹配,因为给定的数字是未排序的,而您正在对随机结果进行排序以匹配。

# first
given = [[8, 16, 12, 46, 47], [2, 4]] # the given 5 are unsorted
...
# get random numbers
tenOutOf50 = random.sample(range(1, 50), 5) 
twoOutOf10 = random.sample(range(1, 10), 2)

# and here is the problem
tenOutOf50.sort()
twoOutOf10.sort()

只是要指出,我并不是说你不能对随机选择进行排序......我只是指出为什么你可以让它终生运行。

编辑:您应该对while 条件使用不同的方法。正如现在写的那样,你永远不会看到真实的条件,因为它永远不会进入它......所以这段代码不会被执行:

if(given.__contains__(solution[0]) and given.__contains__(solution[1])):
    print(colored(0, 255, 0, solution))

【讨论】:

    【解决方案2】:

    我用一个简单的无限循环修复了我的 while 条件,并在找到解决方案后立即将其中断:

    【讨论】:

      猜你喜欢
      • 2011-06-17
      • 1970-01-01
      • 2019-08-16
      • 2017-06-25
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      相关资源
      最近更新 更多