Тема
Python. Преобразование базовых типов
Преобразование базовых типов

Преобразование типов, или же casting - очень важный инструмент в программировании. Он позволяет получать нужные нам типы данных из других типов.
Часто это нужно после ввода данных из консоли, так как функция input() всегда возвращает строку, о чем мы говорили на прошлом уроке. Но помимо этого могут быть и другие случаи, когда нам необходимо преобразовать один тип данных в другой.
Виды преобразований
Общая схема преобразования всегда выглядит так:
python
результат = нужный_тип(значение_другого_типа)Давайте разберемся с основными видами преобразований.
Целые числа
Целые числа - самый распространенный тип в задачах. И очень часто нам нужно получать их от пользователя.
Из строки (str)
Давайте повторим пример с предыдущего урока.
python
a = input("Введите первое число: ")
b = input("Введите второе число: ")
print(a + b)В данном случае произойдет конкатенация двух строк. Давайте попробуем изначально преобразовать их в целые числа, добавив int() перед ними.
python
a = int(input("Введите первое число: ")) # не забудьте закрыть скобку
b = int(input("Введите второе число: "))
print(a + b)Если все сделано правильно, то числа начнут складываться математически, а не конкатенироваться, как раньше. Это потому, что переменные a и b теперь имеют тип int.
Определение
int(x) - преобразует x в целое число, если это возможно.
Из чисел с плавающей точкой (float)
Также в int можно переводить числа с плавающей точкой. В таком случае дробная часть будет отброшена (но не округлена).
python
a = 3.14
b = 3.99
print(int(a)) # 3
print(int(b)) # 3 (при округлении было бы 4)Но обратите внимание на то, что получить int из строки, внутри которой будет содержаться число с плавающей точкой не получится.
python
a = '3.14'
print(int(a)) # ValueErrorТо же самое произойдет, если в строке будут любые символы, помимо цифр от 0 до 9.
python
a = 'abc'
print(int(a)) # ValueErrorИз логических значений (bool)
Также в int можно преобразовать и тип bool, что встречается довольно редко. True тождественно 1, а False соответственно 0.
python
a = True
b = False
print(int(a), int(b)) # 1 0Из других систем счисления
При преобразовании в int, можно перевести число из почти любой (с основанием от 2 до 36) системы счисления в десятичную. Это может быть очень полезно в некоторых заданиях на экзаменах ОГЭ и ЕГЭ а также в реальных задачах с низкоуровневым программированием.
python
a = '1010'
print(int(a, 2)) # 10
b = 'ff'
print(int(b, 16)) # 255
c = '1'
print(int(c, 37)) # ValueErrorЧисла с плавающей точкой
Для получения чисел с плавающей точкой, по аналогии с целыми числами, используется float().
Определение
float(x) - преобразует x в число с плавающей точкой, если это возможно.
Из строки (str)
Давайте рассмотрим пример нахождения индекса массы тела:
python
height = float(input("Введите свой рост в метрах: "))
weight = float(input("Введите свой вес в килограммах: "))
bmi = weight / (height ** 2) # вес / рост в квадрате
print(bmi)Обратите внимание на то, что при вводе мы должны указывать рост и вес через точку, а не через запятую. Запятая в Python чаще всего обозначает разделение элементов.
python
x = "3,14"
print(float(x)) # ValueErrorИз целых чисел (int)
Также в float можно преобразовать и целые числа. В таком случае к числу добавится дробная часть в виде нуля.
python
a = 3
print(float(a)) # 3.0Из логических значений (bool)
Аналогично целым числам, в числа с плавающей точкой можно преобразовать и логические значения. True тождественно 1.0, а False соответственно 0.0.
python
a = True
b = False
print(float(a), float(b)) # 1.0 0.0Строки
В некоторых ситуациях может потребоваться преобразование значений других типов в строки. Например, для конкатенации, если мы хотим вывести число вместе строкой. В таких случаях используется str().
Определение
str(x) - преобразует x в строку, если это возможно.
Из целых чисел (int)
Давайте рассмотрим пример с целым числом.
python
age = 20
print("Привет, меня зовут Иван и мне " + str(age) + " лет")В данном случае без преобразования возраста в строку мы бы получили ошибку ValueError, так как складывать строки и числа в python запрещено.
Из других типов данных
Все типы данных при превращении в строку останутся выглядеть также, как и в исходном виде, но будут помещены в кавычки.
python
a = 3.14
b = True
print(str(a), str(b)) # 3.14 TrueЛогические значения
Для получения логических значений, по аналогии с остальными типами, используется bool().
Определение
bool(x) - преобразует x в логическое значение, если это возможно.
В Python любое значение может быть преобразовано в логическое. При этом:
Falseтождественно0,""(пустой строке),0.0,None(пустому значению) и пустым коллекциям ([],{}- их мы пройдем дальше)Trueтождественно любому другому значению
Давайте рассмотрим на примерах.
python
print(bool(0)) # False
print(bool(1)) # True
print(bool(-5)) # True (любое ненулевое число будет True!)
print(bool("")) # False (пустая строка)
print(bool("abc")) # True
print(bool(0.0)) # False
print(bool([])) # False (пустой список)
print(bool(None)) # FalseПрактика
Часто данные приходят одной строкой сразу с несколькими числами - как если бы пользователь ввёл их через input() за один раз. Попробуйте написать функцию sum_from_line(line), которая принимает такую строку и возвращает сумму чисел в ней - без преобразования строки в числа тут не обойтись.
Ещё практика
И ещё одна на преобразование в int - округление квадратного корня.
Итоги
На данном уроке мы узнали основные способы преобразования типов данных в python. Давайте повторим:
int(x)- преобразуетxв целое число, если это возможно.float(x)- преобразуетxв число с плавающей точкой, если это возможно.str(x)- преобразуетxв строку, если это возможно.bool(x)- преобразуетxв логическое значение, если это возможно.
Все это позволяет в разных ситуациях получать нужный нам тип данных. На следующем уроке мы углубимся в работу с числами - пройдем основные математические операторы. А сейчас можете закрепить новые знания в тесте.
Тест по теме
Преобразование базовых типов
Какая функция преобразует строку '25' в целое число 25?
Что вернёт выражение int(7.89)?
Почему int('3.14') вызывает ошибку?
Как преобразовать строку '99.99' в число с плавающей точкой?
Что выведет код: print(float(True))?
Зачем нужно преобразовывать число в строку с помощью str()?
Какое значение будет у bool('')?
Что выведет код: print(int('11', 2))?
Как правильно получить целое число из ввода пользователя?
Какое из этих значений будет преобразовано в bool() как False?