Как пишется int input

Содержание:развернуть

  • Чтение ввода с клавиатуры
  • Преобразование вводимые данные
  • Input() → int

  • Input() → float

  • Input() → list (список)

  • Ввод в несколько переменных

Обычно программа работает по такой схеме: получает входные данные → обрабатывает их → выдает результат. Ввод может поступать как непосредственно от пользователя через клавиатуру, так и через внешний источник (файл, база данных).

В стандартной библиотеке Python 3 есть встроенная функция input() (в Python 2 это raw_input()), которая отвечает за прием пользовательского ввода. Разберемся, как она работает.

Чтение ввода с клавиатуры

Функция input([prompt]) отвечает за ввод данных из потока ввода:

s = input()
print(f"Привет, {s}!")

> мир # тут мы с клавиатуры ввели слово "мир"
> Привет, мир!

👉 В этом примере:

  1. При вызове функции input() выполнение программы приостанавливается до тех пор, пока пользователь не введет текст на клавиатуре (приложение может ждать бесконечно долго).
  2. После нажатия на Enter, функция input() считывает данные и передает их приложению (символ завершения новой строки не учитывается).
  3. Полученные данные присваиваются переменной и используются дальше в программе.

input() всегда возвращает строку:

s = input()
print(type(s))

> 2
> <class 'str'>

Также у input есть необязательный параметр prompt – это подсказка пользователю перед вводом:

name = input("Введите имя: ")
print(f"Привет, {name}!")

> Введите имя: Вася
> Привет, Вася!

📃 Более подробное описание функции из документации:

def input([prompt]):
"""
Read a string from standard input. The trailing newline is stripped.

The prompt string, if given, is printed to standard output without a
trailing newline before reading input.

If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.
"""
pass

Преобразование вводимые данные

Данные, введенные пользователем, попадают в программу в виде строки, поэтому и работать с ними можно так же, как и со строкой. Если требуется организовать ввод цифр, то строку можно преобразовать в нужный формат с помощью функций явного преобразования типов.

☝️ Важно: если вы решили преобразовать строку в число, но при этом ввели строку (например: test), возникнет ошибка:

ValueError: invalid literal for int() with base 10: 'test'

На практике такие ошибки нужно обрабатывать через try except. В примере ниже пользователь будет вводить данные до тех пор, пока они успешно не преобразуются в число.

def get_room_number():
while True:
try:
num = int(input("Введите номер комнаты: "))
return num
except ValueError:
print("Вы ввели не число. Повторите ввод")

room_number = get_room_number()
print(f"Комната {room_number} успешно забронирована!")

> Введите номер комнаты: test
> Вы ввели не число. Повторите ввод
> Введите номер комнаты: 13
> Комната 13 успешно забронирована!

Input() → int

Для преобразования в целое число используйте функцию int(). В качестве аргумента передаются данные которые нужно преобразовать, а на выходе получаем целое число:

age_str = input("Введите ваш возраст: ")
age = int(age_str)

print(age)
print(type(age))

> Введите ваш возраст: 21
> 21
> <class 'int'>

То же самое можно сделать в одну строку: age = int(input("Введите ваш возраст: ")).

Input() → float

Если нужно получить число с плавающей точкой (не целое), то его можно получить с помощью функции float().

weight = float(input("Укажите вес (кг): "))

print(weight)
print(type(weight))

> Укажите вес (кг): 10.33
> 10.33
> <class 'float'>

Input() → list (список)

Если в программу вводится информация, которая разделяется пробелами, например, «1 word meow», то ее легко преобразовать в список с помощью метода split(). Он разбивает введенные строки по пробелам и создает список:

list = input().split()

print(list)
print(type(list))

> 1 word meow
> ['1', 'word', 'meow']
> <class 'list'>

💭 Обратите внимание, что каждый элемент списка является строкой. Для преобразования в число, можно использовать int() и цикл for. Например, так:

int_list = []
for element in input().split():
int_list.append(int(element))

print([type(num) for num in int_list])

> 1 2 3
> [<class 'int'>, <class 'int'>, <class 'int'>]

Ввод в несколько переменных

Если необходимо заполнить одним вводом с клавиатуры сразу несколько переменных, воспользуйтесь распаковкой:

a, b, c = input().split()
print(f"a: {a}, b: {b}, c: {c}")

