2013-09-15 5 views
1

Я очень новичок в Python, и я надеюсь на помощь или руководство, задав здесь.Python: Среднее количество рисунков (произвольно сгенерированные числа)

Вот проблема: Напишите программу, которая оценивает среднее количество чертежей, которое требуется до того, как номера пользователя будут выбраны в лотерее, состоящей из правильного выбора шести разных чисел, которые находятся между 1 и 10. Для этого запустите цикл 1000 раз, который случайным образом генерирует набор номеров пользователей и имитирует чертежи до тех пор, пока номера пользователя не будут нарисованы. Найдите среднее число чертежей, необходимых в течение 1000 раз, когда цикл выполняется.

Я попытался создать что-то (ниже), но я просто не могу придумать, как получить среднее число. Также кажется, что цикл не очень хорош. Любая помощь или решение? заранее спасибо.

from random import randint 
from random import choice   #??? 

userlist = [] 
for y in range(6): 
     user = input("Enter your entry no.{} lotto number: ".format(y+1)) 
     userlist.append(user) 

x = 0 
randomlotterylist = [] 
while not x>1000: 
     lottery = [] 
     for i in range (6): 
       lot.append(randint(1,10)) 
     randomlotterylist.append(lottery) 
     x = x + 1 

#Next.. ???? 
+0

'но я просто не могу придумать, как получить это среднее число. Возьмите сумму списка и разделите на длину? –

+0

Um .. какой длина? количество индексов или чисел внутри? ответ будет в формате [n, n, n, n, n, n]? – arcwinolivirus

ответ

1

Во-первых, вы хотите знать теоретическую среднее количество рисунков, что это (1/10)^6, не предполагающие повторениями. Поэтому в среднем каждые 1000000 попыток вы попадаете в правильный номер. То есть, только если порядок имеет значение, но я предполагаю, что в вашем случае порядок не имеет значения, так Защиту ваш средний меньше, чем ...

from random import randint 

def number_of_tries_before_hitting_jackpot(user_number): 
    n_tries = 0 
    while True: 
     random_number = set([randint(1,10) for i in range(1,7)]) 
     if user_number == random_number: 
       return n_tries 
     else: 
       n_tries+=1 

def ask_user_his_number(): 
    userlist = [] 
    for y in range(6): 
     user = input("Enter your entry no.{} lotto number: ".format(y+1)) 
     userlist.append(user) 
    return set(userlist) 

n_tries_list = [] 
for x in range(1,1001): 
     user_number = ask_user_his_number() 
     print user_number 
     tmp = number_of_tries_before_hitting_jackpot(user_number) 
     print tmp 
     n_tries_list.append(tmp) 
avg_number_drawings = reduce(lambda x, y: x + y, n_tries_list)/len(n_tries_list) 
print avg_number_drawings 

Этот код не то, что я хотел бы сделать в том смысле, что пользователь должен ввести свои 6 номеров в 1000 раз (v раздражает пользователя). Вы можете изменить функцию ask_user_his_number на функцию, которая просто случайно выбирает набор из 6 чисел.

Смежные вопросы