Skip to content

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), которая принимает такую строку и возвращает сумму чисел в ней - без преобразования строки в числа тут не обойтись.

Задача: Считать N чисел одной строкой

Ещё практика ​

И ещё одна на преобразование в 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?