> test 13 100
> a: test, b: 13, c: 100

В этом примере строка из input() разбивается по пробелу функцией split(). Далее применяется синтаксис распаковки – каждый элемент списка попадает в соответствующую переменную.

Все переменные после распаковки будут строкового типа. Преобразовать их (например в int) можно так:

a, b = [int(s) for s in input().split()]
print(f"type a: {type(a)}, type b: {type(b)}")

> 13 100
> type a: <class 'int'>, type b: <class 'int'>

☝️ Важно: не забывайте обрабатывать ошибки:

  • если введенных значений больше чем переменных, получите ошибку – ValueError: too many values to unpack (expected 3);
  • если введенных значений меньше чем переменных, получите ошибку – ValueError: not enough values to unpack (expected 3, got 2);
  • если преобразовываете в int, а вводите строку – ValueError: invalid literal for int() with base 10: 'test'.

В этом руководстве вы узнали, как принимать данные от пользователя, введенные с клавиатуры, научились преобразовывать данные из input и обрабатывать исключения.

О выводе данных в Python читайте тут:

Большинство программ, даже самых простых, выполняют обработку какой-либо информации – получают разнообразные данные, производят необходимые операции, после чего выводят результат. За ввод и вывод данных в 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, разобрали дополнительные параметры ввода и вывода, научились преобразовывать одни типы данных в другие, написали первые простые программы. В следующей части будем изучать методы работы со строками.

***

📖 Содержание самоучителя

  1. Особенности, сферы применения, установка, онлайн IDE
  2. Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
  3. Типы данных: преобразование и базовые операции
  4. Методы работы со строками
  5. Методы работы со списками и списковыми включениями
  6. Методы работы со словарями и генераторами словарей
  7. Методы работы с кортежами
  8. Методы работы со множествами
  9. Особенности цикла for
  10. Условный цикл while
  11. Функции с позиционными и именованными аргументами
  12. Анонимные функции
  13. Рекурсивные функции
  14. Функции высшего порядка, замыкания и декораторы
  15. Методы работы с файлами и файловой системой
  16. Регулярные выражения

***

Материалы по теме

  • 🐍🧩 5 задач с решениями на Python для начинающих разработчиков
  • 🐍 Аннотации типов в Python: все, что нужно знать за 5 минут
  • 🧊 Фундаментальные структуры данных: массивы и связанные списки с реализацией на Python

Получение и обработка информации — один из важнейших элементов любого языка программирования, особенно если речь идет о получении информации от пользователей.

Python, будучи медленным относительно таких языков, как C или Java, предлагает продвинутые инструменты для получения, анализа и обработки данных от конечного пользователя.

В этом материале речь пойдет о том, какие функции Python можно использовать для этих целей.

Для получения информации с клавиатуры в Python есть функции input() или raw_input() (о разнице между ними чуть позже). У них есть опциональный параметр prompt, который является выводимой строкой при вызове функции.

Когда input() или raw_input() вызываются, поток программы останавливается до тех пор, пока пользователь не введет данные через командную строку. Для ввода нужно нажать Enter после завершения набора текста. Обычно Enter добавляет символ новой строки (n), но не в этом случае. Введенная строка просто будет передана приложению.

Интересно, что кое-что поменялось в принципе работе функции между Python 2 и Python 3, что отразилось в разнице между input() и raw_input(). Об этом дальше.

Сравнение функций input и raw_input

Разница между этими функциями зависит от версии Python. Так, в Python 2 функция raw_input() используется для получения ввода от пользователя через командную строку, а input() оценивает ее и попробует запустить как код Python.

В Python 3 от raw_input() избавились, оставив только input(). Она используется для получения ввода пользователя с клавиатуры. Возможности input() из Python 2 в Python 3 работать не будут. Для той же операции нужно использовать инструкцию eval(input()).

Взгляните на пример функции raw_input в Python 2.

# Python 2

txt = raw_input("Введите что-нибудь, чтобы проверить это: ")
print "Это то, что вы только что ввели?", txt

Вывод

Введите что-нибудь, чтобы проверить это: Привет, мир!

Это то, что вы только что ввели? Привет, мир!

А вот как она работает в Python 3

# Python 3

txt = input("Введите что-нибудь, чтобы проверить это: ")
print("Это то, что вы только что ввели?", txt)

Вывод

