Моделирование бросков кубиков в Plotly
343
❶
result = die_1.roll() + die_2.roll()
results.append(result)
# Анализ результатов.
frequencies = []
❷
max_result = die_1.num_sides + die_2.num_sides
❸
for value in range(2, max_result+1):
frequency = results.count(value)
frequencies.append(frequency)
# Визуализация результатов.
x_values = list(range(2, max_result+1))
data = [Bar(x=x_values, y=frequencies)]
❹
x_axis_config = {'title': 'Result', 'dtick': 1}
y_axis_config = {'title': 'Frequency of Result'}
my_layout = Layout(title='Results of rolling two D6 dice 1000 times',
xaxis=x_axis_config, yaxis=y_axis_config)
offline.plot({'data': data, 'layout': my_layout}, filename='d6_d6.html')
Создав два экземпляра
Die
, мы бросаем кубики и вычисляем сумму для каждого
броска
. Самый большой возможный результат (12) вычисляется суммировани-
ем наибольших результатов на обоих кубиках; мы сохраняем его в
max_result
.
Наименьший возможный результат (2) равен сумме наименьших результатов на
обоих кубиках. В процессе анализа подсчитывается количество результатов для
каждого значения от 2 до
max_result
. (Также можно было использовать диапазон
range(2,
13)
, но он работал бы только для двух кубиков D6. При моделировании
реальных ситуаций лучше писать код, который легко адаптируется для разных
ситуаций. В частности, этот код позволяет смоделировать бросок пары кубиков
с
любым
количеством граней.)
При создании диаграммы мы включаем ключ
dtick
в словарь
x_axis_config
.
Этот параметр управляет расстоянием между делениями на оси x. С появлением
дополнительных столбцов на гистограмме в конфигурации по умолчанию Plotly
будет снабжать метками только часть столбцов. Параметр
'dtick':
1
приказывает
Plotly помечать все деления. Также мы обновляем заголовок диаграммы и изме-
няем имя выходного файла.
После выполнения кода в браузере должна появиться диаграмма, примерный вид
которой показан на рис. 15.13.
На диаграмме показаны примерные результаты, которые могут быть получены
для пары кубиков D6. Как видите, реже всего выпадают результаты 2 и 12, а чаще
всего 7, потому что эта комбинация может быть выброшена шестью способами,
а именно: 1+6, 2+5, 3+4, 4+3, 5+2 и 6+1.
Броски кубиков
с разным числом граней
Создадим кубики с 6 и 10 гранями и посмотрим, что произойдет, если бросить их
50 000 раз: