Предисловие
Доброго времени суток, Хабр. Запускаю короткий курс статей, который охватывает ключевые навыки Python, необходимые для изучения Data Science. Данные статьи подойдут для тех, кто уже имел опыт в программировании и хочет добавить Python в свою копилку навыков.
Привет, Python!
Python был назван в честь популярного британского комедийного телешоу 1970-х "Летающий цирк Монти Пайтона", поскольку автор был поклонником этого телешоу.
Просто ради удовольствия попробуйте прочитать приведенный ниже код и предсказать, что он будет делать при запуске. (Если вы не знаете, это нормально!) Он приурочен скетчу Монти Пайтона про спам.
spam_amount = 0print(spam_amount)# Заказ спам, яйца, спам, спам, бекон и спам (еще 4 порции спама)spam_amount = spam_amount + 4if spam_amount > 0: print("But I don't want ANY spam!")viking_song = "Spam " * spam_amountprint(viking_song)
Output
0
But I don`t want ANY spam!
Spam Spam Spam Spam
Эта забавная программа демонстрирует многие важные аспекты того, как выглядит код Python и как он работает. Давайте подробнее рассмотрим код.
spam_amount = 0
Присвоение переменной: здесь мы создаем
переменную с именем spam_amount и присваиваем ей значение 0
используя =
, что называется оператором
присваивания.
Обратите внимание: если вы программировали на других языках (например, Java или C ++), вы могли заметить некоторые вещи, которые Python не требует от нас здесь:
нам не нужно объявлять
spam_amount
перед присвоением ему значениянам не нужно указывать Python, на какой тип значения будет ссылаться
spam_amount
. Фактически, мы даже можем переназначитьspam_amount
для обозначения другого типа вещей, таких как строка или логическое значение.
print(spam_amount)
Вызов функций: print
- это функция
Python, которая отображает на экране переданное ей значение. Мы
вызываем функции, добавляя круглые скобки после их имени и помещая
входные данные (или аргументы) функции в эти скобки.
# Заказ спам, яйца, спам, спам, бекон и спам (еще 4 порции спама)spam_amount = spam_amount + 4
Первая строка выше - это комментарий. В Python
комментарии начинаются с символа #
.
Далее мы видим пример переопределения. Переопределение значения
существующей переменной выглядит так же, как создание новой
переменной - по-прежнему используется оператор присваивания
=
.
В этом случае значение, которое мы присваиваем
spam_amount
, включает простое арифметическое действие
с его предыдущим значением. Когда он встречает эту строку, Python
оценивает выражение в правой части =
(0 + 4 = 4), а
затем присваивает это значение переменной в левой части.
if spam_amount > 0: print("But I don't want ANY spam!")viking_song = "Spam Spam Spam"print(viking_song)
Мы будем говорить об условных выражениях позже, но, даже если вы никогда раньше не программировали, вы, вероятно, можете догадаться, что тут происходит. Python ценится за его комфортность кода и простоту.
Обратите внимание, как мы указываем, какой код принадлежит
if
. "But I don't want ANY spam!"
выведется, только если spam_amount
положительный. Но
дальше (например, print (viking_song)
) код должен
выполняться несмотря ни на что. Как мы (и Python) это
различаем?
Двоеточие (:
) в конце строки if
указывает, что начинается новый блок кода. Последующие строки с
отступом являются частью этого блока кода. Некоторые другие языки
используют {
фигурные скобки}
для
обозначения начала и конца блоков кода. Использование в Python
значимых пробелов может удивить программистов, которые привыкли к
другим языкам, но на практике это приводит к более согласованному и
читаемому коду, чем языки, которые не требуют отступов блоков
кода.
Последующие строки, относящиеся к viking_song
, не
имеют отступа с дополнительными 4 пробелами, поэтому они не
являются частью блока кода if
. Мы увидим больше
примеров блоков кода с отступом позже, когда мы будем определять
функции и использовать циклы.
Этот фрагмент кода также является нашим первым знакомством со строками в Python:
"But I don't want ANY spam!"
Строки можно помечать двойными или одинарными кавычками. (Но поскольку эта конкретная строка содержит символ одинарной кавычки, мы можем запутать Python, пытаясь заключить ее в строку, если мы не будем осторожны.)
viking_song = "Spam " * spam_amountprint(viking_song)
Оператор *
можно использовать для умножения двух
чисел (3 * 3
равно 9), но, что довольно интересно, мы
также можем умножить строку на число, чтобы получить версию,
которая повторяется столько раз. Python разрешает несколько
маленьких трюков, подобных этому, где операторы типа *
и +
имеют разное значение в зависимости от того, к
чему они применяются. (Технический термин для этого -
перегрузка оператора)
Числа и арифметика в Python
Мы уже видели пример переменной, содержащей число выше:
spam_amount = 0
Число - неформальное название для такого рода вещей, но если мы
хотим быть более техническими, мы можем спросить Python, как он
описывает тип вещи, которым является spam_amount
:
type(spam_amount)
int
Здесь int
- сокращение от integer. Есть еще один
вид чисел, с которым мы часто сталкиваемся в Python:
type(19.95)
float
float
- это число с плавающей точкой, которое очень
полезно для представления таких вещей, как вес или пропорции.
type()
- еще одна встроенная функция, которую мы
встречаем (после print()
), и ее следует запомнить.
Очень полезно иметь возможность спросить Python к какому типу вещей
относиться это?.
Естественное желание действий с числами - выполнять
арифметические операции. Мы видели оператор +
для
сложения и оператор *
для умножения. Python также
покрывает остальные основные кнопки вашего калькулятора:
Оператор |
Название |
Описание |
|
Сложение |
Сумма |
|
Вычитание |
Разница |
|
Умножение |
Произведение |
|
Истинное деление |
Частное |
|
Деление с округлением |
Частное |
|
Модуль |
Целочисленный остаток от деления |
|
Возведение в степень |
|
|
Отрицание |
Противоположное к |
Одно интересное наблюдение заключается в том, что, в то время как ваш калькулятор, вероятно, имеет только одну кнопку для деления, Python может выполнять два вида. Истинное деление - это именно то, что делает ваш калькулятор:
print(5 / 2)print(6 / 2)
2.53.0
Это всегда дает нам float
.
Оператор //
дает результат, который округляется
вниз до целого числа.
print(5 // 2)print(6 // 2)
23
Вы можете придумать, где это будет полезно?
Порядок действий
В арифметике, которую мы изучали в школе, есть соглашения о порядке, в котором выполняются операции. В англоязычной литературе можно встретить технику запоминания порядка с помощью мнемоники, такой как PEMDAS - скобки, возведение в степень, умножение/деление, сложение/вычитание (Parentheses,Exponents,Multiplication/Division,Addition/Subtraction).
Python следует аналогичным правилам относительно того, какие вычисления выполнять в первую очередь. В основном они интуитивно понятны.
8 - 3 + 2
7
-3 + 4 * 2
5
Иногда порядок операций по умолчанию не соответствует нашему желанию:
hat_height_cm = 25my_height_cm = 190# Какой у меня рост в метрах в шляпе?total_height_meters = hat_height_cm + my_height_cm / 100print("Height in meters =", total_height_meters, "?")
Height in meters = 26.9 ?
Здесь вам пригодятся круглые скобки. Вы можете добавить их, чтобы Python вычислял подвыражения в необходимом вам порядке.
total_height_meters = (hat_height_cm + my_height_cm) / 100print("Height in meters =", total_height_meters)
Height in meters = 2.15
Встроенные функции для работы с числами
Функции min
и max
возвращают минимум и
максимум своих аргументов соответственно:
print(min(1, 2, 3))print(max(1, 2, 3))
13
Функция abs
возвращает абсолютное значение своего
аргумента:
print(abs(32))print(abs(-32))
3232
Помимо имен двух основных числовых типов Python,
int
и float
также могут вызываться как
функции, которые преобразуют свои аргументы в соответствующий
тип:
print(float(10))print(int(3.33))# Их даже можно вызывать для строкprint(int('807') + 1)
10.03808
Послесловие
На этом первая статься подошла к концу. Спасибо всем кто читал и уделял время. Также надеюсь, что вы вынесли какую-либо полезную информацию и научились чему-то новому. Продолжайте развиваться и узнавать новое! До скорых встреч.