【问题标题】:Trying to create lottery program in python but getting "FINISHED"试图在 python 中创建彩票程序但得到“完成”
【发布时间】:2020-05-01 20:08:34
【问题描述】:

我正在尝试创建一个彩票循环,当随机生成的数字与获胜者匹配时停止。但我会在一段时间后得到这个。

---------完成----------

退出代码:-1073741571 状态:1

import sys
import random
sys.setrecursionlimit(1500000)

lotteryWinner = []
lotteryRandom = []

for i in range(6):
    number = random.randint(1,50)
    while number in lotteryWinner:
        number = random.randint(1,50)
    
   lotteryWinner.append(number)
   lotteryWinner.sort()
print(lotteryWinner)

def main():
    if len(lotteryRandom)>5:
            lotteryRandom.clear()

    for i in range(6):
        number = random.randint(1,50)
        while number in lotteryRandom:
            number = random.randint(1,50)
        lotteryRandom.append(number)
        lotteryRandom.sort() 
  
    print(lotteryRandom)  

    if lotteryWinner != lotteryRandom:
        main()
        

    if lotteryWinner == lotteryRandom:
        print('You win')     
main()

【问题讨论】:

  • 想要的输出是什么?
  • 您能再解释一下吗?你是随机生成 lotteryWinner 和 lotteryRandom 数组吗?还是像,您想随机创建 lotteryRandom 数组,手动输入数组列表并从中选择与 lotteryRandom 数组匹配的获胜者?
  • 我想生成一次 lotteryWinner 然后生成 lotteryRandom 直到它们匹配

标签: python loops


【解决方案1】:

您收到的退出代码表明程序确实递归到提供的限制,但达到了最大递归次数。通常还需要提供 threadinglimit。但是由于该程序是基于随机数生成的,因此它可能会在确实找到匹配列表的一段时间内工作。但是,重要的是要了解您正在处理的概率有多小。您正在尝试匹配两个列表中的 5 个随机数,其中包括:

  1. 您想生成完全相同的 5 个数字。(从 1 到 50,其中选择 1 个数字的概率为 1/50,选择 5 个数字的概率为 (1/5)^5)
  2. 您希望它们在列表中的顺序相同。 (按照您的方式对它们进行排序是一个不错的选择)

为了使机会更好,您可以做的很多事情之一是

import sys
import random
sys.setrecursionlimit(1500000)

lotteryWinner = []
lotteryRandom = []

for i in range(6):
    number = random.randint(1,10)
    lotteryWinner.append(number)
    lotteryWinner.sort()
print(lotteryWinner)

def main():

    number = random.randint(1,10)

    if number not in lotteryWinner:
        main()


    else:
        print('You win')     
main()

输出:

[3, 4, 6, 9, 10, 10]                                                                                                                                           
You win 

为了提高几率,随机整数生成的范围已经缩小,程序只检查生成的数字是否在生成数字的初始列表中。您可以增加随机数生成的范围,使中奖更加罕见。

【讨论】:

  • 我明白了,我想我可以在烧掉我的 cpu 时等待几个小时才能找到完美的匹配:)
  • 在不烧毁 CPU 的情况下,您还可以想到其他几种可能性。 :) 另外,如果您觉得有帮助,请点赞/标记答案。
猜你喜欢
  • 2021-02-21
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多