Введите что-нибудь, чтобы проверить это: Привет, мир 3!

Это то, что вы только что ввели? Привет, мир 3!

Дальше в материале будет использоваться метод input из Python 3, если не указано другое.

Строковый и числовой ввод

По умолчанию функция input() конвертирует всю получаемую информацию в строку. Прошлый пример продемонстрировал это.

С числами нужно работать отдельно, поскольку они тоже изначально являются строками. Следующий пример показывает, как можно получить информацию числового типа:

# Ввод запрашивается и сохраняется в переменной
test_text = input ("Введите число: ")

# Преобразуем строку в целое число.
# функция float() используется вместо int(),
# для преобразования пользовательского ввода в десятичный формат,  
test_number = int(test_text)

# Выводим в консоль переменную
print ("Введенное число: ", test_number)

Вывод

Введите число: 13
Введенное число: 13

Того же можно добиться и таким образом:

test_number = int(input("Введите число: "))

Здесь сразу после сохранения ввода происходит преобразование и присваивание значения переменной.

Нужно лишь отметить, что если пользователь ввел не целое число, то код вернет исключение (даже если это число с плавающей точкой).

Обработка исключений ввода

Есть несколько способов, как можно удостовериться в том, что пользователь ввел корректные данные. Один из них — перехватывать все возможные ошибки, которые могут возникнуть.

Вот такой код считается небезопасным:

test2word = input("Сколько вам лет? ")
test2num = int(test2word)
print("Ваш возраст ", test2num)

Запустим его и введем следующее:

Сколько вам лет? Пять

При вызове функции int() со строкой Пять появится исключение ValueError, и программа остановит работу.

Вот как можно сделать код безопаснее и обработать ввод:

test3word = input("Введите свое счастливое число: ")

try:
    test3num = int(test3word)
    print("Это правильный ввод! Ваше счастливое число: ", test3num)
except ValueError:
    print("Это не правильный ввод. Это не число вообще! Это строка, попробуйте еще раз.")

Этот блок оценит ввод. Если он является целым числом, представленным в виде строки, то функция input() конвертирует его в целое число. Если нет, то программа выдаст исключение, но вместо ошибки оно будет перехвачено. В результате вызовется вторая инструкция print.

Вот так будет выглядеть вывод с исключением.

Введите свое счастливое число: Семь
Это не правильный ввод. Это не число вообще! Это строка, попробуйте еще раз.

Такой код можно объединить с другой конструкцией, например, циклом for, чтобы убедиться, что код будет выполняться постоянно, до тех пор, пока пользователь не введет те данные, которые требуются.

Полный пример

# Создадим функцию для демонстрации примера
def example():

    # Бесконечный цикл, который продолжает выполняться  
    # до возникновения исключения
    while True:
        test4word = input("Как вас зовут? ")

        try:
            test4num = int(input("Сколько часов вы играете на своем мобильном телефоне?" ))

        # Если полученный ввод не число, будет вызвано исключение
        except ValueError:
            # Цикл будет повторяться до правильного ввода
            print("Error! Это не число, попробуйте снова.")

        # При успешном преобразовании в целое число,  
        # цикл закончится.
        else:
            print("Впечатляет, ", test4word, "! Вы тратите", test4num*60, "минут или", test4num*60*60, "секунд на игры в своем телефоне!")
            break

# Вызываем функцию
example()

Вывод:

Как вас зовут? Александр
Сколько часов вы играете на своем мобильном телефоне? 3
Впечетляет, Александр! Вы тратите 180 минут или 10800 секунд на игры в своем телефоне!

Выводы

В этой статье вы узнали, как встроенные инструменты Python используются для получения пользовательского ввода в разных форматах. Также научились обрабатывать исключения и ошибки, которые могут возникнуть в процессе.

На чтение 13 мин Просмотров 18к. Опубликовано 20.12.2021

Как говорилось в предыдущей статье, программа – это, чаще всего, обработчик данных, который требует как ввода, так и вывода этих самых данных. В этом уроке мы поговорим о самом простом способе получить данные от пользователя в Python: считать их из консоли функцией input().

Содержание

  1. Ввод в Python
  2. Преобразование вводимых данных
  3. Input() в int
  4. Input() в float
  5. Input() в list (список)
  6. input() вdict(словарь)
  7. Ввод в несколько переменных
  8. Параметр prompt
  9. Обработка исключений ввода
  10. Эмуляция терминала с использованием функции input().
  11. Практическая работа

