3.1 Числовые типы: int, float, complex
Python имеет несколько числовых типов, каждый из которых подходит для различных задач и обработки данных. Мы уже упоминали типы данных int, float, complex, а также булевы типы bool, которые являются подклассом целых чисел. Теперь разберем каждый из этих типов более подробно.
int (Целые числа):
Это, возможно, наиболее часто используемый числовой тип в Python. Целые числа могут быть положительными или отрицательными и не имеют десятичных знаков. Python поддерживает произвольную точность, что означает, что практически нет ограничений на размер чисел, которые вы можете обрабатывать, кроме ограничений памяти вашей машины.
float (Числа с плавающей точкой):
Эти числа используются для представления действительных чисел и могут содержать десятичные точки. Python реализует числа с плавающей точкой в соответствии со стандартом IEEE 754 double-precision, что дает точность примерно 15 десятичных цифр после запятой.
complex (Комплексные числа):
Комплексные числа имеют действительную и мнимую часть. И та, и другая, представляются числами с плавающей точкой. В Python для обозначения мнимой части используется суффикс j или J. Например, комплексное число можно создать так:
complex_number = 3 + 5j
bool (Булевы значения):
В Python True и False являются специализированными версиями целых чисел и функционируют как 1 и 0 соответственно. Это позволяет их использовать в арифметических операциях и других математических выражениях.
Арифметические операции:
Python поддерживает все основные арифметические операции, включая сложение, вычитание, умножение, деление, деление нацело, взятие остатка от деления и возведение в степень. Например:
- Сложение: 3 + 2
- Вычитание: 5 - 2
- Умножение: 2 * 3
- Деление: 7 / 2
- Деление нацело: 7 // 2
- Остаток от деления: 7 % 2
- Возведение в степень: 2 ** 3
Преобразование типов:
Мы уже говорили о преобразовании (или приведении) типов. Одни числа в другие можно переводить с помощью функций приведения типов, таких как int(), float() и complex().
Некоторые вопросы преобразования числовых типов мы уже рассмотрели ранее, другие рассмотрим более подробно в следующих лекциях.
3.2 Псевдослучайные числа
Иногда программист сталкивается с простыми, казалось бы, задачами: «отобрать случайный фильм для вечернего просмотра из определенного списка», «выбрать победителя лотереи», «перемешать список песен при тряске смартфона», «выбрать случайное число для шифрования сообщения». При этом каждый раз у него возникает очень закономерный вопрос: а как получить это самое случайное число?
Получить «настоящее» случайное число довольно-таки трудно. Вплоть до того, что в компьютер встраивают специальные математические сопроцессоры, которые умеют генерировать такие числа, с выполнением всех требований к «истинной случайности».
Поэтому программисты придумали свое решение – псевдослучайные числа. Псевдослучайные числа – это некая последовательность, числа в которой на первый взгляд кажутся случайными, но специалист при детальном анализе сможет найти в ней определенные закономерности. Для шифрования секретных документов такие числа не подойдут, а для имитации бросания кубика в игре – вполне.
Есть много алгоритмов генерации последовательности псевдослучайных чисел и почти все из них генерируют следующее случайное число на основе предыдущего и еще каких-то вспомогательных чисел.
Например, данная программа выведет на экран 1000 неповторяющихся чисел:
a = 41
c = 11119
m = 11113
seed = 1
def get_next_random():
global seed
seed = (a * seed + c) % m
return seed
for t in range(1000):
x = get_next_random()
print(x)
Кстати, мы говорим не о псевдослучайных числах, а именно о последовательности таких чисел. Так как глядя на одно число невозможно понять, случайное оно или нет.
Случайное число можно получить разными способами:
def get_random_number():
return 4 # это точно случайное число (z выкинул его с помощью кубиков), см. "Шутка про кубики"
3.3 Библиотека random
В Python есть встроенная библиотека random, с которой вам будет интересно поработать. Как вы уже, возможно, догадались по ее названию, с помощью этой библиотеки можно генерировать [псевдо]случайные числа.
Библиотека random, хоть и встроенная, все-таки является отдельной библиотекой, поэтому прежде чем использовать ее, нужно подключить к нашему коду. Делается это с помощью ключевого слова import. Пример:
import random
В библиотеке random есть много интересных методов, но сегодня мы познакомимся только с двумя из них: метод random() и метод randint(). Они выполняют похожие, но разные задачи:
Метод random.random():
Этот метод возвращает случайное число с плавающей точкой между 0.0 и 1.0. Числа генерируются равномерно в этом диапазоне. Это означает, что каждое число внутри интервала имеет одинаковую вероятность выбора.
import random
probability = random.random()
print("Случайная вероятность:", probability)
Метод random.randint(a, b):
Эта функция возвращает случайное целое число в диапазоне от a до b включительно. В отличие от random.random(), которая возвращает случайное число с плавающей запятой в диапазоне от 0 до 1, randint() используется, когда нужно выбрать целое число. Например, random.randint(1, 10) может вернуть любое целое число от 1 до 10, включая оба конечных значения.
import random
dice_roll = random.randint(1, 6) # Имитация броска игральной кости
print("Выпало число:", dice_roll)
Это очень полезные и интересные методы, так что пользуйтесь на здоровье.
3.4 Библиотека math
Ну, раз пошла такая пьянка, давайте познакомлю вас с еще одной интересной библиотекой. Это библиотека math. В ней содержатся основные математические функции и константы, такие как числа π и e.
И так же, как и библиотеку random, ее нужно импортировать перед использованием:
import math
Вот таблица с основными функциями и константами библиотеки math в Python:
| Функция/Константа | Описание |
|---|---|
| math.pi | Константа π, приблизительно равная 3.14159 |
| math.e | Основание натурального логарифма, приблизительно равно 2.71828 |
| math.sqrt(x) | Возвращает квадратный корень из x |
| math.exp(x) | Возвращает e в степени x |
| math.log(x[, base]) | Возвращает логарифм x по основанию base, если base указан; в противном случае возвращает натуральный логарифм. |
| math.cos(x) | Возвращает косинус x, где x указан в радианах |
| math.sin(x) | Возвращает синус x, где x указан в радианах |
| math.tan(x) | Возвращает тангенс x, где x указан в радианах |
| math.ceil(x) | Округляет число вверх до ближайшего целого |
| math.floor(x) | Округляет число вниз до ближайшего целого |
| math.factorial(x) | Возвращает факториал x |
Даже если вы не сильно любите математику и не собираетесь использовать эти функции в ближайшие 10 лет, тут есть как минимум три очень полезных:
sqrt()— квадратный корень из числаceil()— округление вверх до ближайшего целогоfloor()— округление вниз до ближайшего целого
Примеры:
import math
number = 9.7
rounded_up = math.ceil(number) # Округляет вверх, результат 10
rounded_down = math.floor(number) # Округляет вниз, результат 9
print("Округленное вверх число:", rounded_up)
print("Округленное вниз число:", rounded_down)
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