Попытка создать программу лотереи в python, но "FINISHED" - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь создать лотерею l oop, которая останавливается, когда случайно сгенерированные числа совпадают с выигрышными. Но я получаю это через некоторое время.

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

код выхода: - 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()

1 Ответ

1 голос
/ 15 января 2020

Код выхода, который вы получаете, указывает на то, что программа действительно рекурсировала до указанного лимита, однако достигает максимального числа рекурсий. Часто также необходимо указать ограничение потока. Но поскольку программа основана на генерации случайных чисел, она может просто работать некоторое время, когда действительно найден соответствующий список. Тем не менее, важно понимать, насколько мала вероятность, с которой вы имеете дело. Вы пытаетесь сопоставить 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 

Чтобы улучшить шансы, диапазон для генерации случайных целых чисел был уменьшен, и программа проверяет, только ли сгенерированное число находится в начальном списке сгенерированных чисел. Вы можете увеличить диапазон генерации случайных чисел, чтобы сделать выигрыш более редким.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...