Ввод в Python

В Питоне есть функция input(), предназначенная для считывания данных, введённых пользователем в консоль с клавиатуры.

Когда вызывается input(), поток выполнения программы останавливается до тех пор, пока пользователь не произведет ввод в терминал.

Для завершения ввода пользователь должен нажать «Enter».

После этого функция input() считывает введённые пользователем данные и автоматически преобразует к строковому типу, даже если это цифры:


переменная = input()
print('переменная:', переменная)
print(type(переменная))

# Вывод:

2

переменная: 2

<class 'str'>

Преобразование вводимых данных

Если Вам необходимо использовать данные, введённые пользователем не как строковые, Вам придётся самостоятельно преобразовать тип данных. Мы уже рассказывали о преобразовании типов, но давайте освежим знания.

Input() в int

Если Вам нужно получить целое число, используйте функцию int():


переменная = input()
print('переменная:', переменная)
print(type(переменная))
новая_переменная = int(переменная)
print('новая_переменная:', новая_переменная)
print(type(новая_переменная))
# Вывод:

3

переменная: 3

<class 'str'>

новая_переменная: 3

<class 'int'>

То же самое можно сделать гораздо короче, используя мощь Питона:


print('переменная: {}'.format(переменная := int(input())), type(переменная), sep='n')
# Вывод:
10
переменная: 10
<class 'int'>

Input() в float

Если нужно получить число с плавающей точкой (не целое), примените  функцию float().


переменная = float(input())
print('переменная:', переменная)
print(type(переменная))
# Вывод:

5

переменная: 5.0

<class 'float'>

Input() в list (список)

Используя некоторые хитрости, можно преобразовать данные, возвращаемые функцией input() в список или другую списко-подобную коллекцию. Для этого надо при помощи метода строки split() разбить её на элементы, используя какой-либо разделитель. Пример с пробелом, в качестве разделителя:


переменная = input().split()
print(переменная)
print(type(переменная))
# Вывод:

1 2 3

['1', '2', '3']

<class 'list'>

Пример с запятой в качестве разделителя:


переменная = input().split(',')
print(переменная)
print(type(переменная))
# Вывод:

1,2,3

['1', '2', '3']

<class 'list'>

Во обоих случаях элементы всё равно имеют строковый тип:


переменная = input().split(',')
print(переменная)
print(type(переменная))
print(list(map(type, переменная)))
# Вывод:

1,2,3

['1', '2', '3']

<class 'list'>

[<class 'str'>, <class 'str'>, <class 'str'>]

Если же Вам нужно преобразовать и их, можно снова использовать функцию преобразования типов в связке с циклом:


переменная = list()
for element in input().split():
    переменная.append(complex(element))
print(переменная)
print([type(num) for num in переменная])
# Вывод:

999 333 666

[(999+0j), (333+0j), (666+0j)]

[<class 'complex'>, <class 'complex'>, <class 'complex'>]

Можно так же использовать списковое включение, что выглядит лаконичнее:


переменная = [complex(element) for element in input().split()]
print(переменная)
print([type(num) for num in переменная])
# Вывод:

999 333 666

[(999+0j), (333+0j), (666+0j)]

[<class 'complex'>, <class 'complex'>, <class 'complex'>]

Но, пожалуй самый «чистый» и производительный способ сделать это, расположен в самых недрах функционального программирования – функция высшего порядка:


переменная = list(map(complex, input().split()))
print(переменная)
print([type(num) for num in переменная])
# Вывод:

999 333 666

[(999+0j), (333+0j), (666+0j)]

[<class 'complex'>, <class 'complex'>, <class 'complex'>]

input() в dict (словарь)

К сожалению, попытки простого преобразования данных input() в dict приводят лишь к извращениям:


переменная = dict()
введённые_данные = input().split()
for i, element in enumerate(введённые_данные):
    if i % 2 == 0 and len(введённые_данные) - i > 1:
        переменная[element] = complex(введённые_данные[i + 1])
print(переменная)
print('Тип ключей:', [type(num) for num in переменная])
print('Тип значений:', [type(num) for num in переменная.values()])
# Вывод:

первый_элемент 12 второй_элемент 54

{'первый_элемент': (12+0j), 'второй_элемент': (54+0j)}

