Бросаем 2 кубика 1000 раз и подсчитываем, сколько раз сумма попаданий двух кубиков - PullRequest
0 голосов
/ 21 февраля 2020

Домашнее задание требует, чтобы мы выяснили вероятности от 2 до 12 как сумму экспериментом. Мы хотим бросить два кубика 1000 раз и посчитать, сколько раз сумма равна 2, 3,… и 12. Пока у меня есть это в качестве кода, но я не могу получить результат, который запрашивает профессор. output of ex. code

Что у меня есть до сих пор:

import random as r

die_1 = r.randint(1,6)
die_2 = r.randint(1,6)


print('For-Loop')
for i in range(2,13):
    r.seed(1)
    counter = 0
    for j in range(1000):
        if i == r.randint(2,12):
            counter = counter + 1
    print("sum = ", i,  " count = ",  counter)

Ответы [ 3 ]

4 голосов
/ 21 февраля 2020

Я попытался объяснить все, что происходит в комментариях:

from collections import defaultdict
from random import randint

# Roll the two dice how many times?
n = 1000

# Create a dictionary to store the results
results = defaultdict(int)

# Loop n times
for _ in range(n):
    # Get random numbers for the two dice
    die_1 = randint(1, 6)
    die_2 = randint(1, 6)
    # Increase the corresponding result by 1
    results[die_1 + die_2] += 1

# Print results
print(results)

, которые могут напечатать что-то вроде этого:

defaultdict(<class 'int'>, {7: 160, 8: 134, 6: 145, 9: 107, 3: 50, 10: 76, 12: 26, 4: 86, 5: 128, 2: 37, 11: 51})

Вы также можете легко проиллюстрировать результаты с помощью графика :

import matplotlib.pyplot as plt
plt.bar(results.keys(), results.values())
plt.show()

enter image description here

3 голосов
/ 21 февраля 2020
from random import randint

rolls = [sum([randint(1, 6), randint(1, 6)]) for i in range(1000)]

for i in range(2, 13):
    print(f'Sum of {i} was rolled {rolls.count(i)} times')
3 голосов
/ 21 февраля 2020

Вы не правильно учитываете вероятности. r.randint(2, 12) - это не то же самое, что независимый бросок двух d ie (поскольку они представляют собой несколько бросков по два, суммирующие одно и то же значение для некоторых значений).

import collections
import random

print("For Loop")

occurrences = []
for trial in range(1000):
    die1 = random.randint(1, 6)
    die2 = random.randing(1, 6)
    occurrences.append(die1 + die2)
counter = collections.Counter(occurrences)
for roll, count in counter.items():
    print(f"sum = {roll} count = {count}") 

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

import random

print("For Loop")
occurrences = {}
for trial in range(1000):
    die1 = random.randint(1, 6)
    die2 = random.randing(1, 6)
    roll = die1 + die2
    current = occurrences.setdefault(roll, 0)
    occurrences[roll] = current + 1

for roll, count in occurrences.items():
    print(f"sum = {roll} count = {count}")

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

...