【发布时间】: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 哦,我把变量拼错了,谢谢你指出这一点