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



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


Глава 15 • Генерирование данных
Установка Pygal
Установите Pygal при помощи 
pip
. (Если вы еще не использовали 
pip
, обратитесь 
к разделу «Установка пакетов Python с использованием pip» на с. 227.)
В системах Linux и OS X команда должна выглядеть примерно так:
pip install --user pygal
В системе Windows она выглядит так:
python -m pip install --user pygal
ПРИМЕЧАНИЕ
Возможно, при установке пакетов вам придется использовать команду pip3 вместо pip . Если же эта 
команда не работает, попробуйте исключить флаг --user .
Галерея Pygal
Примеры визуализаций, которые могут быть построены с использованием Pygal, 
представлены в галерее диаграмм: зайдите на сайт 
http://www.pygal.org/
, щелкните 
на ссылке 
Documentation
, затем щелкните на ссылке 
Chart
types
. Каждый пример со-
провождается исходным кодом, так что вы сможете увидеть, как была построена 
каждая из визуализаций.
Создание класса кубика
Для моделирования броска одного кубика мы будем использовать следующий 
класс:
die.py
from random import randint
class Die():
"""Класс, представляющий один кубик."""
 
def __init__(self, num_sides=6):
"""По умолчанию используется шестигранный кубик."""
self.num_sides = num_sides
def roll(self):
""""Возвращает случайное число от 1 до числа граней."""
 
return randint(1, self.num_sides)
Метод 
__init__()
получает один необязательный аргумент. Если при создании 
экземпляра кубика аргумент с количеством сторон не передается, по умолчанию 
создается шестигранный кубик. Если же аргумент присутствует, то переданное 
значение используется для определения количества граней 

. (Кубики принято 
обозначать по количеству граней: шестигранный кубик — D6, восьмигранный — 
D8 и т. д.)


Моделирование бросков кубиков в Pygal
329
Метод 
roll()
использует функцию 
randint()
для получения случайного числа 
в диапазоне от 1 до количества граней 

. Функция может вернуть начальное зна-
чение 

, конечное значение (
num_sides
) или любое целое число в этом диапазоне.
Бросок кубика
Прежде чем строить визуализацию на основе этого класса, бросим кубик D6, вы-
ведем результаты и убедимся в том, что они выглядят разумно:
die_visual.py
from die import Die
# Создание кубика D6.
 
die = Die()
# Моделирование серии бросков с сохранением результатов в списке.
results = []
 
for roll_num in range(100):
result = die.roll()
results.append(result)
print(results)
В точке 

создается экземпляр 
Die
с шестью гранями по умолчанию. В точке 

моделируются 100 бросков кубика, а результат каждого броска сохраняется в спи-
ске 
results
. Выборка выглядит примерно так:
[4, 6, 5, 6, 1, 5, 6, 3, 5, 3, 5, 3, 2, 2, 1, 3, 1, 5, 3, 6, 3, 6, 5, 4,
1, 1, 4, 2, 3, 6, 4, 2, 6, 4, 1, 3, 2, 5, 6, 3, 6, 2, 1, 1, 3, 4, 1, 4,
3, 5, 1, 4, 5, 5, 2, 3, 3, 1, 2, 3, 5, 6, 2, 5, 6, 1, 3, 2, 1, 1, 1, 6,
5, 5, 2, 2, 6, 4, 1, 4, 5, 1, 1, 1, 4, 5, 3, 3, 1, 3, 5, 4, 5, 6, 5, 4,
1, 5, 1, 2]
Беглое знакомство с результатами показывает, что класс 
Die
работает. В результа-
тах встречаются граничные значения 1 и 6, то есть модель возвращает наименьшее 
и наибольшее возможное значение; значения 0 и 7 не встречаются, а значит, все 
результаты лежат в диапазоне допустимых значений. Также в выборке встречаются 
все числа от 1 до 6, то есть представлены все возможные результаты.
Анализ результатов
Чтобы проанализировать результаты бросков одного кубика D6, мы подсчитаем, 
сколько раз выпадало каждое число:
die_visual.py
...
# Моделирование серии бросков с сохранением результатов в списке.
results = []
 
for roll_num in range(1000):
result = die.roll()
results.append(result)


330

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




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

    Басты бет