Тип ключей: [<class 'str'>, <class 'str'>]

Тип значений: [<class 'complex'>, <class 'complex'>]

Но, как видите, это работает.

Ввод в несколько переменных

Если необходимо заполнить одним вводом с клавиатуры сразу несколько переменных, воспользуйтесь распаковкой:


переменная, ещё_одна_переменная, последняя_переменная = input().split()

print('Переменная:', переменная)
print('Ещё_одна_переменная:', ещё_одна_переменная)
print('Последняя_переменная:', последняя_переменная)
# Вывод:

Не_верь Не_бойся Не_проси

Переменная: Не_верь

Ещё_одна_переменная: Не_бойся

Последняя_переменная: Не_проси

Не забывайте, что все переменные после распаковки будут строкового типа, а так же, что вводимых элементов должно быть столько же, сколько переменных:

  • если введенных значений больше чем переменных, Вы получите ошибку – ValueError: too many values to unpack (expected 3);
  • если введенных значений меньше чем переменных, Вы получите ошибку – ValueError: not enough values to unpack (expected 3, got 2);

Этого можно избежать, если использовать ещё одну хитрость: распаковку слева))


переменная, ещё_одна_переменная, *остальные_элементы = input().split()
print('Переменная:', переменная)
print('Ещё_одна_переменная:', ещё_одна_переменная)
print('Остальные_элементы:', остальные_элементы)
# Вывод:

Не_верь Не_бойся Не_проси И_успокойся

Переменная: Не_верь

Ещё_одна_переменная: Не_бойся

Остальные_элементы: ['Не_проси', 'И_успокойся']

Параметр prompt

Если использовать функцию input() так, как мы это делали в примерах выше, пользователю будет не ясно, что от него требуется, ведь программа просто остановится. Хорошо было бы вывести пояснение:


print('Введите что-нибудь: ')
input()
# Вывод:

Введите что-нибудь:

что-нибудь

К счастью, эту возможность обеспечивает сама функция input() – Вы можете передать сообщение для пользователя как позиционный аргумент функции (или по имени параметра promt, но так никто не делает) и сообщение будет отображено на экране:


input('Введите что-нибудь: ')
# Вывод:

Введите что-нибудь: что-нибудь

Обработка исключений ввода

Древняя компьютерная мудрость гласит: «не доверяй пользователю». Дело в том, что пользовательский ввод – это место, через которое информация попадает внутрь программы. Здесь можно провести аналогию со ртом, через который пища попадает в организм. Вы ведь не всё подряд засовываете в рот? Очень надеемся, что так и есть!

Продолжая аналогию, можно сказать, что пища (пользовательский ввод) может быть опасной (вирусы, sql инъекции и прочие атаки) или просто не съедобной (ожидаем от пользователя электронный адрес, а он вводит домашний).

Есть целый ряд профессий, направленных на борьбу с этими угрозами: пинтестеры и различные инженеры по информационной безопасности.

В целом, всегда стоит придерживаться правила: пользовательский ввод должен быть проверен!

Давайте немного повоюем с воображаемым программистом. Вот код, который доверчиво ожидает от пользователя ввода числа от 1 до 100:


from math import sqrt

переменная = input('Введите число от 1 до 100: ')
переменная = int(переменная)
print('Корень Вашего числа равен: ', sqrt(переменная))
# Вывод:

Введите число от 1 до 100: шесть

Traceback (most recent call last):

File "C:UsersivandAppDataRoamingJetBrainsPyCharm2021.2scratchesscratch.py", line 4, in <module>

переменная = int(переменная)

ValueError: invalid literal for int() with base 10: 'шесть'

 

Process finished with exit code 1

Добавим проверку, что вводятся не буквы:


from math import sqrt

переменная = input('Введите число от 1 до 100: ')
while True:
    for i in переменная:
        if i.isalpha():
            print('Введите число (ЦИФРАМИ)!')
            переменная = input('Введите число от 1 до 100: ')
            break
    else:
        break

переменная = int(переменная)
print('Корень Вашего числа равен: ', sqrt(переменная))
# Вывод:

Введите число от 1 до 100: шесть

Введите число (ЦИФРАМИ)!

Введите число от 1 до 100: ,,

Traceback (most recent call last):

File "C:UsersivandAppDataRoamingJetBrainsPyCharm2021.2scratchesscratch.py", line 13, in <module>

