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



Pdf көрінісі
бет177/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   173   174   175   176   177   178   179   180   ...   238
Байланысты:
2 5343781172763690906

Рис. 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    333



Достарыңызбен бөлісу:
1   ...   173   174   175   176   177   178   179   180   ...   238




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

    Басты бет