Броски кубиков с разным числом граней

We use cookies. Read the Privacy and Cookie Policy

Создадим кубики с 6 и 10 гранями и посмотрим, что произойдет, если бросить их 50 000 раз:

different_dice.py

from die import Die

import pygal

# Создание кубиков D6 и D10.

die_1 = Die()

(1) die_2 = Die(10)

# Моделирование серии бросков с сохранением результатов в списке.

results = []

for roll_num in range(50000):

result = die_1.roll() + die_2.roll()

results.append(result)

. .

# Analyze the results.

...

. .

# Визуализация результатов.

hist = pygal.Bar()

(2)hist.title = "Results of rolling a D6 and a D10 50,000 times."

hist.x_labels = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12',

. .'13', '14', '15', '16']

hist.x_title = "Result"

hist.y_title = "Frequency of Result"

hist.add('D6 + D10', frequencies)

hist.render_to_file('dice_visual.svg')

Чтобы создать модель кубика D10, мы передаем аргумент 10 при создании вто­рого экземпляра Die1 и изменяем первый цикл для моделирования 50 000 бросков вместо 1000. Наименьший возможный результат, как и прежде, равен 2, зато наибольший увеличился до 16; мы соответственно изменяем заголовок, метки оси x и метки серии данных (2).

На рис. 15.13 показана полученная диаграмма. Вместо одного наиболее вероятного результата их стало целых пять. Это объясняется тем, что наименьшее (1+1) и наибольшее (6+10) значения по-прежнему могут быть получены только одним способом, но кубик D6 ограничивает количество способов генерирования средних чисел: суммы 7, 8, 9, 10 и 11 можно выбросить шестью способами. Следовательно, именно эти результаты являются наиболее частыми, и все эти числа выпадают с равной вероятностью.

Рис. 15.13. Результаты 50 000 бросков шести- и десятигранного кубиков

Возможность применения Pygal для моделирования бросков кубиков дает существенную свободу при исследовании этого явления. За считаные минуты вы сможете смоделировать огромное количество бросков с разнообразными кубиками.

Упражнения

15-6. Автоматические метки: измените программы die.py и dice_visual.py. Замените список, используемый для задания значений hist.x_labels, циклом, автоматически генерирующим этот список. Если вы хорошо освоили генераторы списков, также попробуйте заменить другие циклы for в die_visual.py и dice_visual.py генераторами списков.

15-7. Два кубика D8s: создайте модель, которая показывает, что происходит при 1000-кратном бросании двух восьмигранных кубиков. Постепенно наращивайте количество бросков, пока не начнете замечать ограничения, связанные с ресурсами вашей системы.

15-8. Три кубика: при броске 3 кубиков D6 наименьший возможный результат равен 3, а наибольший — 18. Создайте визуализацию, которая показывает, что происходит при броске трех кубиков D6.

15-9. Умножение: при броске двух кубиков результат обычно определяется суммированием двух чисел. Создайте визуализацию, которая показывает, что происходит при умножении этих чисел.

15-10. Эксперименты с библиотеками: попробуйте использовать matplotlib для создания визуализации бросков кубиков, а Pygal — для создания визуализации случайного блуждания.