JavaRush /Курсы /Модуль 1: Python Core /Работа с числовыми типами

Работа с числовыми типами

Модуль 1: Python Core
4 уровень , 2 лекция
Открыта

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)              
2
Задача
Модуль 1: Python Core, 4 уровень, 2 лекция
Недоступна
Математика 8 класса
Математика 8 класса
2
Задача
Модуль 1: Python Core, 4 уровень, 2 лекция
Недоступна
Случайный середнячок
Случайный середнячок
Комментарии (26)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Serg Shcherbak Уровень 7
7 июня 2026
import random count = 0 countdown = 10 for i in range(countdown): x = random.randint(1, 100) count += x result = count / countdown print(result)
Pan Game Уровень 64
10 мая 2026
Всем привет, так решать не надо. Генератор списков это хорошо, но в одну строку - плохо.

import random

print(sum([random.randint(1, 100) for _ in range(10)]) / 10)
Олег Сычев Уровень 9
10 мая 2026
Случайный середнячок решил так: random_digital = [random.randint(1, 100) for i in range(10)] general_sum = 0 for digital in random_digital: general_sum += digital general_sum = general_sum / 10 print(general_sum)
30 апреля 2026
блин а я записал как: for i in range(10): a.append(random.randint(1,100) а люди вон еще короче пишут, красота
Nevinash #nevinash Уровень 7
31 марта 2026
плохо конечно что решение включает в себя не совсем пройденный материал, а немного впереди. у многих людей возникнут вопросы. Если у кого-то возникли вопросы почему всё решилось одной строкой (я про цикл) , не переживайте дальше нам расскажут (обязаны рассказать) про то как фигачить циклы в одной строке чтобы было и красиво и читаемо.
Владимир Уровень 25
12 апреля 2026
Согласен. Посмотрел решение и как бы такого материала ещё не было пройдено. Странно конечно.
Олег Сычев Уровень 9
10 мая 2026
По опыту с курсом Java на этом ресурсе (да и не только) - могу сказать, что нас сразу приучают к реальной работе. Если вы пойдете в разработку - там очень частое явление, сделай то, не знамо что, не знамо как, но у тебя 2 часа что б все сделать. Порой бывает еще жестче - знаешь Java или Python, а тебе дают проект на C++, ничего не знаем - до вечера надо сделать))) И сейчас, в эпоху нейросетей - это звучит не так страшно. А вот когда такие задачи прилетали, когда нейросетей не было... Или еще веселее, когда нейросети есть, но они запрещены к использованию на работе))) Вот тут-то самое веселье.
Олег Жужнев Уровень 5
24 февраля 2026
А можно по подробнее объяснить строку 3 в правильном решении: numbers = [random.randint(1, 100) for _ in range(10)] Как метод random оказался в квадратных скобках цикла? Что означает нижнее подчеркивание for _ in и как это выражение здесь оказалось, если во всех примерах лекции это отдельная строка. Максимально подробно, как для гуманитариев. Спасибо!
EvgenyXIV Уровень 31
7 марта 2026
Олег, это может быть материалом следующих лекций - подсказки здесь некорректны. В квадратных скобках так называемый "генератор списков" - в объект numbers сохраняет список из 10 случайных чисел. Это для сокращения и удобочитаемости кода...
Nevinash #nevinash Уровень 7
31 марта 2026
я не совсем корректно могу выражаться, точно объяснят дальше. но numbers = [random.randint(1, 100) for _ in range(10)] здесь записывается в numbers каждый раз значение random.randint(1, 100) для простого цикла for _ in range(10) , где _ это вместо i (там может быть что угодно). то есть эту строку numbers = [random.randint(1, 100) for _ in range(10)] можно переписать примерно вот так numbers0 (когда _ = 0) = [random.randint(1, 100)] numbers1 (когда _ = 1) = [random.randint(1, 100)] numbers2 (когда _ = 2) = [random.randint(1, 100)] ... numbers9 (когда _ = 9) = [random.randint(1, 100)] то есть вы получается 10 рандомных чисел в диапазоне 1 - 100 и записываем его в список (с списком могу ошибаться)
Anonymous #3583872 Уровень 7
25 сентября 2025
Не принимает никакое решение во 2 задаче.Я уже начал думать , что я чёт не понимаю, перерыл кучу инфы, написал разными способами и в конечном итоге пришёл к готовому решению, но обработчик не работает. Кучу времени просрал, но хоть в теме разобрался:)
Anonymous #1598703 Уровень 11
5 августа 2025
Зачем так нужна функция округления вниз, если преобразование к int делает то же самое?
Stepan Vorobyev Уровень 7
27 августа 2025
Предположу, что это необходимо, когда нужно отбросить знаки после запятой, не меняя тип данных
Vanil'ka Уровень 25
22 июля 2025
Забыл про генераторы совсем. Использовал append() 😅
alex_us Уровень 20
9 апреля 2025
При выполнении задачи Математика за 8 класс в плагине (без проверки) - бесконечно запрашивает ввод числа. Поправьте