Книга «Изучаем Python»



Pdf көрінісі
бет199/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   195   196   197   198   199   200   201   202   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )

Рис. 15.11.
Простая гистограмма, созданная с использованием Pygal
Обратите внимание на интерактивность диаграмм, построенных с использованием 
Pygal: если навести указатель мыши на столбец диаграммы, вы увидите данные, 
связанные с этим столбцом. Данная возможность особенно полезна при нанесении 
нескольких наборов данных на одну диаграмму.
Бросок двух кубиков
При броске двух кубиков вы получаете большие значения с другим распределением 
результатов. Изменим наш код и создадим два кубика D6, моделирующих бросок 
пары кубиков. При броске каждой пары программа складывает два числа (по од-
ному с каждого кубика) и сохраняет сумму в 
results
. Сохраните копию 
die_visual .
py
под именем 
dice_visual .py
и внесите следующие изменения:
dice_visual.py
import pygal


332
Глава 15 • Генерирование данных
from die import Die
# Создание двух кубиков D6.
die_1 = Die()
die_2 = Die()
# Моделирование серии бросков с сохранением результатов в списке.
results = []
for roll_num in range(1000):
 
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)
# Визуализация результатов.
hist = pygal.Bar()
 
hist.title = "Results of rolling two D6 dice 1000 times."
hist.x_labels = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
hist.x_title = "Result"
hist.y_title = "Frequency of Result"
hist.add('D6 + D6', frequencies)
hist.render_to_file('dice_visual.svg')
Создав два экземпляра 
Die
, мы бросаем кубики и вычисляем сумму для каждого 
броска 

. Самый большой возможный результат (12) вычисляется суммировани-
ем наибольших результатов на обоих кубиках; мы сохраняем его в 
max_result


Наименьший возможный результат 

равен сумме наименьших результатов на 
обоих кубиках. В процессе анализа подсчитывается количество результатов для 
каждого значения от 2 до 
max_result

. (Также можно было использовать диапазон 
range(2,
13)
, но он работал бы только для двух кубиков D6. При моделировании 
реальных ситуаций лучше писать код, который легко адаптируется для разных 
ситуаций. В частности, этот код позволяет смоделировать бросок пары кубиков 
с 
любым
количеством граней.)
При создании диаграммы мы задаем заголовок, метки оси 
x
и серии данных 


(Если бы список 
x_labels
был намного длиннее, то его было бы удобнее сгенери-
ровать автоматически в цикле.)
После выполнения кода обновите в браузере вкладку с диаграммой; примерный 
вид диаграммы показан на рис. 15.12.
На диаграмме показаны примерные результаты, которые могут быть получены для 
пары кубиков D6. Как видите, реже всего выпадают результаты 2 и 12, а чаще всего 
7, потому что эта комбинация может быть выброшена шестью способами: 1+6, 2+5, 
3+4, 4+3, 5+2 и 6+1.


Моделирование бросков кубиков в Pygal


Достарыңызбен бөлісу:
1   ...   195   196   197   198   199   200   201   202   ...   266




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет