питон катится 3 кубика - PullRequest
       12

питон катится 3 кубика

0 голосов
/ 14 октября 2018

Задача: бросить три кубика и суммировать их результаты.Запустите эту функцию 10 тысяч раз и вычислите среднее и стандартное отклонение результатов.

Мой вопрос: я написал код и получил 10000 сумм как 'b'.Теперь мне нужно сложить их и взять среднее.Я не знаю, как поступить.

import random

rolls = 10000; #rolling 10000 times
for i in range(0, rolls):
    die1 = random.randint(1,6)
    die2 = random.randint(1,6)
    die3= random.randint(1,6)
    a=[die1, die2 ,die3]
    b=sum(a)
    print(b)

Ответы [ 4 ]

0 голосов
/ 14 октября 2018

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

import numpy as np
die = np.array([1,2,3,4,5,6])
tally = np.sum(np.random.multinomial(3, [1/6]*6, size=10000) * die, axis=1)
np.mean(tally)
# 10.469
np.std(tally)
# 2.974
0 голосов
/ 14 октября 2018
import random

numdice = 3
numRolls = 10000 

rollSums = []
for i in range(0, numRolls):
    for d in range(0, numDice):
        sum = float(random.randint(1, 6))
    totalSum += sum
    rollSums.append(sum)

average = sum / numRolls

print(average)
0 голосов
/ 14 октября 2018

Далее выполняется настройка, чтобы вы могли рассчитать среднее значение и стандартное отклонение выборки.Вы можете рассчитать стандартное отклонение, используя алгебраическое соотношение Σ (x i - x bar ) 2 = Σx i 2 - n * x bar 2 .

Эту реализацию можно легко изменить, чтобы сделать разное количество бросков и разное количество костей.

import random

rolls = 10000  #rolling 10000 times
num_dice = 3

sum = 0.0
sum_sq = 0.0

for i in range(rolls):
    die_sum = 0.0
    for j in range(num_dice):
        die_sum += random.randint(1,6)
    sum += die_sum
    sum_sq += die_sum * die_sum
    # I don't actually recommend printing the following unless you like
    # seeing 10k random numbers stream to your console
    # print(die_sum)

# You're now set up to calculate the average and standard deviation
# using sum, sum_sq, and rolls.
print(sum / rolls)   # the average
# Leaving std deviation to you, but all the pieces are here now.
0 голосов
/ 14 октября 2018

У вас должна быть другая переменная для суммирования всех b, а затем разделите эту переменную на количество бросков:

import random

rolls = 10000 #rolling 10000 times
totalSum = 0
for i in range(0, rolls):
    die1 = random.randint(1,6)
    die2 = random.randint(1,6)
    die3= random.randint(1,6)
    a=[die1, die2 ,die3]
    b=sum(a)
    totalSum += b
    print(b)

average = totalSum / rolls

Теперь вы сможете решить оставшуюся часть вопроса.

...