1

我对 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.. ????
4

1 回答 1

1

首先,您想知道您的理论平均图纸数量,即 (1/10)^6 假设不允许重复。因此,平均每 1,000,000 次尝试,您就会命中正确的数字。那只是在订单很重要的情况下,但我认为在你的情况下订单并不重要,所以你的平均水平低于那个......

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 个数字 1,000 次(对用户来说很烦人)。您可以将 ask_user_his_number 函数更改为仅随机选择一组 6 个数字的函数。

于 2013-09-15T15:30:26.347 回答