我的Python彩票模拟器代码有什么问题?

问题描述 投票:0回答:1

我想模拟你需要多长时间玩一次彩票才能中奖。这是我的代码:

import random

lotterylist = [random.randint(1, 49) for x in range(6)]

winning_numbers = [6, 26, 31, 32, 33, 49]

counter = 0

while winning_numbers != lotterylist:
    lotterylist = [random.randint(1, 49) for x in range(6)]

    counter += 1

print("Finished! I got", counter, "tries to win.")

我的电脑还没有结束。我运行了该程序 1.5 小时,它仍然运行。现在我的问题是:只有当生成的列表中的数字也位于完全相同的行时,它才有效吗?那么只有 6、26、31、32、33、49 有效,而不是 49、33、32、31、26、6? 如果是,我该如何解决?

我已经尽力了,但我的技术还不够好,无法成功。

python windows console simulator
1个回答
0
投票

“只有在生成的列表中的数字也位于完全相同的行时才有效吗?”

是的。

winning_numbers
lotterylistare
都是
list
数据类型,并且列表在 Python 中是有序的。

如果您不希望顺序重要,您可以使用

set

winning_numbers = {6, 26, 31, 32, 33, 49}  # set type
winning_numbers = set(6, 26, 31, 32, 33, 49)  # equivalent to the above

请注意,

set
不包含重复元素。这意味着您生成彩票号码的代码需要更新:

lotterylist = set()
while len(lotterylist) < 6:
    lotterylist.add(random.randint(1, 49))

为什么没有终止?

数字

[1, 49]
的 6 位数字序列的数量为 49^6 或 13841287201,因此 6 个数字随机匹配一个特定序列的机会为 1/13841287201。概率表示,给定一个以概率
p
发生的事件,直到该事件发生之前预期的试验次数
E
简单地定义为
E=1/p
——在本例中为
E=13841287201
。这意味着您的循环在中奖之前预计会运行大约 140 亿次。

© www.soinside.com 2019 - 2024. All rights reserved.