Числа

Числа – это первая группа типов переменных с которой мы познакомимся поближе. В Python есть несколько типов, которые отвечают за работу с числами. Для самых простых задач хватает двух основных типов — int (целые числа) и float (вещественнные числа). Изначально Python создавался для научной среды, поэтому в нем огромное количество дополнительных инструментов для работы с числами. Например, есть встроенный тип complex для комплексных чисел, fraction для операций с дробями и decimal для случаев, когда вам не хватает float и нужна точность в знаках после запятой.

Одна из основных современных областей применения Python — это научная деятельность, а именно: статистика, биоинформатика, астрономия или машинное обучение и анализ данных. Поэтому в основную библиотеку Python встроено много дополнительных математических инструментов. И помимо этого существует много мощных дополнительных пакетов, которые делают возможным реализацию обработки сложных данных. Эти пакеты можно установить отдельно.

Способы записи чисел

Компьютер представляет числа совсем не так как человек. Хочу кратко напомнить, что в компьютере существуют двоичные, восьмиричные и шестнадцатиричные представления чисел:

>>> a = 0b1010 # Binary Literals
>>> b = 100    # Decimal Literal
>>> c = 0o310  # Octal Literal
>>> d = 0x12c  # Hexadecimal Literal
>>> type(a) == type(b) == type(c) == type(d)
True

Все эти способы записи дают целые числа.

Обратите внимание, что в Python нельзя использовать запятую для отделения целой части числа от десятичной, как нас учили в школе. Для этой цели пользуйтесь точкой.

#Float Literal
>>> float_1 = 3.14
>>> 5,5
(5, 5)
>>> .1
0.1
>>> 1.
1.0

Есть еще экспоненциальная форма записи чисел, которую такжн называют научная форма записи. Она обычно используется для ультрабольших или ультрамаленьких чисел. Такое выражение легко написать ручкой:

1000000(одинмиллион)=1.0106 1\,000\,000\:(один\:миллион) = 1{.}0 \cdot 10^6

Но на клавиатуре нет кнопок для ввода степени. Поэтому степень можно записать, добавляя к числу латинскую букву e (от слова exponent), и потом указать на какую степень числа 10 надо умножить первую часть (она еще называется мантисса). А если порядок с минусом, то разделить:

>>> 1.5e2
150.0
>>> -1.5e-2
-0.015

Степень пишется без пробелов и может содержать минус.

Операции с числами

Операция Результат Пример
x + y Сумма x и y 2+24
x - y Разница x и y 3-21
x * y Произведение x и y 2*36
x / y Деление x и y 5/22.5
x // y Целочисленное деление 7//32
x % y Остаток от x / y 8%32
-x умножение x на -1 -5-5
+x умножение x на +1, не меняет число +55
x ** y x в степени y 2**101024
pow(x, y) x в степени y pow(2, 10)1024
abs(x) модуль, абсолютное значение x abs(-10)10
int(x) конвертировать x в тип int int(2.7)2
float(x) конвертировать x в тип float float(5)5.0
round(x) банковское округление (1) x round(2.5)2, round(3.5) = 4

Сноски:

  1. Банковское округление работает более справедливо чем то, которое преподают в школе. В школе нам говорят, что половину (0.5) мы всегда округляем в большую сторону. Однако если бы вы целый день делали множество округлений на своем банковском счету по школьным правилам, то к концу дня банк задолжал бы вам кучу денег. А если бы в этот день с вашего счета только списывались округленные по школьным правилам суммы, то вы бы солидно переплачивали. Как же быть? Для восстановления справедливости банки приняли такое правило — всегда округлять до ближайшего четного числа. Например, 2.5 округляется до 2, а 3.5 — до 4. И никто не в обиде. XXX: перефразировать. (YYYY: перефразировала).

Все числа поддерживают стандартные математические операторы. Некоторые из них могут быть записаны непривычно, но в целом они соответствуют общепринятым стандартам записи математических операций на компьютере, в других языках программирования и в библиотеках.

Вы так же можете разделить число на 0, чтобы проверить, возможна ли такая операция на Python:

>>> 10/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

Но, с другой стороны, 0 в степени 0 будет равно 1. Потому что так принято в программировании.

>>> pow(0, 0)
1

Операции приведения к типу так же работают со строковыми выражениями, содержащими только символы, допустимые при написании чисел:

>>> s = '-10'
>>> type(s)
<class 'str'>
>>> int(s)
-10
>>> type(int(s))
<class 'int'>

Но попытка конвертировать текстовые символы даст сообщение об ошибке:

>>> ten = 'десять'
>>> int(ten)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'десять'

Встроенная библиотека math

В Python есть встроенная библиотека math которая расширяет список математических функций и делает Python самым мощным калькулятором, который толоько вам может понадобиться. В библиотеке есть еще несколько десятков функций, для более подробной информации лучше всего обратиться к стандартной документации.

Для общего развития можно попробовать быструю демонстрацию. Давайте импортируем библиотеку и воспользуемся парой функций.

>>> import math
>>> math.degrees(math.pi/2)
90.0

Теперь все функции библиотеки доступны с префиксом math.. Если вам часто приходится набирать функции, то можете импортировать их напрямую.

>>> from math import pi
>>> pi
3.141592653589793

Случайные числа

Случайные числа — частый спутник работы с числами в реальной жизни. И встроенная в Python библиотека random позволяет возвращать случайные последовательности или числа.

Вот некоторые стандартные ситуации, которые решаются с помощью библиотеки.

Подбросить кубик с 6 гранями:

>>> import random
>>> random.randint(1, 6)
5

Получить случайное целое число из диапазона от 10 до 20:

>>> random.randrange(10, 20)
13

Выбрать победителя из списка, например Instagram розыгрыша:

>>> x = ['a', 'b', 'c', 'd', 'e']
>>> random.choice(x)
d

Изменить порядок списка случайным образом. Например, если нужно перемешать карты:

>>> random.shuffle(x)
>>> x
['e', 'b', 'a', 'c', 'd']

Выдать случайное число с плавающей запятой от 0 до 1:

>>> random.random()
0.3098100567994543

Итог

Python — прекрасный инструмент для обработки цифровых данных. Вы можете использовать его для решения множества бытовых вопросов. Например, расчитать сколько налогов заплатить, сколько нужно стройматериалов или с какой скоростью должнен перемещаться супергерой, чтобы успеть прилететь из соседней галактики и спасти Землю.