Числа очень часто применяются в программировании для ведения счета в играх, представления данных в визуализациях, хранения информации в веб-приложениях и т.д. В Python числовые данные делятся на несколько категорий по способу их использования. Для начала посмотрим, как Python работает с целыми числами, потому что с ними возникает меньше всего проблем.
Целые числа
В Python с целыми числами можно выполнять операции сложения (+), вычитания (-), умножения (*) и деления(/).
>>>2 + 3
5
>>>3 - 2
1
>>>2 * 3
6
>>>3 / 2
1.5
В терминальном сеансе Python просто возвращает результат операции. Для представления операции возведения в степень в Python используется сдвоенный знак умножения:
>>>3 ** 2
9
>>>3 ** 3
27
>>>10 ** 6
1000000
В Python также существует определенный порядок операций, что позволяет использовать несколько операций в одном выражении. Круглые скобки используются для изменения порядка операций, чтобы выражение могло вычисляться в нужном порядке. Пример:
>>>2 + 3*4
14
>>>(2 + 3) * 4
20
Пробелы в этих примерах не влияют на то, как Python вычисляет выражения; они просто помогают быстрее найти приоритетные операции при чтении кода.
Вещественные числа
В Python числа, имеющие дробную часть, называются вещественными (или «числами с плавающей точкой»). Обычно разработчик может просто пользоваться дробными значениями, не особенно задумываясь об их поведении. Просто введите нужные числа, а Python скорее всего сделает именно то, что вы от него хотите:
>>>0.1 + 0.1
0.2
>>>0.2 + 0.2
0.4
>>>2 * 0.1
0.2
>>>2 * 0.2
0.4
Однако в некоторых ситуациях вдруг оказывается, что результат содержит неожиданно большое количество разрядов в дробной части:
>>>0.2 + 0.1
0.30000000000000004
>>>3 * 0.1
0.30000000000000004
Нечто подобное может произойти в любом языке; для беспокойства нет причин. Python пытается подобрать как можно более точное представление результата, что иногда бывает нелегко из-за особенностей внутреннего представления чисел в компьютерах. Пока просто не обращайте внимания на «лишние» разряды; вы узнаете, как поступать в подобных ситуациях, когда эта проблема станет актуальной для вас в проектах части II.
Предотвращение ошибок типов с использованием функции str()
Часто значение переменной должно использоваться внутри сообщения. Допустим, вы хотите поздравить пользователя с днем рождения. И вы написали для этого следующий код:
birthday.py
age = 23
message = "Happy " + age + "rd Birthday!"
print(message)
Казалось бы, программа должна вывести простое приветствие: Happy 23rd birthday! Но, если запустить ее, появляется сообщение об ошибке:
Traceback (most recent call last):
File "birthday.py", line 2, in
. .message = "Happy " + age + "rd Birthday!"
(1) TypeError: Can't convert 'int' object to str implicitly
На этот раз произошла ошибка типа. Это означает, что Python не понимает, какую информацию вы используете. В данном примере Python видит, что в точке (1) используется переменная с целочисленным значением (int), но не знает, как следует интерпретировать это значение. Дело в том, что переменная может представлять как число 23, так и пару отдельных символов 2 и 3. При таком использовании целых чисел в строках необходимо явно указать, что целое число должно использоваться как строка из символов. Для этого переменная передается функции str(), преобразующей не-строковые значения к строковому виду:
age = 23
message = "Happy " + str(age) + "rd Birthday!"
print(message)
Теперь Python понимает, что вы хотите преобразовать числовое значение 23 в строку и вывести символы 2 и 3 в составе поздравления. Ожидаемый результат выводится без всяких ошибок:
Happy 23rd Birthday!
В большинстве случаев работа с числами в Python проходит достаточно тривиально. Если вы получаете неожиданные результаты, проверьте, правильно ли Python интерпретирует числовые данные – как числовое значение или как строку.
Целые числа в Python 2
При делении целых чисел Python 2 возвращает несколько иной результат:
>>>python2.7
>>>3 / 2
1
Вместо 1.5 Python возвращает 1. Результатом деления целых чисел в Python 2 становится целое число с потерей остатка. Обратите внимание: результат не округляется, просто остаток от деления пропадает.
Чтобы избежать этого поведения в Python 2, проследите за тем, чтобы хотя бы одно из двух чисел было вещественным. В этом случае результат также будет вещественным:
>>>3 / 2
1
>>>3.0 / 2
1.5
>>>3 / 2.0
1.5
>>>3.0 / 2.0
1.5
Такое поведение при делении часто приводит к недоразумениям, когда люди, привыкшие работать с Python 3, начинают использовать Python 2, или наоборот. Если вы используете или пишете код, в котором смешиваются целые и вещественные числа, будьте внимательны.
Упражнения
2-8. Число 8: напишите операции сложения, вычитания, умножения и деления, результатом которых является число 8. Не забудьте заключить операции в команды print, чтобы проверить результат. Вы должны написать четыре строки кода, которые выглядят примерно так:
print(5 + 3)
Результатом должны быть четыре строки, в каждой из которых выводится число 8.
2-9. Любимое число: сохраните свое любимое число в переменной. Затем при помощи переменной создайте сообщение для вывода этого числа. Выведите это сообщение.
Комментарии
Комментарии чрезвычайно полезны в любом языке программирования. До сих пор ваши программы состояли только из кода Python. По мере роста объема и сложности кода в программы следует добавлять комментарии, описывающие общий подход к решаемой задаче, — своего рода заметки, написанные на понятном языке.
Как создаются комментарии?
В языке Python признаком комментария является символ «решетка» (#). Интерпретатор Python игнорирует все символы, следующие в коде после # до конца строки. Пример:
comment.py
# Say hello to everyone.
print("Hello Python people!")
Python игнорирует первую строку и выполняет вторую.
Hello Python people!
Какие комментарии следует писать?
Комментарии пишутся прежде всего для того, чтобы объяснить, что должен делать ваш код и как он работает. В ходе работы над проектом вы понимаете, как работают все его компоненты. Но, если вернуться к проекту спустя некоторое время, скорее всего, некоторые подробности будут забыты. Конечно, всегда можно изучить код и разобраться в том, как должны работать его части, но хорошие комментарии с доступным изложением общих принципов работы кода сэкономят немало времени.
Если вы хотите стать профессиональным программистом или участвовать в совместной работе с другими программистами, научитесь писать осмысленные комментарии. В наши дни почти все программы разрабатываются коллективно в группах — либо группами работников одной компании, либо группами энтузиастов, совместно работающих над проектом с открытым кодом. Опытные программисты ожидают увидеть комментарии в коде, поэтому лучше привыкайте добавлять содержательные комментарии прямо сейчас. Написание простых, лаконичных комментариев – одна из самых полезных привычек, необходимых начинающему программисту.
Принимая решение о том, нужно ли писать комментарий или нет, спросите себя, пришлось ли вам перебрать несколько вариантов в поисках разумного решения для некоторой задачи; если ответ будет положительным, напишите комментарий по поводу вашего решения. Удалить лишние комментарии позднее намного проще, чем возвращаться и добавлять комментарии в программу. С этого момента я буду использовать комментарии в примерах для пояснения смысла некоторых частей кода.
Упражнения
2-10. Добавление комментариев: выберите две программы из написанных вами и добавьте в каждую хотя бы один комментарий. Если вы не найдете, что написать в комментариях, потому что программы были слишком просты, добавьте свое имя и текущую дату в начало кода. Затем добавьте одно предложение с описанием того, что делает программа.
Философия Python
Долгое время язык программирования Perl был краеугольным камнем интернет-программирования. На первых порах функционирование многих интерактивных сайтов было основано на сценариях Perl. В то время сообщество Perl руководствовалось девизом: «Это можно сделать несколькими способами». Какое-то время разработчикам нравился такой подход, потому что гибкость, присущая языку, позволяла решать многие задачи разными способами. Подобный подход был допустим при работе над собственными проектами, но со временем стало ясно, что чрезмерная гибкость усложняет долгосрочное сопровождение крупных проектов. Было слишком трудно, утомительно и долго разбираться в коде и пытаться понять, что же думал другой разработчик при решении сложной задачи.
Опытные программисты Python рекомендуют избегать лишних сложностей и применять простые решения там, где это возможно. Философия сообщества Python выражена в очерке Тима Питерса «The Zen of Python». Чтобы просмотреть этот краткий набор принципов написания хорошего кода Python, достаточно ввести команду import this в интерпретаторе. Я не стану воспроизводить все принципы, но приведу несколько строк, чтобы вы поняли, почему они важны для вас как для начинающего программиста Python.
>>>import this
The Zen of Python, by Tim Peters
• Красивое лучше, чем уродливое.