Ранее мы рассматривали понятие переменной и оператора присваивания. Эта комбинация может использоваться, когда заранее известны значения переменных, но чаще всего в программах значения переменных нужно ввести непосредственно в ходе запуска программы. В таких случаях значения переменных вводятся с помощью оператора ввода — input():
(b=input())
Обрати внимание!
Пустые скобки нужно писать обязательно, даже если в них ничего нет.
После запуска программа остановится и будет ждать, пока пользователь введёт значение переменной и нажмёт Enter.
Если после запуска программы записать любое число, то программа воспримет его как строковое значение, и тогда выполнять с ним арифметические операции будет невозможно.
Рассмотрим такой пример:
(a=input())
(print(a*5))
На экране появится результат:
(55555)
Программа восприняла число (5) как строковое значение и распечатало его ровно пять раз.
Чтобы значение имело числовой тип, нужно записать так:
(a=int(input()))
В случае использования переменных целого типа пишем (int), если тип будет вещественный, то (float).
Изменим программу и получим результат.
Рис. (1). Результат работы программы
Минусом такого ввода является то, что после запуска на экране мигает курсор, и пользователю непонятно, что делать дальше, поэтому лучше в пустых скобках добавить комментарий, например так:
(a=int(input(‘введи) (значение) (а= ‘)))
(print(a*5))
Получим результат.
Рис. (2). Результат работы программы
В Python есть возможность вводить в одной строке значения нескольких переменных. Для этого добавим в (input) функцию (split()) (от англ. — расщепить).
(x,y=input().split())
Ниже нужно добавить строку преобразования значений в целый тип.
(x,y=int(x),int(y))
Задача
Даны координаты двух точек на плоскости, найти расстояние между ними.
Рис. (3). Формула вычисления расстояния между точками на плоскости
Введём координаты точек попарно ((x1), (y1)), ((x2), (y2)) и вычислим расстояние по формуле.
Рис. (4). Программа для решения задачи
Координаты вводим через пробел.
Полученный результат имеет слишком много знаков после запятой, используем форматирование и изменим количество знаков после запятой до двух.
Рис. (5). Преобразование формата вывода
Источники:
Рис. 1. Результат работы программы. © ЯКласс.
Рис. 2. Результат работы программы. © ЯКласс.
Рис. 3. Формула вычисления расстояния между точками на плоскости. © ЯКласс.
Рис. 4. Программа для решения задачи. © ЯКласс.
Рис. 5. Преобразование формата вывода. © ЯКласс.
-
Главная
-
Инструкции
-
Python
-
Оператор ввода в Python: руководство
Интерактивные возможности в Python обеспечиваются за счет ряда инструментов, одним из которых является функция input()
. Ее также называют оператор ввода в Python. Главное назначение этого оператора заключается в том, чтобы принимать пользовательский ввод. Можно сказать, что он наполняет программы в Python смыслом, ведь без взаимодействия пользователя с приложением толку от последнего немного.
Эта функция работает следующим образом:
user_name = input('Введите свое имя: ')
user_age = int(input('Сколько вам лет? '))
Сначала мы просим пользователя указать имя, а затем возраст, и оба этих ввода реализуются с помощью специального оператора, который принимает введенные значения и записывает их в переменные user_name и user_age. А далее мы работаем с этими значениями. Например, можно создать условие для входа на сайт по возрасту (для этого нам понадобится перевести значение возраста в целое число при помощи инструкции int()
) и написать приветствие, используя введенное имя пользователя:
if user_age < 18:
print('Извините, но вход только для совершеннолетних')
else:
print('Добро пожаловать на сайт,', user_name, '!')
А что будет, когда int()
примет пустое значение? Например, если пользователь нажмет Enter. Допишем программу и посмотрим:
user_name = input('Введите свое имя: ')
user_age = int(input('Сколько вам лет? '))
if user_age < 18:
print('Извините, но вход только для совершеннолетних')
else:
print('Добро пожаловать на сайт,', user_name, '!')
input('Нажмите Enter для перехода в меню')
print('Добро пожаловать в меню')
При нажатии Enter программа переходит к следующей строке кода. А если ее нет, то выполняется выход из программы: такова логика работы функции. Поэтому последняя строка может быть такой:
input('Нажмите Enter для выхода')
И, если никаких строк в программе больше нет, произойдет выход. Вот полная версия программы:
user_name = input('Введите свое имя: ')
user_age = int(input('Сколько вам лет? '))
if user_age < 18:
print('Извините, но вход только для совершеннолетних')
else:
print('Добро пожаловать на сайт,', user_name, '!')
input('Нажмите Enter для перехода в меню')
print('Добро пожаловать в меню')
input('Нажмите Enter для выхода')
Если пользователь укажет разрешенный возраст, то увидит текст в блоке else
, а если нет, то только в блоке if
, а затем завершающее сообщение, которое высветится в конце для всех: Нажмите Enter для выхода. В программе оператор ввода используется 4 раза, причем в двух последних случаях он не принимает никаких значений, а нужен для перехода к следующей части кода и для выхода из программы.
input() в интерпретаторе
Выше мы написали готовую программу, но можно делать это построчно и в интерпретаторе Python. Правда в этом случае, чтобы переходить к написанию следующих строк кода, нам придется вводить данные сразу же:
>>> user_name = input('Введите свое имя: ')
Введите свое имя: Вася
>>> user_age = int(input('Сколько вам лет? '))
Сколько вам лет? 18
И так далее. Код тоже будет исполняться, а значения записываться в переменные, и таким способом можно тестировать отдельные блоки. Только помните, что значения будут сохраняться только до выхода из интерактивного режима, поэтому желательно параллельно дублировать код в файл с расширением .py
.
Методы преобразования ввода: int(), float(), split()
В некоторых случаях необходимо преобразовать введенные данные в определенный тип: например, в целое число, рациональное число с запятой или в строку. С первым типом преобразования мы уже познакомились в прошлом примере:
user_age = int(input('Сколько вам лет? '))
Инструкция int()
переводит значение в целочисленное, позволяя интерпретатору Python оперировать с ним как с числовым типом (цифры, введенные по умолчанию, не являются такими объектами, поэтому Питону нужна дополнительная инструкция). Добавим, что присвоение числовым переменным целочисленного значения реализуется и более длинным способом:
user_age = input('Сколько вам лет? ')
user_age = int(user_age)
Конечно, первый способ удобнее, но зато подробная запись более наглядна, что полезно для понимания работы функций и инструкций.
Для преобразования ввода в рациональные числа с плавающей запятой используется инструкция float()
:
height = float(input('Введите свой рост в формате 1.72: '))
weight = float(input('Введите точный вес (до 0,1 кг) в формате 80.3: '))
Или другим способом:
height = input('Введите свой рост в формате 1.72: ')
height = float(height)
weight = input('Введите точный вес (до 0,1 кг) в формате 80.3: ')
weight = float(weight)
Теперь программа преобразует введенные числа в числа с плавающей запятой и затем сможет оперировать ими в расчетах.
Инструкция split()
позволяет преобразовывать вводимые слова в списки. Вот как она работает:
animals = input('Введите названия любимых животных через пробел: ').split()
print('Вот они в виде списка:', animals)
Получим такой вывод:
Введите названия любимых животных через пробел: кот собака заяц лиса медведь
Вот они в виде списка: ['кот', 'собака', 'заяц', 'лиса', 'медведь']
Боремся с ошибками ввода
Нередко случается, что пользователи ошибаются при вводе или вводят некорректные символы намеренно. В этом случае неверный ввод может спровоцировать вылет:
>>> height = float(input('Введите свой рост в формате 1.72: '))
Введите свой рост в формате 1.72: 1ю72
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
height = float(input('Введите свой рост в формате 1.72: '))
ValueError: could not convert string to float: '1ю72'
Появилась ошибка, в описании которой указано, что интерпретатор не может преобразовать строку в число. Поэтому для таких случаев мы должны предусмотреть защиту. Реализуется она с помощью условной конструкции try-except
:
try:
height = float(input('Введите свой рост в формате 1.72: '))
except ValueError:
height = float(input('Введите свой рост в указанном формате: '))
Теперь вспомним нашу первую программу и сделаем более надежной и ее, переписав блок кода с вводом возраста таким образом:
try:
user_age = int(input('Сколько вам лет? '))
except ValueError:
user_age = int(input('Введите число: '))
Однако при повторной ошибке ввода такие программы всё равно вылетят. Для максимальной устойчивости можно организовать ввод с использованием цикла:
while True:
try:
height = float(input('Введите свой рост в формате 1.72: '))
break
except ValueError:
print('Давайте ещё разок,')
continue
print('Спасибо!')
Мы использовали цикл while
с инструкциями break
и continue
. Теперь программа работает так: если введенное значение корректно, цикл прерывается (действует оператор break
) и программа переходит к завершающему блоку кода: print('Спасибо!')
. Если же введенное значение нельзя преобразовать в число с плавающей запятой, мы обрабатываем ошибку ValueError
при помощи исключения except
и инструкции continue
. Последняя не позволяет программе вылетать после очередной ошибки ввода, а возвращает ее к началу цикла. В результате, поскольку условие try
не выполняется, программа будет предлагать пользователю ввести данные до тех пор, пока он не сделает это корректно.
Для устойчивой к ошибкам программы с возрастом полный код будет выглядеть так:
user_name = input('Введите свое имя: ')
while True:
try:
user_age = int(input('Сколько вам лет? '))
break
except ValueError:
print('А если серьезно?')
continue
if user_age < 18:
print('Извините, но вход только для совершеннолетних')
else:
print('Добро пожаловать на сайт,', user_name, '!')
input('Нажмите Enter для перехода в меню')
print('Добро пожаловать в меню')
input('Нажмите Enter для выхода')
Конечно, в этих программах вы сможете ввести любые цифры (и рост 3 метра, и возраст 300 лет), но, чтобы заставить пользователей вводить реалистичные данные, потребуется использовать диапазоны значений. Впрочем, это выходит за рамки данной статьи, а с вводом и с исключением ошибок ввода мы уже разобрались.
Ввод данных с клавиатуры осуществляется с помощью функции input(). После выполнения данной функции программа ожидает ввода данных и после нажатия «Enter» записывает их в переменную или возвращает результат на экран.
Существуют 4 вида ввода:
1. a=int(input())
Это означает, что в переменную a будет записано целое число (int — integer).
Например:
Чтобы программа начала работать, можно нажать F5 или Run Module (после этого Python предложит ее сохранить, так как он не может работать с несохраненными программами):
После этого появится примерно такое окно (окна могут различаться в зависимости от процессора, операционной системы и версии Python):
На строке, идущей после двух наборов стрелочек (в данном случае на шестой) будет мигающий курсор. Вам надо будет ввести любое целое число и нажать «Enter». После этого программа начнет работать и выведет введенное число.
2. a=float(input())
«float» означает ввод действительного числа. При вводе нецелого числа Вы должны разделить целую и дробную часть точкой. Например, «34.75»
3. a=str(input())
«str» означает ввод строки. Например, «qwerty» или «Hello, Python!» (str — string).
4. a,b=input().split()
Это означает ввод любых двух и более элементов. Скобки после «split» используются для того, чтобы задать, чем будут разделяться переменные (по умолчанию пробел). Например:
С помощью этих функций можно преобразовать действительное число в дробное (при этом чсло округляется в меньшую сторону), число в строку и так далее:
Результат:
В скобки после «input» можно ввести любой текст в кавычках. Например:
После начала работы у Вас откроется окно с заданным текстом:
В которое Вы можете ввести свою переменную.
В данном учебном курсе мы будем писать программы без графического пользовательского интерфейса, то есть без кнопок, текстовых полей ввода и т. д. Программы будут принимать на вход данные от пользователя с клавиатуры (а чуть позже мы научимся работать с файловым вводом и выводом), а выводить результат будут на экран. Всё взаимодействие с программой будет происходить в командной строке, также называемой консолью или терминалом.
Во введении к курсу мы узнали, что командная строка в среде разработки Visual Studio Code находится внизу на вкладке «Терминал». Именно в ней мы будем вводить данные с клавиатуры, а программа будет выводить результаты. Как было сказано ранее, мы будем писать компьютерные программы, которые принимают на вход данные, работают с ними и выводят результат на экран.
Вспомним программу из введения:
print("Привет, мир!")
В этой программе мы вызываем встроенную функцию под названием print()
. Как она устроена внутри, нам пока не столь важно. Главное — запомнить, что у неё есть имя, по которому к ней можно обратиться, плюс она принимает данные и обрабатывает их. О том, какими могут быть данные, мы тоже поговорим позже — в нашем примере мы передаём строку «Привет, мир!».
В Python строки заключены в кавычки — можно использовать одинарные, двойные и тройные (рекомендуется их составлять из трёх двойных). Внутри кавычек одного вида можно использовать другой вид кавычек как часть выводимой на экран строки.
Например:
print('Привет, мир!')
print("Привет, мир!")
print("""Привет, мир!""")
print("Программа выводит фразу 'Привет, мир!'")
Данные в программу могут поступать различными способами. Самый простой и привычный для пользователя — это ввод с клавиатуры. Для этого в Python используется функция input()
, которая возвращает в программу введённую пользователем строку. Но данные нужно куда-то сохранить, и в этом нам помогают переменные. Переменным назначаются имена, в них записываются значения, и затем они используются в программе по мере необходимости.
Напишем программу, которая получает от пользователя строку и выводит на экран:
phrase = input()
print(phrase)
После запуска программы происходит приостановка выполнения и в терминале появляется приглашение для ввода данных:
После ввода данных необходимо нажать клавишу Enter
. Программа запишет введённые данные в переменную phrase
и продолжит выполнение со следующей строчки. Переменная начинает существовать в программе, когда в неё записывается какое-то значение. В момент записи значения переменной назначается тип данных, определённый в соответствии со значением.
В нашем примере в переменную phrase
записывается строка, введённая пользователем. Поэтому переменной phrase
назначается встроенный в язык Python тип данных str
. Тип данных str
используется для хранения строк, а сами строки являются упорядоченной последовательностью символов.
У функции input()
можно задать параметр-строку перед вводом значения — и тогда указанный текст будет сопровождать приглашение к вводу данных:
phrase = input("Введите строку: ")
print(phrase)
Для именования переменных и правильного оформления кода существует стандарт PEP 8 (Python Enhancement Proposals), который следует соблюдать. Согласно стандарту PEP 8, имена переменных должны содержать маленькие буквы английского алфавита и символ «подчёркивание» для разделения слов в имени. Пример имён переменных по стандарту: value, first_value.
Нельзя использовать следующие однобуквенные имена переменных:
- I (большая английская i);
- l (маленькая английская L);
- O.
Эти однобуквенные имена усложнят читаемость кода, так как могут быть перепутаны между собой или с цифрами. Все стандарты PEP можно посмотреть на этой странице.
Но вернёмся к функции print()
. С её помощью можно выводить сразу несколько значений. Для этого их нужно перечислить через запятую. Выведем, например, фразу Добрый день, %имя%.
:
name = "Пользователь"
print("Добрый день,", name, ".")
В консоли отобразится:
Добрый день, Пользователь .
Как видим, результат работы программы не соответствует нашим ожиданиям, так как между словом «Пользователь» и точкой появился пробел. Данный пробел является символом, который по умолчанию ставится между выводимыми значениями. Вместо пробела можно указать любую другую строку, даже пустую. Для этого нужно передать в функцию print()
именованный аргумент sep
(англ. separator — «разделитель»). Сделаем так, чтобы вместо пробела в качестве разделителя использовалась пустая строка:
name = "Пользователь"
print("Добрый день, ", name, ".", sep="")
В консоли отобразится:
Добрый день, Пользователь.
Но в таком случае необходимые пробелы нам придётся ставить самим, а это неудобно. К счастью, в Python существует удобный и мощный инструмент для форматирования строк — f-строки. Чтобы задать f-строку, необходимо поставить букву f перед открывающей кавычкой строки. Далее f-строка записывается как единое целое, с учётом правил её форматирования, и закрывается соответствующей кавычкой:
name = "Пользователь"
print(f"Добрый день, {name}.")
Внутри f-строк можно обращаться к переменным, используя фигурные скобки, как в примере выше, а также производить операции, выполнять функции и подставлять их результаты в данную строку. И это только малая часть возможностей f-строк. Более подробно про них можно почитать в данном источнике.
Использование f-строк является приоритетным способом форматирования. Наряду с f-строками существует функция format()
, которая также предназначена для удобного форматирования (мы рассмотрим её чуть позже). Также форматирование строк может производиться с помощью символа %
. Однако данный способ форматирования является устаревшим (здесь можно почитать про него подробнее).
В строках можно применять управляющие символы, начинающиеся с символа «слеш» (). Например:
n
— переход на новую строку;t
— табуляция;r
— возврат каретки в начало строки;b
— возврат каретки на один символ.
Кроме того, с помощью слеша можно экранировать символы, то есть делать их частью выводимой строки. Например, для вывода символа необходимо его экранировать самим собой:
print("\")
Подробнее об экранировании можно почитать в этом источнике.
В функции print()
кроме параметра sep
существует параметр end
, который определяет символ в конце строки. Значение по умолчанию для него — переход на новую строку, обозначаемый как n
. Если вывести строки с помощью нескольких использований функции print()
, то вывод каждой из них будет осуществлён с новой строки:
print("Привет, Пользователь!")
print("Как дела?")
Привет, Пользователь! Как дела?
Над строками можно производить следующие операции:
- сложение (конкатенация строк);
- умножение строки на целое число.
Результатом сложения строк будет новая строка, представляющая собой записанные последовательно складываемые строки (строки как бы склеиваются друг с другом, образуя новую строку).
print("Сложно" + "подчинённый")
Сложноподчинённый
При умножении строки на целое число n
получается новая строка, состоящая из n
дублирований исходной строки. Например, выведем 10 символов -
подряд:
print("-" * 10)
В одной из следующих глав мы познакомимся с другими возможностями Python по работе со строками. А сейчас перейдём к работе с числами. Для создания целочисленной переменной в программе достаточно назначить ей имя и присвоить целочисленное значение. Например:
n = 10
По аналогии создаются вещественные числовые переменные, только в качестве разделителя целой и дробной частей используется десятичный разделитель «точка»:
pi = 3.14
Для преобразования строк в числа и наоборот используются следующие функции:
int()
— преобразует строку (или вещественное число) в целое число. Дополнительно можно указать, в какой системе счисления было записано исходное число. По умолчанию используется десятичная система. При конвертации вещественного числа в целое отбрасывается дробная часть;float()
— преобразует строку (или целое число) в вещественное число;str()
— преобразует значения (в общем случае не только числовые) в строки.
Рассмотрим несколько примеров применения этих функций.
n_1 = "1"
n_2 = "2"
print(n_1 + n_2)
n_1 = int(n_1)
n_2 = int(n_2)
print(n_1 + n_2)
В результате выполнения программы получим:
12 3
Первый результат — результат сложения (конкатенации) двух строк. Второй — результат сложения целых чисел, которые были преобразованы из строк функцией int()
.
x = 3.89
x = int(x)
print(x)
Здесь программа выведет в консоли результат 3
. Дробная часть после десятичного разделителя была отброшена при преобразовании в целое число.
width = "3.7"
height = "2.5"
s = float(width) * float(height)
print(s)
Программа выведет: 9.25
.
А чтобы вводить целые или вещественные числа с клавиатуры, можно использовать уже знакомую нам функцию input()
в сочетании с функциями int()
и float()
:
int_number = int(input())
float_number = float(input())
Для работы с числовыми переменными доступны следующие математические операции:
- сложение —
x + y
; - вычитание —
x - y
; - умножение —
x * y
; - деление —
x / y
; - возведение в степень
x ** y
.
Используем все эти операции в следующей программе:
n = 25
x = 0.5
print(n + x)
print(n - x)
print(n * x)
print(n / x)
print(n ** x)
Вывод программы будет таким:
25.5 24.5 12.5 50.0 5.0
Необходимо учитывать, что если выполняется операция деления или хотя бы один из операндов является вещественным числом, то результат также будет вещественным.
Например, выполнение следующего кода выведет на экран 2.0
:
print(4 / 2)
Для целых чисел дополнительно доступны операции:
- целочисленное деление —
x // y
; - остаток от деления —
x % y
.
Эти операции можно использовать, например, для получения определённых цифр числа. Получим последнюю цифру числа 1234 (то есть остаток от деления на 10):
last_digit = 1234 % 10
Для получения предпоследней цифры нужно «отрезать» последнюю цифру целочисленным делением на 10, а затем у нового числа найти последнюю цифру — уже известным нам способом:
penultimate_digit = 1234 // 10 % 10
Чтобы закрепить новые знания, рекомендуем вам прорешать задачи для этой главы. А в следующей вы узнаете, как создавать программы, способные учитывать несколько вариантов развития событий.
Большинство программ, даже самых простых, выполняют обработку какой-либо информации – получают разнообразные данные, производят необходимые операции, после чего выводят результат. За ввод и вывод данных в Python отвечают встроенные функции input() и print(). С помощью функции вывода print() можно написать классическую программу Hello, World! в одну строку:
>>> print('Hello, World!')
Hello, World!
Для ввода нужной информации используют input(). В этом примере переменная name
с помощью оператора присваивания =
получит введенное пользователем значение:
name = input()
Чтобы пользователю было понятнее, какое именно значение от него ожидает программа, можно добавить пояснение:
name = input('Как тебя зовут? ')
Или:
name = input('Введите свое имя ')
Напишем программу, которая запрашивает имя пользователя и выводит приветствие:
name = input('Как тебя зовут? ')
print('Привет,', name)
Результат:
Как тебя зовут? Вася
Привет, Вася
В этой программе используются две встроенные функции input() и print(), а также переменная name
. Переменная – это именованная область памяти, в которой во время выполнения программы хранятся данные определенного типа (о типах данных расскажем ниже). В стандартах оформления кода PEP 8 даны рекомендации по названиям переменных:
- Названия не должны начинаться с цифры, но могут заканчиваться цифрой. Например, назвать переменную
7up
– неправильно, а так –seven11
– можно. - Названия могут состоять из комбинации строчных, заглавных букв, цифр и символов подчеркивания:
lower_case
,mixedCase
,CapitalizedCase
,UPPER_CASE
,lower123
. - Не следует давать переменным названия, совпадающие со служебными словами, названиями встроенных функций и методов, к примеру – print, list, dict, set, pass, break, raise.
- Следует избегать использования отдельных букв, которые могут быть ошибочно приняты друг за друга –
l
(L в нижнем регистре),I
(i в верхнем регистре) или за нуль –O
. - В названиях не должно быть пробелов, дефисов и специальных символов, например,
'
или$
. - Главный принцип именования переменных – осмысленность. По названию переменной должно быть понятно, какого рода данные в ней хранятся – например, car_model, petName, CARD_NUMBER более информативны, чем a, а1, а2.
Переменные выполняют две важные функции:
- делают код понятнее;
- дают возможность многократно использовать введенные данные.
Если программа небольшая, а введенное значение используется однократно, можно обойтись без использования переменной:
print('Привет,', input('Как тебя зовут?'))
Ввод и вывод нескольких переменных, f-строки
Если в программе используются несколько переменных, ввод данных можно оформить на отдельных строках:
first_name = input()
last_name = input()
age = input()
Или в одну строку:
first_name, last_name, age = input(), input(), input()
Либо так – если значения переменных равны:
x1 = x2 = x3 = input()
Чтобы вывести значения переменных на экран, названия перечисляют в print() через запятую:
print(first_name, last_name, age)
Или по отдельности:
print(first_name)
print(last_name)
print(age)
При перечислении через запятую Python выводит все переменные в одну строку, разделяя значения пробелами:
Вася Пупкин 12
Вместо пробела можно подставить любой другой разделитель. Например:
print(first_name, last_name, age, sep="***")
В результате значения будут разделены звездочками:
Вася***Пупкин***12
Если нужно вывести значения не в строку, а в столбик, можно воспользоваться специальным параметром end="n"
– он обеспечивает переход на новую строку:
print(first_name, last_name, age, end="n")
Чтобы сделать вывод более информативным, используют f-строки:
print(f'Имя: {first_name}, Фамилия: {last_name}, Возраст: {age}')
Все содержимое такой строки находится в конструкции f'...'
, а названия переменных внутри строки заключаются в фигурные скобки {...}
.
Операции во время вывода
Функция print(), помимо вывода результатов работы программы, допускает проведение разнообразных операций с данными:
>>> print(5 + 5)
10
>>> print(10 // 3)
3
>>> print(6 ** 2)
36
>>> print('I' + ' love' + ' Python')
I love Python
Встроенные типы данных в Python
Питон работает с двумя категориями данных – встроенными типами (они поддерживаются по умолчанию) и специализированными (для операций с ними нужно подключение определенного модуля). К специализированным типам данных относятся, например, datetime (дата и время) и deque (двухсторонняя очередь).
Все встроенные типы данных в Python можно разделить на следующие группы:
- Числовые – целые, вещественные, комплексные числа. Примечание: для максимально точных расчетов с десятичными числами в Python используют модуль
decimal
(тип данных Decimal), а для операций с рациональными числами (дробями) – модульfractions
(тип данных Fraction). - Булевы – логические значения True (истина) и False (ложь).
- Строковые – последовательности символов в кодировке Unicode.
- NoneType – нейтральное пустое значение, аналогичное null в других языках программирования.
- Последовательности – списки, кортежи, диапазоны.
- Словари – структура данных типа «ключ: значение».
- Множества – контейнеры, содержащие уникальные значения. Подразделяются на изменяемые
set
и неизменяемыеfrozenset
множества. - Байтовые типы –
bytes
(байты),bytearray
(изменяемая байтовая строка),memoryview
(предоставление доступа к внутренним данным объекта).
В таблице приведены примеры и определения встроенных типов данных:
Тип данных | Значение | Определение в Python | Вариант использования |
Целые числа | -3, -2, -1, 0, 1, 2, 3 | int | a = int(input()) |
Вещественные числа | -1.5, -1.1, 0.6, 1.7 | float | a = float(input()) |
Комплексные числа | −5i, 3+2i | complex | a = complex(input()) |
Булевы значения | True, False | True, False | flag = True |
NoneType | None | None | a = None |
Строка | ‘abracadabra’ | str | a = str(5) |
Список | [1, 2, 3], [‘a’, ‘b’, ‘c’] | list | a = list((‘a’, ‘b’, ‘c’)) |
Кортеж | (‘red’, ‘blue’, ‘green’) | tuple | a = tuple((‘red’, ‘blue’, ‘green’)) |
Изменяемое множество | {‘black’, ‘blue’, ‘white’}, {1, 3, 9, 7} | set | a = set((‘black’, ‘blue’, ‘white’)) |
Неизменяемое множество | {‘red’, ‘blue’, ‘green’}, {2, 3, 9, 5} | frozenset | a = frozenset((2, 5, 3, 9)) |
Диапазон | 0, 1, 2, 3, 4, 5 | range | a = range(6) |
Словарь | {‘color’: ‘red’, ‘model’: ‘VC6’, ‘dimensions’: ’30×50′} | dict | a = dict(color=’red’, model=’VC6′, dimensions=’30×50′) |
Байты | b’x00x00x00′ | bytes | a = bytes(3) |
Байтовая строка | (b’x00x00′) | bytearray | a = bytearray(2) |
Просмотр памяти | 0x1477a5813a00 | memoryview | a = memoryview(bytes(15)) |
Чтобы узнать тип данных, нужно воспользоваться встроенной функцией type():
>>> a = 3.5
>>> type(a)
<class 'float'>
Как задать тип переменной
Важно заметить, что если тип переменной не указан явно при вводе, т.е. ввод выполняется как a = input()
, то Python будет считать введенное значение строкой. В приведенном ниже примере Питон вместо сложения двух чисел выполняет конкатенацию строк:
>>> a, b = input(), input()
5
6
>>> print(a + b)
56
Это произошло потому, что a и b были введены как строки, а не целые числа:
>>> type(a)
<class 'str'>
>>> type(b)
<class 'str'>
Чтобы ввести целое число, следует использовать конструкцию int(input())
, вещественное –float(input())
.
Математические операции в Python
Все операции в математике имеют определенный приоритет: сначала выполняется возведение в степень, затем деление по модулю и так далее. Этот приоритет соблюдается и в Питоне:
Приоритет | Оператор Python | Операция | Пример | Результат |
1 | ** | Возведение в степень | 5 ** 5 | 3125 |
2 | % | Деление по модулю (получение остатка) | 16 % 7 | 2 |
3 | // | Целочисленное деление (дробная часть отбрасывается) | 13 // 3 | 4 |
4 | / | Деление | 39 / 2 | 19.5 |
5 | * | Умножение | 123 * 321 | 39483 |
6 | — | Вычитание | 999 – 135 | 864 |
7 | + | Сложение | 478 + 32 | 510 |
Python допускает применение сложения и умножения в операциях со строками. Сложение строк, как уже упоминалось выше, называется конкатенацией:
>>> print('Python -' + ' лучший' + ' язык' + ' программирования')
Python - лучший язык программирования
Умножение строки на целое число называется репликацией:
>>> print('Репликанты' * 5)
РепликантыРепликантыРепликантыРепликантыРепликанты
Однако попытки умножить строки друг на друга или на вещественное число обречены на провал:
>>> print('Репликанты' * 5.5)
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'float'
Преобразование типов данных
Python позволяет на лету изменять типы данных. Это может оказаться очень полезным при решении тренировочных и практических задач.
Округление вещественного числа:
>>> a = float(input())
5.123
>>> print(int(a))
5
Преобразование целого числа в вещественное:
>>> a = 5
>>> print(float(a))
5.0
Преобразование строки в число и вывод числа без ведущих нулей:
>>> a = '00032567'
>>> print(int(a))
32567
Сложение строки и числа:
>>> a = 'Apollo '
>>> b = 13
>>> print(a + str(b))
Apollo 13
Преобразование списка в строку:
>>> a = ['п', 'р', 'и', 'в', 'е', 'т']
>>> print('*'.join(a))
п*р*и*в*е*т
Преобразование строки в множество:
>>> a = 'привет'
>>> print(set(a))
{'в', 'е', 'и', 'т', 'п', 'р'}
Преобразование строки в список:
>>> a = 'я изучаю Python'
>>> print(list(a))
['я', ' ', 'и', 'з', 'у', 'ч', 'а', 'ю', ' ', 'P', 'y', 't', 'h', 'o', 'n']
Преобразование кортежа в список:
>>> a = ('red', 'blue', 'green')
>>> print(list(a))
['red', 'blue', 'green']
Разумеется, преобразование типов данных происходит в определенных пределах – строку, содержащую буквенные и специальные символы, нельзя сделать числом, а превращение списка, строки, множества или кортежа в словарь потребует дополнительных манипуляций, которые мы изучим позже.
Практика – задачи с решениями
Задание 1. Напишите программу, которая запрашивает имя и возраст пользователя, и выводит приветствие и возраст пользователя в следующем году. Пример работы программы:
Как тебя зовут? Катя
Привет, Катя!
Сколько тебе лет? 14
Здорово! В следующем году тебе будет 15!
Решение:
name = input('Как тебя зовут? ')
print(f'Привет, {name}!')
age = int(input('Сколько тебе лет? '))
print(f'Здорово! В следующем году тебе будет {age + 1}!')
Задание 2. Напишите программу, которая запрашивает имя, фамилию и возраст пользователя, а затем выводит эти данные в столбик с помощью f-строки. Результат работы программы:
Имя: Евгения
Фамилия: Фролова
Возраст: 19
Решение:
first_name = input()
last_name = input()
age = input()
print(f'Имя: {first_name}nФамилия: {last_name}nВозраст: {age}')
Задание 3. Напишите программу, которая выводит на экран прямоугольник 5 х 15, сформированный из звездочек. Пример вывода:
***************
* *
* *
* *
***************
Решение:
print('*' * 15)
print('*' + ' ' * 13 + '*')
print('*' + ' ' * 13 + '*')
print('*' + ' ' * 13 + '*')
print('*' * 15)
Задание 4. Напишите программу, которая получает на вход целое число n из диапазона от 1 до 9 включительно, и выводит результат вычисления выражения nnn – nn – n. Например, если введенное число 3, программа должна вывести 297 (333 – 33 – 3).
Решение:
num1 = input()
num2 = int(num1 * 2)
num3 = int(num1 * 3)
print(num3 - num2 - int(num1))
Задание 5. Напишите программу, которая получает на вход целые положительные числа a и b, а затем выводит результаты математических операций в следующем формате:
Число а в степени b = 25
Произведение a * b = 10
Сумма a + b = 7
Разница a - b = 3
Решение:
a, b = int(input()), int(input())
print('Число а в степени b =', a ** b)
print('Произведение a * b =', a * b)
print('Сумма a + b =', a + b)
print('Разница a - b =', a - b)
Задание 6. Напишите программу, которая получает от пользователя вещественные числа a и b – длину и ширину прямоугольника, – и выводит периметр и площадь прямоугольника в следующем формате:
Площадь S = 88.0
Периметр P = 38.0
Площадь вычисляется по формуле S = a * b, периметр P = 2 * (a + b).
Решение:
a, b = float(input()), float(input())
print('Площадь S =', a * b)
print('Периметр P =', 2 * (a + b))
Задание 7. Напишите программу, которая получает на вход число от 420 до 540 (оптимальная продолжительность сна в минутах) и помогает пользователю определить, на какое время (в формате «часы:минуты») нужно установить звонок будильника. Отсчет времени начинается с полуночи.
Пример ввода:
470
Вывод:
Поставь будильник на 7:50
Решение:
time = int(input())
print(f'Поставь будильник на {time // 60}:{time % 60}')
Задание 8. Напишите программу, которая получает на вход целое число n – количество дней, и конвертирует n в годы, месяцы и дни.
Пример ввода:
398
Вывод:
Годы: 1 Месяцы: 1 Дни: 3
Решение:
n = int(input("Введите количество дней: "))
years = n // 365
months = (n - years * 365) // 30
days = (n - years * 365 - months * 30)
print(f'Годы: {years} Месяцы: {months} Дни: {days}')
Задание 9. Напишите программу, которая получает от пользователя целое число n – количество секунд, и конвертирует n в часы, минуты и секунды.
Пример ввода:
3426
Вывод:
Часы: 0 Минуты: 57 Секунды: 6
Решение:
n = int(input())
seconds = n % (24 * 3600)
hours = seconds // 3600
seconds = seconds % 3600
minutes = seconds // 60
seconds = seconds % 60
print(f'Часы: {hours} Минуты: {minutes} Секунды: {seconds}')
Задание 10. Напишите программу, которая получает на вход вещественные числа x1, y1, х2, y2 – координаты точек a (x1, y1) и b (х2, y2) на плоскости – и вычисляет расстояние между a и b.
Пример ввода:
3.6
6.7
5.4
15.2
Вывод:
10.278618584226189
Решение:
x1, x2, y1, y2 = float(input()), float(input()), float(input()), float(input())
dist = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
print(dist)
Примечание: модуль math, работу с которым мы рассмотрим подробнее позже, имеет функцию dist
для вычисления расстояния между точками на плоскости и в пространстве:
import math
x1, x2, y1, y2 = float(input()), float(input()), float(input()), float(input())
a, b = [x1, y1], [x2, y2]
d = math.dist(a, b)
print(d)
Подведем итоги
В этой части мы рассмотрели базовые типы данных в Python, разобрали дополнительные параметры ввода и вывода, научились преобразовывать одни типы данных в другие, написали первые простые программы. В следующей части будем изучать методы работы со строками.
***
📖 Содержание самоучителя
- Особенности, сферы применения, установка, онлайн IDE
- Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
- Типы данных: преобразование и базовые операции
- Методы работы со строками
- Методы работы со списками и списковыми включениями
- Методы работы со словарями и генераторами словарей
- Методы работы с кортежами
- Методы работы со множествами
- Особенности цикла for
- Условный цикл while
- Функции с позиционными и именованными аргументами
- Анонимные функции
- Рекурсивные функции
- Функции высшего порядка, замыкания и декораторы
- Методы работы с файлами и файловой системой
- Регулярные выражения
- Основы скрапинга и парсинга
- Основы ООП: инкапсуляция и наследование
- Основы ООП – абстракция и полиморфизм
- Графический интерфейс на Tkinter
***
Материалы по теме
- 🐍🧩 5 задач с решениями на Python для начинающих разработчиков
- 🐍 Аннотации типов в Python: все, что нужно знать за 5 минут
- 🧊 Фундаментальные структуры данных: массивы и связанные списки с реализацией на Python