2.Типы данных
В конце прошлого блока была рассмотрена следующая конструкция:
name = input("Как тебя зовут? ")
Она используется, чтобы записать введённые пользователем данные в переменную name.
В программировании постоянно возникает необходимость в сохранении и использовании каких-либо данных, для этих целей и используются переменные. Создать переменную просто, для этого необходимо написать следующую конструкцию: [имя_переменной] = [значение]
Мы задаем имя переменной, можно это сделать, использую кириллицу и не только, но настоятельно рекомендуется делать это, использую только латиницу. Затем задаем переменной какое-либо значение.
Остановимся на имени переменной чуть подробнее:
- Имя переменной может содержать только латинские буквы, числа и символ нижнего подчеркивания;
- Имя переменной не должно содержать пробелов;
- Имя переменной не должно начинаться с цифры;
- Регистр переменных важен: var и Var это разные переменные.
Поговорим о типах данных. Python различает разные типы данных и не даст, например, умножать строку на строку, с числами же мы можем выполнять разные операции, сложение, на пример.
Типы в Python и определенные ограничения на них защищают программы от случайных ошибок. Разберем подробнее некоторые типы.
Числа: int и float
Первые два типа - int (от слова integer) и float. int обозначает целое число (10, 256), а float - действительное (3.14, 10.591).
Для их вывода в отличии от строк не нужны кавычки:
print(6)
print(12.02)
Строка "10" и число 10, также как и "10.5" и 10.5 - разные вещи, хотя вывод через print()
у них один:
print(10) # 10
print("10") # 10
С числами можно выполнять разные операции:
- Сложение;
- Вычитание;
- Умножение;
- Деление;
- Возведение в степень;
- Целочисленное деление;
- Получение остатка от деления.
print(9 + 3.5) # 12.5
print(32.3 - 41.1) # -8.8
print(3.4 * 5) # 17.0
print(22 / 3) # 7.333333333333333
print(2 ** 5) # 32
print(23 // 10) # 2
print(23 % 10) # 3
У всех них есть приоритет выполнения, он такой же как в математике:
print(10 + 2 * 3.5) # 17.0
У операций целочисленное деление и получение остатка от деления приоритет как у деления и умножения.
Также мы можем использовать скобки:
print((10 + 2) * 3.5) # 42.0
При работе с переменными мы можем выполнять действия разными путями:
# 1 способ
n = 10
n = n * 2 + 2.5
print(n) # 22.5
# 2 способ
n = 10
n *= 2
n += 2.5
print(n) # 22.5
Строки
Тип str (от слова string) является типом строк в Python. Мы можем с ними проводить некоторые операции:
- Сложение строк (конкатенация);
- Умножение строки на целое число.
print("ab" + "cd") # abcd
print("ab" * 3) # ababab
Можем обращаться к строкам по индексам, чтобы достать отдельную подстроку (индексирование в Python начинается с 0, т.е. первому символу соответствует индекс 0, второму - 1 и т.д.):
greating = "Hello, World!"
Об остальном про строки будет рассказано в отдельном блоке.
print(greating[0]) # H
print(greating[5]) # ,
Списки
Тип list является типом списка в Python. Мы можем хранить в списке разные типы данных, даже сами списки:
l = [10, "abc", 4.23, []]
print(l) # [10, "abc", 4.23, []]
Со списками операции такие же как со строками:
l = [10, "abc", 4.23, []]
l += [12.5, "Hello"]
print(l) # [10, "abc", 4.23, [], 12.5, "Hello"]
l *= 2
print(l) # [10, "abc", 4.23, [], 12.5, "Hello", 10, "abc", 4.23, [], 12.5, "Hello"]
Можем обращаться к спискам по индексам, чтобы достать отдельный элемент:
l = [10, "abc", 4.23, [2, 5.0]]
print(l[1]) # "abc"
print(l[3]) # [2, 5.0]
Также можем изменять списки по индексам:
l = [10, "abc", 4.23, [2, 5.0]]
Об остальном про списки будет рассказано в отдельном блоке.
l[2] = "дробное число"
print(l) # [10, "abc", "дробное число", [2, 5.0]]
Множества
Тип set является типом множества в Python. Мы можем хранить в множестве разные типы данных (также как и в списках), особенностью множества является то, что в нем хранятся уникальные значения:
abc = {1, 3.0, 2, "abc", 2, "abc", 3}
Также вывод множества осуществляется рандомно, т.е. значения могут выводится в разном порядке.
print(abc) # {1, 2, 3.0, "abc"}
В рамках данного курса работа с множествами ограничивается информацией выше.
Словари
Тип dict (от слова dictionary) является типом словаря в Python. Его особенность в том, что мы можем сохранять данные в формате [ключ]: [значение]:
d = {1: "a", 2: "abc", "Hey": 20.5}
print(d) # {1: "a", 2: "abc", "Hey": 20.5}
Например ключу 1 в данном примере соответствует значение "a", а ключу "Hey" - значение 20.5.
Значениями могут быть любые типы данных, а ключами только неизменяемые: int, float, str, tuple.
В рамках данного курса работа со словарями не затрагивается.
Кортежи
Тип tuple является кортежем в Python. Проще говоря, это неизменяемый список, некоторые действия, которые можно проводить со списками, нельзя проделать с кортежами:
d = ["a", 15]
В рамках данного курса работа с кортежами не затрагивается.
l[1] = 10
print(l) # ["a", 10]
s = (1, 2.0)
s[1] = 10 # TypeError: 'tuple' object does not support item assignment
Логическое значение
Тип bool (от слова boolean) является логическим значением в Python. Принимает только значения True или False.
b = True
Преобразование из одного типа в другой
Для начала рассмотрим следующие конструкции создания различных переменных с разными типами данных:
a = str() # то же самое a = ""
b = int() # то же самое b = 0
c = list() # то же самое с = []
d = set() # нет альтернативы
e = dict() # то же самое e = {}
f = tuple() # то же самое f = ()
g = bool() # то же самое g = False
Чтобы преобразовать один тип в другой мы используем конструкцию [тип]([значение]), но не все типы переводятся из одних в другие:
d = {1: "a", 2: "abc"}
num = int(d)
# TypeError: int() argument must be a string, a bytes-like object or a real number, not 'dict'
s = 13.5
print(int(s)) # 13
l = [1, 2, 5,
2.0, "abc", 1, 2,
5]
print(set(l)) # {1, 2, 5, "abc"}
При операциях чисел типов int и float происходит неявное преобразование int к float, это единственное неявное преобразование типов в Python.
В остальном неявное преобразование не используется, чтобы избежать непредсказуемого поведения программы:
a = 2
b = 1.5
print(a + b) # 3.5
c = [1.1, 4]
d = {2, "a"}
print(c + d) # TypeError: can only concatenate list (not "set") to list
Рассмотрим следующую конструкцию:
x = int(input('Введите первое число'))
y = int(input('Введите второе число'))
# 1 способ
print(x, '+', y, '=', x + y)
# 2 способ
print(str(x) + ' + ' + str(
y) + ' = ' + str(x + y))
В первых двух строках кода мы попросили пользователя ввести число, после чего с помощью int()
преобразовали значения
переменных x и y к целым числам (по умолчанию мы с помощью input получаем строки (данные типа str).
В 1 способе вывода мы передаем функции print несколько значений, которые она выводит и делит их пробелами, т.к. мы поделили значения запятой. В 2 способе вывода мы передаем функции print строку, которая получена путем сложения (конкатенации) нескольких строк, в этом случае мы вместо "+" записали " + ", чтобы сохранить красивый вывод, также применили функцию str, чтобы привести переменные к строковому типу.
Стоит также упомянуть преобразования любых типов к логическому значению (тип bool). Преобразования просходят, исходя из следующей логики:
-
Тип int. Приводится к False, если значение 0, в ином случае приводится к True
print(bool(0)) # False
print(bool(15)) # True
print(bool(-3)) # True -
Тип str. Приводится к False, если значение строки "" (пустая строка), в ином случае приводится к True
print(bool('')) # False
print(bool("Hello")) # True
print(bool(" ")) # True, пробел не является пустой строкой -
Типы, которые предназначены для хранения разных данных (list, tuple, dict, set).
Если данный тип является пустым (для списка []), то приводится к False, в ином случае приводится к True.
a = {}
b = [0]
c = [[]]
print(bool(a)) # False
print(bool(b)) # True
print(bool(c))
# True, в списке есть другой список, хоть и пустой, но он делает основной список непустым