переменная = int(переменная)

ValueError: invalid literal for int() with base 10: ',,'

 

Process finished with exit code 1

Что ж, добавим проверку, что вводится именно число:


from math import sqrt

переменная = input('Введите число от 1 до 100: ')
while True:
    for i in переменная:
        if not i.isnumeric():
            print('Введите число (ЦИФРАМИ)!')
            переменная = input('Введите число от 1 до 100: ')
            break
    else:
        break

переменная = int(переменная)
print('Корень Вашего числа равен: ', sqrt(переменная))
# Вывод:

Введите число от 1 до 100: 20.5

Введите число (ЦИФРАМИ)!

Введите число от 1 до 100: Ⅻ

Traceback (most recent call last):

File "C:UsersivandAppDataRoamingJetBrainsPyCharm2021.2scratchesscratch.py", line 13, in <module>

переменная = int(переменная)

ValueError: invalid literal for int() with base 10: 'Ⅻ'

 

Process finished with exit code 1

Всё, хватит это терпеть! Проверяем, что пользователь вводит именно целое число:


from math import sqrt

переменная = input('Введите число от 1 до 100: ')
while True:
    for i in переменная:
        if not i.isdigit():
            print('Введите ЧИСЛО (ТОЛЬКО ЦИФРЫ)!!!')
            переменная = input('Введите число от 1 до 100: ')
            break
    else:
        break

переменная = int(переменная)
print('Корень Вашего числа равен: ', sqrt(переменная))
# Вывод:

Введите число от 1 до 100: Ⅻ

Введите ЧИСЛО (ТОЛЬКО ЦИФРЫ)!!!

Введите число от 1 до 100: 1000000

Корень Вашего числа равен:  1000.0

 

Process finished with exit code 0

Здесь, формально, всё прошло гладко, но введённое значение не входит в требуемый диапазон. Как видите, это не так просто. Ещё один способ – принимать любой пользовательский ввод и потом «ловить» ошибки внутри программы:


from math import sqrt

while True:
    переменная = input('Введите число от 1 до 100: ')
    try:
        переменная = int(переменная)
    except:
        print('Введите ЧИСЛО (ТОЛЬКО ЦИФРЫ)!!!')
    else:
        break

print('Корень Вашего числа равен: ', sqrt(переменная))
# Вывод:

Введите число от 1 до 100: шесть

Введите ЧИСЛО (ТОЛЬКО ЦИФРЫ)!!!

Введите число от 1 до 100: 6

Корень Вашего числа равен:  2.449489742783178

 

Process finished with exit code 0

Но обработка исключений не такая простая тема, как может показаться (подробнее можете ознакомиться с исключениями в нашей статье).

К тому же, этот подход не защищает от направленных атак:


while True:
    переменная = input('Введите выражение: ')
    try:
        print('Результат выражения:', eval(переменная))
    except:
        print('Введите выражение на языке Python!')
    else:
        break

# Вывод:

Введите выражение: Попытка атаки

Введите выражение на языке Python!

Введите выражение: 'Я' + ' загружаю' + ' страшный' + ' вирус!'

Результат выражения: Я загружаю страшный вирус!

Эмуляция терминала с использованием функции input().

Для того, чтоб продемонстрировать мощь этой функции, приведём отрывок кода из официальной документации:


def run_user_code(envdir):
    source = input(">>> ")
    try:
        # Выполнение введенного кода с клавиатуры
        exec(source, envdir)
    except Exception as e:
        print("Exception in user code:")
        print("-"*60)
        print(str(e))
        print("-"*60)

# словарь для хранения введенных переменных
envdir = {}

while True:
    run_user_code(envdir)
# Вывод:

>>> переменная = 2

>>> вторая_переменная = 3

>>> print('сумма переменных равна:', переменная + вторая_переменная)

сумма переменных равна: 5

>>> 1 / 0

Exception in user code:

------------------------------------------------------------

division by zero

------------------------------------------------------------

>>>

Практическая работа

  1. Напишите программу, которая запрашивала бы у пользователя его данные: его имя, отчество и фамилию. После этого выводила бы строку:

