试图用python创建彩票程序,但“完成”

2024-09-28 21:04:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个彩票循环,当随机生成的数字与中奖数字匹配时,循环停止。但过了一段时间我就明白了

---------- FINISHED ----------

exit code: -1073741571 status: 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()

Tags: inimportnumberforifmainsysrange
1条回答
网友
1楼 · 发布于 2024-09-28 21:04:01

您收到的退出代码表明程序确实递归到了提供的限制,但是达到了最大递归次数。通常还需要提供螺纹极限。但由于该程序是基于随机数生成的,它可能只是在找到匹配列表的某段时间才起作用。然而,重要的是要了解你处理的概率有多小。您正在尝试匹配两个列表中的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 

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

相关问题 更多 >