Базовые типы данных
В Python есть несколько встроенных базовых типов данных. Вот самые главные для нас сейчас:
Строка (str) — тут все понятно, это любые слова и фразы.
Целое число (int), например, 5.
Дробное число (float), например, 1.5
Булевые (bool) — тут придется дать определение.
Булевые данные — тип данных в информатике, принимающий два возможных значения, иногда называемых истиной (true) и ложью (false).
Введем в нашем файле несколько примеров с этими типами данных и запустим его:
print("Впереди" + " большие " + "неожиданности")
print(7 == 5, 42 > 13, 144**(1/2))
print(2 * 7 - 10 > 2**4)
Здесь почти все операции должны быть более-менее понятны, за исключением == (это сравнение) и оператор ** для возведения в степень.
Еще один часто встречающийся арифметический оператор — это операция % для взятия остатка от деления на число.
z = 42
print("Число z четное?", z % 2 == 0)
Переменные
Если какая-то величина используется многократно в коде, обычно удобно ее обозначить как переменную и использовать дальше ее имя. Например, в коде, где переменная может использоваться в разных местах и меняться:
a = 20
print(a)
print((a * 10 - 5) / (15 + a))
a = 40
print(a * 14 < 1000)
Названия переменных могут быть любыми, кроме специально зарезервированных Python слов (например, нельзя создать переменную с именем True). В версии 3.7 таких слов всего 35, и это в основном базовые операторы языка. Помимо символов алфавита, в названии переменной могут быть еще цифры (только не на самом первом месте) и символ подчеркивания. Можно даже использовать любые юникод-символы для названия, хотя так лучше не делать из этических соображений.
Например, в Python такой код будет валидным (увы), но не очень правильным для работы:
зачем = "затем" print(зачем)
Взаимодействие переменных
В отличие от некоторых других языков программирования, в Python переменная одного типа, попадая в выражение с переменной другого типа, не всегда старается спасти положение и сконвертироваться к общему формату. Такое происходит неявно только для числовых типов (float и int):
x = 12
y = 14.0
z = x + y # int + float -> float
Чтобы повлиять на это неявное поведение, можно явно дать понять Python, что мы от него хотим. Для этого надо использовать название типа как функцию и передать ей переменную, которую мы хотим преобразовать. В примере выше:
x = 12
y = 14.0
z_f = x + y # int + float -> float
z_i1 = x + int(y) # int + int -> int
# int(int + float) -> int(float) -> int
z_i2 = int(x + y)
В целом такое преобразование типов приходится делать не так часто. Например, если вам нужен элемент в середине списка, тогда можно взять длину списка и поделить на два, но получится дробное число, а дробное число не может быть индексом, поэтому надо будет преобразовать его к int.
Чаще бывает необходимость в преобразовании элементов от строки к числу и наоборот. Например, когда пользователь вводит в веб-форме число или мы читаем строки из файла, но знаем, что там подразумеваются числа.
y = "2000"
is_leap = (int(y) % 4) == 0
print("Год " + y + " является високосным?", is_leap)
Мы поговорим про сложение строк в следующем блоке. Сейчас нас больше всего интересует вторая строка, где мы преобразовываем строку "2000" в целое число, считаем остаток от деления получившегося числа на 4 и сравниваем это с нулём.
Мы упоминали еще один важный тип переменных — булевый. Это такие переменные, у которых всего два типа: True (Истина) и False (Ложь). При конвертации из других типов важно помнить следующие правила:
1. Пустая строка преобразуется в False.
2. Любая непустая строка будет True.
3. Любое число (дробное или целое, не играет роли) будет True, если это не ноль. Ноль всегда False.
4. Если мы конвертируем bool в число, то истина станет 1, а ложь 0.
5. str(True) будет 'True', а str(False) будет 'False'.