«Здравствуйте, < фамилия > < имя > < отчество >

  1. Напишите программу, которая предлагала бы пользователю решить пример 666 * 333 // 54. Потом выводила бы на экран правильный ответ и ответ пользователя.
  2. Запросите у пользователя три числа и два арифметических знака. Выведите результат последовательного выполнения данных операций.
  • Главная

  • Инструкции

  • 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 лет), но, чтобы заставить пользователей вводить реалистичные данные, потребуется использовать диапазоны значений. Впрочем, это выходит за рамки данной статьи, а с вводом и с исключением ошибок ввода мы уже разобрались.

В данном учебном курсе мы будем писать программы без графического пользовательского интерфейса, то есть без кнопок, текстовых полей ввода и т. д. Программы будут принимать на вход данные от пользователя с клавиатуры (а чуть позже мы научимся работать с файловым вводом и выводом), а выводить результат будут на экран. Всё взаимодействие с программой будет происходить в командной строке, также называемой консолью или терминалом.

Во введении к курсу мы узнали, что командная строка в среде разработки Visual Studio Code находится внизу на вкладке «Терминал». Именно в ней мы будем вводить данные с клавиатуры, а программа будет выводить результаты. Как было сказано ранее, мы будем писать компьютерные программы, которые принимают на вход данные, работают с ними и выводят результат на экран.

Вспомним программу из введения:

print("Привет, мир!")

В этой программе мы вызываем встроенную функцию под названием print(). Как она устроена внутри, нам пока не столь важно. Главное — запомнить, что у неё есть имя, по которому к ней можно обратиться, плюс она принимает данные и обрабатывает их. О том, какими могут быть данные, мы тоже поговорим позже — в нашем примере мы передаём строку «Привет, мир!».

В Python строки заключены в кавычки — можно использовать одинарные, двойные и тройные (рекомендуется их составлять из трёх двойных). Внутри кавычек одного вида можно использовать другой вид кавычек как часть выводимой на экран строки.

Например:

  • print('Привет, мир!')
  • print("Привет, мир!")
  • print("""Привет, мир!""")
  • print("Программа выводит фразу 'Привет, мир!'")

Данные в программу могут поступать различными способами. Самый простой и привычный для пользователя — это ввод с клавиатуры. Для этого в Python используется функция input(), которая возвращает в программу введённую пользователем строку. Но данные нужно куда-то сохранить, и в этом нам помогают переменные. Переменным назначаются имена, в них записываются значения, и затем они используются в программе по мере необходимости.

Напишем программу, которая получает от пользователя строку и выводит на экран:

phrase = input()
print(phrase)

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

1_1.png

После ввода данных необходимо нажать клавишу Enter. Программа запишет введённые данные в переменную phrase и продолжит выполнение со следующей строчки. Переменная начинает существовать в программе, когда в неё записывается какое-то значение. В момент записи значения переменной назначается тип данных, определённый в соответствии со значением.

В нашем примере в переменную phrase записывается строка, введённая пользователем. Поэтому переменной phrase назначается встроенный в язык Python тип данных str. Тип данных str используется для хранения строк, а сами строки являются упорядоченной последовательностью символов.

У функции input() можно задать параметр-строку перед вводом значения — и тогда указанный текст будет сопровождать приглашение к вводу данных:

phrase = input("Введите строку: ")
print(phrase)

1_2.png

Для именования переменных и правильного оформления кода существует стандарт 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

Чтобы закрепить новые знания, рекомендуем вам прорешать задачи для этой главы. А в следующей вы узнаете, как создавать программы, способные учитывать несколько вариантов развития событий.

  • Базовые конструкции языка
  • Переменные, оператор присваивания, типы данных
  • Функции input и print ввода/вывода
  • Арифметические операции
  • Условный оператор if и составные условия
  • Операторы циклов, операторы break и continue
  • Главная
  • Основы Python
  • Базовые конструкции языка

На этом занятии
рассмотрим две функции:

  • input() – для ввода
    данных с клавиатуры;

  • print() – для вывода
    данных в консоль.

Начнем с первой. Вызвать функцию input можно таким
образом:

и после ее запуска среда выполнения
будет ожидать от нас ввода данных. Введем, допустим, число 5 и нажмем enter. Смотрите, эта
функция возвратила нам это число, но в виде строки:

‘5’

В действительности, данная функция
всегда возвращает строку, чего бы мы не вводили с клавиатуры. Ну хорошо, а как
нам сохранить в переменной введенное значение? Это можно сделать так:

