Переменные и типы данных
Переменные - это основные строительные блоки любого языка программирования, в том числе и Python. Они хранят данные, с которыми впоследствии производятся вычисления. В общем случае, при старте скрипта переменные наполняются начальными значениями. Затем в ходе выполнения программы эти значения меняются и по завершении программы становятся базой для вычисления итоговых значений, т.е. тех, ради которых скрипт и запускался. В Python все является объектом, в том числе элементарные числа и строки. Базовых типов данных несколько: строки, числа и логические значения. В данном уроке мы с ними познакомимся, а также потренируемся выполнять простые вычисления.
Переменные и числа
Переменные - основные строительные блоки в Python. В них содержатся значения, которые используются программой для получения необходимого результата.
Объявляя переменную и инициализируя ее начальным значением salary = 520000 , мы создаем ее в памяти и можем использовать в дальнейшем коде. После выполнения этой строки Python будет знать о существовании переменной salary и ее начальном значении, а именно 520000 . Очевидно, что до инициализации использовать переменную нельзя, ведь мы ее еще не создали.
# создаем переменные (целые числа)
salary = 520000
cash_bonus = 120000
to_be_paid = salary + cash_bonus
print(salary, cash_bonus, to_be_paid)
С переменными можно производить любые арифметические вычисления: складывать, делить, умножать, вычитать и т.п. Все как в элементарной математике: Python, видя переменную в коде, ищет ее значение и подставляет его, затем, когда выражение становится вычислимым, производит вычисление всего выражения. Например: после подстановки значений salary + cash_bonus превращается в 520000 + 120000 , что является уже вычислимым выражением. Складывая цифры, Python получает 640000, что затем записывается в переменную to_be_paid .
Дробные числа
Пока что мы имели дело только с целыми числами. Но Python может работать и с дробными числами (десятичными дробями).
Пожалуй, дробные числа встречаются в реальной жизни чаще, чем целые.
# создаем переменные, дроби
data_analyst_salary = 550000
usd_exchange_rate = 97.3
usd_salary = data_analyst_salary / usd_exchange_rate
print('Зарплаты аналитиков в долларах и рублях')
print(data_analyst_salary, usd_salary)
Логические переменные:
Существует особый тип переменной - логический. Он содержит всего два значения: True или False. Для чего это нужно:
✅ для моделирования ситуации "да - нет", "есть сигнал - нет сигнала", "есть ошибка - нет ошибки";
✅ для комбинирования логических выражений, чтобы затем их вычислить;
✅ для использования в операторе if - else, мы рассмотрим это в лекции , посвященной этому оператору.
Для того, чтобы лучше понять вычисления с логическими значениями лучше всего подключить здравый смысл: мы часто встречаем такие вычисления в реальной жизни. Например, готов к поездке если есть машина ИЛИ есть велосипед. Это логично, ведь чтобы куда-то поехать нужен транспорт, не важно какой. Если нет ни машины, ни велосипеда, то куда-то поехать не получится, разве что дойти пешком.
like_python = True
ready_to_study = True
is_motivated = True
# логическое И
will_get_job = like_python and ready_to_study and is_motivated
print("Я получу работу? ", will_get_job)
# логическое ИЛИ
have_car = True
have_bycicle = False
ready_to_ride = have_car or have_bycicle
print("Готов к путешествиям? ", ready_to_ride)
# логическое НЕ (not)
are_practising = False
print("Я не занимаюсь?", not are_practising)
Преобразования типов
Данные можно преобразовывать из одного типа в другой: строки в числа и наоборот и т.п. Это пригодится, когда данные загружаются из внешних источников: как правило, они представлены в виде строк.
Обращаю внимание на метод is_numeric:
✅ Это - не функция, это - метод строкового объекта. Об этом подробнее поговорим в разделе, посвященном объектно-ориентированному программированию (ООП);
✅ метод is_numeric работает на том объекте, на котором он вызывается, т.е. который стоит слева от точки;
✅ метод is_numeric не идеален и плохо работает с отрицательными числами. Отрицательное число он не считает числом, т.к. в нем присутствует знак "-". Если вы с этим столкнулись, рекомендую пропустить, мы напишем свою версию этого метода в разделе, посвященном работе со строками.
# string to int
salary_str = "6578900"
n = int(salary_str)
print(n+1000000)
# int to string
money = "18194343"
print("Money on my bank account: " + str(money))
# float to string:
pi = float("3.14")
print(2*pi)
# bool to string
print("Boolean type conversions:")
print(str(True))
print(bool("True"))
# check string is actually a number
yearly_salary = "7205679"
print(yearly_salary.isnumeric(), "Данные - число")
print("7205679 rub".isnumeric(), "Это - не число")
Строки
Строки - это один из фундаментальных и самых часто используемых типов данных в анализе данных. Все просто: большинство данных представлено в строковом виде. Ввиду особой важности строк мы посвятим им целый раздел в рамках нашего курса, а пока изучим основы.
Код ниже показывает как строки можно создавать и склеивать:
✅ создается строковая переменная точно также как и числовая или логическая и любая другая: объявили переменную и инициализировали ее начальным значением;
✅ строки могут записываться в одинарных и двойных кавычках - на ваш выбор. Сделано это в том числе и для того, чтобы можно было без всяких ухищрений обрабатывать кавычки в рамках самой строки: ' моя строка с "кавычками" ' ;
✅ Чтобы склеить строки нужно воспользоваться оператором "+" или интерполяцией строк (f - строки);
# создаем переменные-строки
first_name = "Александр"
middle_name = "Сергеевич"
last_name = "Пушкин"
poet_name = first_name + " " + middle_name + " " + last_name
print("Любимый поэт")
print(poet_name)
# интерполяция строк
greatest_poet = f'{first_name} {middle_name} {last_name}'
Интерпретатору все равно, какие кавычки вы используете и предпочитаете ли вы сложению строк интерполяцию. Используйте то, что удобнее вам.
Пустые значения и None
Как моделировать отсутствие значения в переменной? Ведь чтобы использовать переменную, ее необходимо сначала объявить. Как показать, что значение пока не установлено? Для этого используется ключевое слово None .
Это - не сугубо теоретическая проблема. В программировании полно ситуаций, когда начальное значение переменной будет получено только когда скрипт начнет работать. Например, для строковой переменной. Как показать, что значения пока нет? Пустая строка? Но пустая строка - это данные. Поэтому в Python есть специально зарезервированное значение None , которое не связано ни с каким типом. Оно обозначает, что данная переменная ничего не содержит.
# Пустые значения None
bonus = 340000
passed_review_bonus = 340000
failed_review_bonus = None
if bonus == passed_review_bonus:
print("Премия получена, т.к. ревью пройдено успешно")
if failed_review_bonus is None:
print("В этом квартале ты не старался, но зп и так высокая")
# для чего это нужно?
my_yearly_gadgets_spending = 1000000
gadgets_count = 0
per_gadget_price = None
if gadgets_count != 0:
per_gadget_price = my_yearly_gadgets_spending / gadgets_count
if per_gadget_price is not None:
print('Средняя цена за товар:', per_gadget_price)
else:
print("Цена не определена, число товаров нулевое")
if per_gadget_price is None:
print("Ошибка в исходных данных")
Обратим внимание, что проверка на равенство None осуществляется как is None - считаем, что это - правило хорошего тона, закрепленное в стандарте PEP8 .
Полезные математические функции
Дадим несколько полезных функций, в основном, они касаются округления. Сейчас цель - еще раз напомнить себе о том, что функции - важная часть языка программирования:
✅ функция - это блок кода, некий черный ящик, который принимает на вход данные, перерабатывает их и возвращает на их основе новое значение. В частности, функция round принимает на вход два параметра и возвращает округленное число. Как на самом деле работает эта функция мы не знаем, думаю, детали ее реализации будут интересными только узкому кругу разработчиков. Мы о ней знаем только то, что она, приняв число, возвращает округленное число. И это - новый уровень в программировании, когда мы можем с помощью лишь одной конструкции (функция) делать весьма сложные вещи даже не осознавая, что под капотом.
from math import sqrt, ceil, floor
# ---- Полезные математические функции ----
print('Квадратный корень:', sqrt(25))
print("Возведение в степень:", 4 ** 3) # 4 * 4 * 4
# тоже самое, что и квадратный корень
print("Возведение в дробную степень:", 64 ** 0.5)
# округлить:
print("Округлить до целого: ", round(1.23456))
print("Округлить до определенного числа знаков (до 2-х в данном случае) после запятой: ",
round(10 + 2 / 3, 2))
print(f"Округлить вверх {ceil(2.28)} и вниз {floor(5.64)}")
Домашнее задание
Решите домашнее задание . Задачи аналогичные тем, что были рассмотрены в видео. Задачи базовые, если для вас это легко - отлично, переходите к другим темам.