Переменные и вывод информации¶
Автор(ы)
Суть переменных в Python¶
Настало время приступить к изучению непосредственно Python, ведь по прошествии пары лекций об языке программирования и не говорили вовсе! Начнем со знакомой всем по школьным карандашам формулы \(E=mc^2\). По ней можно вычислить полную энергию физического объекта \(E\) с помощью известной массы объекта \(m\) и константы \(c\). Эта постоянная, указывающая на скорость света в вакууме, используется настолько часто, что для нее выделили отдельное обозначение в виде буквы латинского алфавита, как и для многих других аналогичных величин. Если в формуле встречается \(c\) (в известном контексте), то вы всегда уверены, что именно нужно подставить при расчетах.
Этот пример полностью описывает концепцию переменных в языках программирования, и Python не исключение. Запись \(x = 3\) означает, что везде по тексту далее под иксом подразумевается именно тройка, и ничего другого (пока не будет введено новое определение). Этой же логике подчиняется Python. Сначала указывается имя переменной, а затем – ассоциируемое с ней значение.
Пример кода выше иллюстрирует сразу несколько базовых концепций, которые нужно запомнить:
- В объявлении переменной нет ничего сложного. Синтаксис и правила интуитивно понятны: это можно делать как в физике/математике, как в учебниках и статьях.
#означает комментарий, то есть произвольный текст, который не воспринимается Python (все до конца строки кода полностью игнорируется). Служит исключительно для создания подсказок в коде, объяснения происходящего, то есть для удобства.- Числа могут быть целыми и вещественными. Разряды в целых числах для удобства визуального восприятия можно разделять нижней чертой.
- Значение переменной может быть вычислимым, то есть являться производной от других переменных (как \(E\), ведь это результат перемножения). На самом деле значение вычисляется в момент объявления переменной (при сложной формуле расчета процесс может занимать некоторое время).
- Операция возведения в степень реализуется с помощью
**. - В качестве названия переменных можно использовать буквы и цифры, а также некоторые символы. Однако имя переменной не может начинаться с цифры.
- Переменные можно переопределять (и даже менять тип). Однако старое значение в этом случае будет безвозвратно утрачено. В данном примере после выполнения последней строчки нельзя установить, чему было равно \(m\) до того, как переменной было присвоено значение дюжины.
Если говорить менее строго и более абстрактно, то переменная – это контейнер (или коробка), в котором что-то лежит, и на самой коробке на приклеенном листочке бумаги указано содержимое. Чем понятнее надпись, тем легче найти и использовать объект (поэтому переменные с названием из одной буквы воспринимаются плохо, особенно если таких переменных очень много).
Типы переменных¶
В листинге кода выше важно заметить, что существует разница между двумя типами численных переменных: целые и вещественные. При сугубо математических расчетах и арифметических операциях тип переменной не имеет значения. Однако для некоторого функционала нужно быть аккуратным. Поговорим подробно об этом в следующих лекциях, а пока стоит запомнить, что вещи, которые необходимо посчитать – в том числе и длину чего-то счетного – должны быть целочисленными (как и в жизни: первый, второй, третий ...).
Внимание
Целочисленный тип называется int (от Integer), вещественный – float. Эти типы можно переводить из одного в другой. При переводе вещественного числа в целое теряется часть информации.
Тип переменной – и это относится не только к числам, но и к любому объекту – можно узнать с помощью функции type. Для вывода информации используется функция print. Что именно представляет собой функция рассмотрим в более поздних лекциях, пока стоит думать об этом как о некотором объекте, который зависит (рассчитывается) от других объектов и выдает некоторый результат. Для передачи аргументов используются круглые скобки (аналогично математике: \(y = F(x)\)). Давайте скомбинируем эти знания и рассмотрим пример:
Упражнение
Внимательно проанализируйте код выше – в нем продемонстрирован базовый синтаксис преобразования типов и вывода информации.
Легко увидеть подтверждение высказанных ранее тезисов: second_variable действительно потеряла часть информации (дробную часть числа), которую нельзя вернуть, если преобразовать переменную обратно во float. Преобразование типов в языках программирования называется приведением (типов, то есть привести одно к другому, а не из-за страшилок про духов).
Арифметические операции с числами¶
Математика Python максимально близка к естественной: +, -, * и ** (рассмотренное ранее возведение в степень) работают в точности как ожидается. С делением / есть нюанс: возвращаемое значение всегда вещественное.
Замечание
Обратите внимание, что операции не изменяют переменную саму по себе (то есть операция a + b не меняет ни a, ни b). Чтобы сохранить получаемое значение, нужно присвоить его некоторой переменной (в примере выше это c). Если хотите изменить непосредственно саму переменную, то можно переприсвоить ей значение на основе расчета: a = a + b или c = c + 12.
Даже несмотря на то, что пример с делением числа на само себя очевиден (всегда получается единица, кроме деления на нуль), будет выведено вещественное значение. Сами же вещественные значения можно складывать, вычитать, умножать и возводить в степень как с целыми, так и с вещественными числами (и наоборот). Если в таком выражении используется хотя бы одна float-переменная, то и результат будет не целочисленным. Однако:
Это практически все тонкости, которые необходимо знать, чтобы не совершать базовые ошибки.
Примечание
Скорее всего, появился вопрос относительно расстановки пробелов в коде. Обязательно ли соблюдать такой синтаксис? Нужно ли ставить пробелы до и после знаков операций? На самом деле нет: это делается исключительно для удобства чтения кода и настоятельно рекомендуется не удаляться от стандартов языка. Код ниже выполнится без ошибок, однако ухудшается читаемость:
Строковые переменные¶
Разобрались в том, как описывать и хранить числа, как производить арифметические расчеты. Базовый математический язык освоен, но хочется общаться словами! Конечно, Python позволяет это делать. Благодаря строковым переменным можно хранить и соединять текстовую информацию:
В примере рассмотрено три способа создания текстовых переменных. Первые два не отличаются между собой с точки зрения Python, то есть неважно, используются одинарные кавычки ' или двойные ". Однако стоит понимать, что если строка содержит в себе такой символ, то кавычка должна быть изменена:
File "<ipython-input-25-7bba44e87ae0>", line 1
error_string = 'Chillin' kid'
^
SyntaxError: invalid syntax
Механизм ошибки таков, что Python неясно: строчка намеренно закончена и дальше идет какая-то команда, или же строчка продолжается. В обоих случаях нужно сменить способ создания строки – и тогда все будет хорошо:
Если необходимо сохранить какой-либо объемный текст или сообщение, можно воспользоваться мультистрочным объявлением переменной, как в первом примере блока.
Строки можно объединять для удобства вывода информации. Склеивание строк называется конкатенацией.
- Обратите внимание на пробел между числом и точкой в первом случае. Они добавлены автоматически функцией
print– это сделано для того, чтобы разные объекты при последовательном выводе не «склеивались» друг с другом. Во втором случае этого не происходит, так как напрямую склеиваются строки и только затем передается результат конкатенации на печать вprint.
Внимание
Будьте аккуратны со сложением строк. Объединение строк "3" и "5" даст результат "35", а не 8 – и тип результирующего значения будет строковый. Сложить строку и число нельзя: получите ошибку и никакого приведения типов не произойдет. Здесь возникнет двусмысленность – нужно привести число к строке и затем сконкатенировать или же строку к числу (а вдруг это невозможно?), после чего сложить.
Упражнение
Попробуйте в объединить строковые, целочисленные и вещественные переменные в разных комбинациях. Разберитесь, что означает ошибка, которая будет выведена в случае, если не делать приведение типов (то есть без str в str(result)).
Но на практике это не совсем удобно, поэтому в Python придумали f-строки. Их суть в том, что переменная из кода напрямую подставляется (с автоматическим приведением типа к строке) в саму строку! Вот:
Для объявления f-строки нужно
- использовать одинаковые кавычки на концах текста
- указать литеру
fперед самой строкой - обрамить название конкретной переменной (
resultв данном случае) в фигурные скобки.
Когда переменная одна, а также нет текста после её использования, то выгода F-строк не так очевидна (относительно простого print(some_string, some_variable)). Однако представьте, что нужно вывести координаты точки в трехмерном пространстве, значение времени, параметры системы и значение некоторой функции от всех переменных выше!
В точке с координатами X=12.1, Y=0, Z=13 значение функции равно 0.0. Состояние системы указано на момент времени t=30.113412
Что узнали из лекции¶
- Переменные – это «контейнеры», в которые можно что-то положить и дать название.
- Математика в
Pythonне имеет сложных правил, процесс вычислений максимально интуитивен. - Арифметические операции могут менять тип результирующей переменной.
type(),print()– базовые функции, с помощью которых можно делать самопроверки по ходу написания кода.- Сменить тип переменной можно вызовом функций
int(),float(),str(). - Строки могут обрамляться как
', так и"(но этих символов не должно быть внутри текста). f-строки облегчают комплексный вывод, содержащий как текст, так и переменныеPython(и автоматически приводит типы).