Теперь, на все введенные данные будет
ссылаться переменная a.

Несмотря на то, что input всегда
возвращает строки, нам в программах в ряде случаев будет требоваться ввод
чисел. И здесь возникает вопрос: как число из строки преобразовать в обычное
число, которое можно будет в последствие использовать в арифметических
операциях? Это делается с помощью функции

int(<аргумент>)

Данная функция
пытается переданный аргумент преобразовать в число и вернуть уже числовое
значение. Например:

вернет число 5, или

преобразует
значение a в числовое.
Однако, здесь следует быть осторожным и иметь в виду, что если аргумент не
удается преобразовать в число, то возникнет ошибка:

Отлично, с этим
разобрались. Теперь мы можем преобразовывать строки в числа, используя такую
конструкцию:

Здесь сначала
сработает input, а затем,
введенное строковое значение будет преобразовываться в число и переменная a уже будет
ссылаться на числовое значение. Благодаря этому, данную переменную можно в
дальнейшем использовать в арифметических операциях, например:

и так далее (об
арифметических операциях речь пойдет на следующем занятии).

По аналогии с int работает функция

float(<аргумент>)

которая
преобразовывает строку в вещественное число. С ее помощью можно выполнять,
например, такие преобразования:

Каждый раз мы
будем получать вещественные значения. То есть, можно записывать и такую
конструкцию:

и вводить любые
вещественные числа.

В качестве
примера рассмотрим простую программу вычисления периметра прямоугольника:

w = float(input())
h = float(input())
p = 2*(w+h)
print(p)

Но здесь есть
небольшое неудобство: при вводе значений пользователь не знает, что именно ему
вводить. Нужно написать подсказки. Это реализуется так:

w = float(input("Введите ширину: "))
h = float(input("Введите длину: "))

Теперь, он видит
сообщение и понимает что нужно вводить с клавиатуры.

print

О функции print мы уже немного
говорили на предыдущем занятии, здесь рассмотрим подробнее различные
возможности ее использования. Например, эту функцию можно записывать в таких
вариациях:

print(1)
print(1, 2)
print(1, 2, 3)

И так далее,
число аргументов может быть произвольным. Соответственно все эти значения в
строчку будут выведены в консоли. Причем, значения разделяются между собой
пробелом. Это разделитель, который используется по умолчанию. Если нужно
изменить значение этого разделителя, то для этого используется специальный
именованный аргумент sep:

print(1, 2, 3, sep=",")
print(1, 2, 3, sep="-")
print(1, 2, 3, sep="***")

то есть, здесь можно прописывать самые разные строки-разделители.

Далее, вы уже
заметили, что каждый вызов функции print делает перевод
строки. Этот символ автоматически добавляет в конец выводимых данных. Но, мы
также можем его изменить. Для этого используется именованный аргумент end:

print(1, 2, 3, sep=",", end=':')
print(1, 2, 3, sep="-", end='--end--n')
print(1, 2, 3, sep="***")

Смотрите, теперь
у нас после первой строчки нет перевода строки, а поставлено двоеточие с
пробелом, которые мы указали в аргументе end. После второго
вывода в конце была добавлена строчка и указан символ ‘n’ перевода
строки.

В качестве
примера все это можно использовать для более гибкого вывода значений с помощью print:

name = "Федор"
print("Имя", name, sep=":")

Но это не самый
удобный вывод значений. Функция print позволяет делать довольно гибкий
форматированный вывод данных с применением спецификаторов. Например:

name = "Федор"; age = 18
print("Имя %s, возраст %d"%(name, age))

В результате,
вместо спецификатора %s будет подставлена первая переменная,
указанная в скобках, в виде строки, а вместо %d – вторая
переменная age в виде целого
числа. То есть, для каждого типа данных существует свой спецификатор. Наиболее
употребительные, следующие:

  • %d, %i, %u – для вывода целочисленных
    значений;

  • %f – для вывода
    вещественных значений;

  • %s
    – для
    вывода строк;

  • %%
    — для
    вывода символа %

Вот основные
возможности функций input и print в Python.

Видео по теме

  • Предыдущая
  • Следующая

Понравилась статья? Поделить с друзьями:
  • Как пишется imei
  • Как пишется imac
  • Как пишется ikea на английском
  • Как пишется icloud на английском
  • Как пишется ice cream на английском