Программирование для всех (основы работы в Python)

Алла Тамбовцева, НИУ ВШЭ

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

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

Типы переменных (не путать с data types и data scales):

  • числовой с плавающей точкой (float);
  • целочисленный (integer);
  • строковый или текстовый (string);
  • логический или булев (boolean): только два значения True и False.

Посмотрим, как определить тип переменной (функция type()):

In [1]:
x = 2.34
type(x)
Out[1]:
float
In [2]:
y = 5
type(y)
Out[2]:
int
In [3]:
name = "Alla"
type(name)
Out[3]:
str
In [4]:
type(True)
Out[4]:
bool

Иногда требуется преобразовать тип переменной, например, из числа с плавающей точкой сделать целое число. Зачем это бывает нужно? Для удобства и для более корректной выдачи результатов. Например, у нас есть база данных по респондентам, в которой указан их год рождения, и мы хотим добавить столбец с возрастом респондентов (числом полных лет). Из-за того, что кто-то ввел год в виде 1993.0, возраст при вычислениях тоже получится числом с плавающей точкой — 25.0. Так как мы знаем, что возраст всегда будет целым, чтобы дробная часть не смущала, можно привести все значения к целочисленному типу.

In [5]:
int(25.0) # int - от integer
Out[5]:
25
In [6]:
int("23")
Out[6]:
23
In [7]:
str(45)  # str - от string
Out[7]:
'45'
In [8]:
float("23.56")
Out[8]:
23.56

Однако, если преобразование невозможно, Python выдаст ошибку (а точнее, исключение ValueError, про исключения поговорим позже):

In [9]:
float("23,56")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-9-5b87eb4fb8b7> in <module>
----> 1 float("23,56")

ValueError: could not convert string to float: '23,56'

Так как запятая в Python не воспринимается как десятичный разделитель (в качестве разделителя используется точка), превратить строку '23,56' в число не получится, нужно будет сначала заменить запятую на точку. Как работать со строками, мы обсудим позже, но если интересно, можно сделать следующее: создать любую строковую переменную, а потом после её названия поставить точку и нажать Tab. Так же, как и в случае с модулем math, выпадет список всех возможных методов, которые можно применять к строке.

Ввод и вывод

Иногда возникает необходимость запросить какую-нибудь информацию у пользователя — попросить ввести её с клавиатуры. Это может быть нужно, например, когда мы пытаемся имитировать заполнение какой-нибудь формы (собрать информацию и обработать) или написать функцию, которая будет работать по-разному в зависимости от режима ("Если хотите выгрузить данные из файла, нажмите 1, если хотите вводить данные вручную, введите 2").

Запросить данные с клавиатуры можно с помощью функции input():

In [10]:
s = input("Enter something:")
Enter something:something
In [11]:
print(s)
something

Давайте рассмотрим ещё один пример и запросим у пользователя его возраст:

In [14]:
age = input("Enter your age: ")
Enter your age: 26
In [15]:
age
Out[15]:
'26'

Введенное нами значение сохранилось. Однако, если посмотреть внимательнее, это не совсем число: число пять стоит в кавычках. Это строка! То есть обычный текст. Проверим:

In [16]:
type(age)  # действительно
Out[16]:
str

Тут нам как раз и пригодится преобразование типов переменных:

In [17]:
age = int(input("Enter your age: "))
Enter your age: 26

Теперь все правильно, с age можно работать как с числом:

In [18]:
type(age)
Out[18]:
int

В заключение рассмотрим пример с вводом двух чисел с новой строки (необязательно целых). Сохраним введенные пользователем числа в переменные A и B, а потом выведем на экран их сумму и разность в одну строку:

In [20]:
A = float(input("Enter a number: "))
B = float(input("Enter a number: "))
print("Sum:", A + B, "Difference:", A - B, sep="\t")  
Enter a number: 9.6
Enter a number: 5.1
Sum:	14.7	Difference:	4.5

В коде выше в функции print() мы задействовали аргумент sep. Это разделитель, который отделяет элементы в строке, выводимой с помощью print(). Как мы видели, по умолчанию функция print() выводит все элементы через пробел. Другими словами, значение sep по умолчанию — это " ". В этом примере мы записали \t, это специальный символ для табуляции, отступа в четыре пробела. Но вообще символ в sep может быть любым.