Предисловие

Доброго времени суток, Хабр. Запускаю короткий курс статей, который охватывает ключевые навыки Python, необходимые для изучения Data Science. Данные статьи подойдут для тех, кто уже имел опыт в программировании и хочет добавить Python в свою копилку навыков.

Привет, Python!

Python был назван в честь популярного британского комедийного телешоу 1970-х "Летающий цирк Монти Пайтона", поскольку автор был поклонником этого телешоу.

Просто ради удовольствия попробуйте прочитать приведенный ниже код и предсказать, что он будет делать при запуске. (Если вы не знаете, это нормально!) Он приурочен скетчу Монти Пайтона про спам.

spam_amount = 0
print(spam_amount)

# Заказ спам, яйца, спам, спам, бекон и спам (еще 4 порции спама)
spam_amount = spam_amount + 4

if spam_amount > 0:
    print("But I don't want ANY spam!")

viking_song = "Spam " * spam_amount
print(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_amount
print(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 также покрывает остальные основные кнопки вашего калькулятора:

Оператор

Название

Описание

a + b

Сложение

Сумма a и b

a - b

Вычитание

Разница a и b

a * b

Умножение

Произведение a и b

a / b

Истинное деление

Частное a и b

a // b

Деление с округлением

Частное a и b, без дробных частей

a % b

Модуль

Целочисленный остаток от деления a на b

a ** b

Возведение в степень

a в степени b

-a

Отрицание

Противоположное к а

Одно интересное наблюдение заключается в том, что, в то время как ваш калькулятор, вероятно, имеет только одну кнопку для деления, Python может выполнять два вида. «Истинное деление» - это именно то, что делает ваш калькулятор:

print(5 / 2)
print(6 / 2)
2.5
3.0

Это всегда дает нам float

Оператор // дает результат, который округляется вниз до целого числа.

print(5 // 2)
print(6 // 2)
2
3

Вы можете придумать, где это будет полезно?

Порядок действий

В арифметике, которую мы изучали в школе, есть соглашения о порядке, в котором выполняются операции. В англоязычной литературе можно встретить технику запоминания порядка с помощью мнемоники, такой как PEMDAS - скобки, возведение в степень, умножение/деление, сложение/вычитание (Parentheses, Exponents, Multiplication/Division, Addition/Subtraction).

Python следует аналогичным правилам относительно того, какие вычисления выполнять в первую очередь. В основном они интуитивно понятны. 

8 - 3 + 2
7
-3 + 4 * 2
5

Иногда порядок операций по умолчанию не соответствует нашему желанию: 

hat_height_cm = 25
my_height_cm = 190
# Какой у меня рост в метрах в шляпе?
total_height_meters = hat_height_cm + my_height_cm / 100
print("Height in meters =", total_height_meters, "?")
Height in meters = 26.9 ?

Здесь вам пригодятся  круглые скобки. Вы можете добавить их, чтобы Python вычислял подвыражения в необходимом вам порядке.  

total_height_meters = (hat_height_cm + my_height_cm) / 100
print("Height in meters =", total_height_meters)
Height in meters = 2.15

Встроенные функции для работы с числами

Функции min и max возвращают минимум и максимум своих аргументов соответственно:

print(min(1, 2, 3))
print(max(1, 2, 3))
1
3

Функция abs возвращает абсолютное значение своего аргумента: 

print(abs(32))
print(abs(-32))
32
32

Помимо имен двух основных числовых типов Python, int и float также могут вызываться как функции, которые преобразуют свои аргументы в соответствующий тип:  

print(float(10))
print(int(3.33))
# Их даже можно вызывать для строк
print(int('807') + 1)
10.0
3
808

Послесловие

На этом первая статься подошла к концу. Спасибо всем кто читал и уделял время. Также надеюсь, что вы вынесли какую-либо полезную информацию и научились чему-то новому. Продолжайте развиваться и узнавать новое! До скорых встреч.