Обычно программа работает по такой схеме: получает входные данные → обрабатывает их → выдает результат. Ввод может поступать как непосредственно от пользователя через клавиатуру, так и через внешний источник (файл, база данных).
В стандартной библиотеке Python 3 есть встроенная функция input() (в Python 2 это raw_input() ), которая отвечает за прием пользовательского ввода. Разберемся, как она работает.
Чтение ввода с клавиатуры
Функция input([prompt]) отвечает за ввод данных из потока ввода:
s = input() print(f»Привет, !») > мир # тут мы с клавиатуры ввели слово «мир» > Привет, мир!
- При вызове функции input() выполнение программы приостанавливается до тех пор, пока пользователь не введет текст на клавиатуре (приложение может ждать бесконечно долго).
- После нажатия на Enter , функция input() считывает данные и передает их приложению (символ завершения новой строки не учитывается).
- Полученные данные присваиваются переменной и используются дальше в программе.
input() всегда возвращает строку :
Input, int() ,float() ,str() , and print methods
s = input() print(type(s)) > 2 >
Также у input есть необязательный параметр prompt – это подсказка пользователю перед вводом:
name = input(«Введите имя: «) print(f»Привет, !») > Введите имя: Вася > Привет, Вася!
Более подробное описание функции из документации:
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»Комната успешно забронирована!») > Введите номер комнаты: test > Вы ввели не число. Повторите ввод > Введите номер комнаты: 13 > Комната 13 успешно забронирована!
Input() → int
Для преобразования в целое число используйте функцию int() . В качестве аргумента передаются данные которые нужно преобразовать, а на выходе получаем целое число:
5 Ввод и вывод данных python. Команда input()
age_str = input(«Введите ваш возраст: «) age = int(age_str) print(age) print(type(age)) > Введите ваш возраст: 21 > 21 >
То же самое можно сделать в одну строку: age = int(input(«Введите ваш возраст: «)) .
Input() → float
Если нужно получить число с плавающей точкой (не целое), то его можно получить с помощью функции float() .
weight = float(input(«Укажите вес (кг): «)) print(weight) print(type(weight)) > Укажите вес (кг): 10.33 > 10.33 >
Input() → list (список)
Если в программу вводится информация, которая разделяется пробелами, например, «1 word meow», то ее легко преобразовать в список с помощью метода split() . Он разбивает введенные строки по пробелам и создает список:
list = input().split() print(list) print(type(list)) > 1 word meow > [‘1’, ‘word’, ‘meow’] >
Обратите внимание, что каждый элемент списка является строкой. Для преобразования в число, можно использовать 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 > [, , ]
Ввод в несколько переменных
Если необходимо заполнить одним вводом с клавиатуры сразу несколько переменных, воспользуйтесь распаковкой:
В этом примере строка из input() разбивается по пробелу функцией split() . Далее применяется синтаксис распаковки – каждый элемент списка попадает в соответствующую переменную.
Все переменные после распаковки будут строкового типа. Преобразовать их (например в int) можно так:
a, b = [int(s) for s in input().split()] print(f»type a: , type b: «) > 13 100 > type a: , type b:
☝️ Важно : не забывайте обрабатывать ошибки:
- если введенных значений больше чем переменных, получите ошибку – 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 и обрабатывать исключения.
Источник: pythonchik.ru
Пользовательский ввод чисел в строку
Функция input() возвращает все в виде строки, поэтому нужно выполнить явную конвертацию, чтобы получить целое число. Для этого пригодится функция int() .
# вывод суммы двух чисел, введенных пользователем
num_1 = int(input(«Введите первое число: «))
num_2 = int(input(«Введите второе число: «))
print(«Тип num_1:», type(num_1))
print(«Тип num_2:», type(num_2))
result = num_1 + num_2
print(«Сумма введенных чисел:», result)
int(string) конвертирует переданную строку в целое число.
Ввода числа float
По аналогии можно использовать функцию float() .
float_1 = float(input(«Введите число: «))
print(«Тип float_1:», type(float_1))
result = float_1 ** 2
print(«Число в квадрате:», result)
Введите число: 1.8 Тип float_1: Число в квадрате: 3.24
Ввод чисел в строку через пробел
Но что произойдет, если вы не знаете количество элементов ввода?
Предположим, что от пользователя нужно получить список чисел и вернуть их сумму. При этом вы не знаете количество элементов в этом списке. Как же запросить ввод для него?
Для этого можно использовать split и функции map . Метод split() делит введенную строку на список подстрок. После этого map() выполняет функцию int() для каждого элемента списка.
entered_list = input(«Введите список чисел, разделенных пробелом: «).split()
print(«Введенный список:», entered_list)
num_list = list(map(int, entered_list))
print(«Список чисел: «, num_list)
print(«Сумма списка:», sum(num_list))
Введите список чисел, разделенных пробелом: 1 34 4 6548 Введенный список: [‘1′, ’34’, ‘4’, ‘6548’] Список чисел: [1, 34, 4, 6548] Сумма списка: 6587
- input() возвращает список, содержащий числа, разделенные запятыми.
- split() возвращает список строк, разделенных пробелами.
- map() выполняет операцию int() для всех элементов списка и возвращает объект map .
- list() конвертирует объект map снова в список.
Есть альтернативный способ получить список:
entered_list = input(«Введите список чисел, разделенных пробелом: «).split()
num_list = [int(i) for i in entered_list]
print(«Список чисел: «, num_list)
Обработка ошибок при пользовательском вводе
Часто при конвертации типов возникает исключение ValueError .
Это происходит в тех случаях, когда введенные пользователем данные не могут быть конвертированы в конкретный тип.
Например, пользователь вводит случайную строку в качестве возраста.
num = int(input(«Введите возраст: «))
Функция int() ожидает целочисленное значение, обернутое в строку. Любое другое значение приводит к ошибке. Вот что будет, если, попробовать ввести «Двадцать»:
Введите возраст: Двадцать ——————————————————— ValueError Traceback (most recent call last) in —-> 1 num_1 = int(input(‘Введите возраст: ‘)) ValueError: invalid literal for int() with base 10: ‘Двадцать’
Чтобы убедиться, что пользователь вводит только подходящую информацию, нужно обработать массу подобных ошибок. Для этого будем использовать перехват исключений.
try:
num = int(input(«Введите число: «))
print(«Все верно. Число:», num)
except ValueError:
print(«Это не число.»)
Посмотрим, как ввод «Двадцать» сработает теперь:
Введите число: Двадцать Это не число.
В этом примере если пользователь вводит нечисловое значение, то возникает исключение. Однако оно перехватывается инструкцией except , которая в ответ выводит: «Это не число». Благодаря использованию конструкции try-except программа не прекратит работать при некорректном вводе.
Обучение с трудоустройством
| Программирование
Python-разработчик
| Data Science
Data Scientist
| Программирование
Fullstack-разработчик на Python
| Data Science
Data Scientist: анализ данных
Я создал этот блог в 2018 году, чтобы распространять полезные учебные материалы, документации и уроки на русском. На сайте опубликовано множество статей по основам python и библиотекам, уроков для начинающих и примеров написания программ.
Мои контакты: Почта
Python Q https://yandex.ru/q/loves/python Online
Источник: pythonru.com
ВВОД ДАННЫХ
Источник данных — источник, при обращении к которому программа получает формализованную, то есть приведённую к определённому виду в соответствие с определёнными правилами, информацию.
Формализация в общем случае требует, что мы, прежде чем запрашивать данные, должны полностью понимать, каким образом и в каком виде поступает информация: текст ли это, числа, табличная форма с полями, HTML-код и прочее.
Важен и метод получения информации. Например, при чтении из файла мы можем воспользоваться одним из трёх способов получения данных: загрузить в память файл полностью, либо загружать по одной строке последовательно, либо — посимвольно. В зависимости от выбранного способа мы пишем алгоритм обработки этих данных.
Источниками данных могут являться:
Несмотря на многообразие источников, в данной части учебника мы будем использовать ввод данных только с клавиатуры; в последнем разделе, где напишем игру с использованием Tkinter, — данные будут вводиться с помощью «мыши».
ВВОД С КЛАВИАТУРЫ
С клавиатуры мы можем получить два типа данных:
Программисту необходимо чётко осознавать, какой тип данных он запрашивает у пользователя. Исходя из типа данных пишется код для получения информации.
![]() |
Набранное на клавиатуре всегда поступает в программу в текстовой форме (тип str). Мы должны преобразовать строку в число, если нам требуются математические операции с данными. |
Ввод данных с клавиатуры осуществляет функция input().
input()
Функция input() возвращает данные, набранные пользователем на клавиатуре. Данные передаются только тогда, когда нажата клавиша Enter. Процесс набора текста в момент запроса данных с помощью input() никак не контролируется. До нажатия Enter’a проверить набираемое человеком на, например, корректность, невозможно.
![]() |
Если в программе нам нужны числа, а пользователь упорно вводит символы, — сделать мы с этим ничего не сможем. Лишь потом, когда он успокоится и нажмёт Enter, программа получит эти данные и мы злорадно сообщим, что требовалось число, а не текст, и попросим ввести данные заново. |
Фраза функция возвращает данные означает, что записав название функции (в нашем случае input()) мы можем быть твёрдо уверены в том, что получим результат её работы. Возвращение данных можно сравнить с разговором.
Вы спрашиваете у друга:
— У тебя когда днюха?
Он отвечает:
— Одинадцатого апреля!
Ваш вопрос — это функция. Ответ собеседника — результат работы функции, информация, которую вы сохраняете в памяти и по необходимости используете.
![]() |
Функция input() возвращает «ответ» на вопрос «Что ввёл пользователь?» |
s = input(«Введите данные: «)
Здесь s — переменная, в которую Python поместит результат работы функции: введённые символы, input() — функция.
В круглых скобках мы указываем строку-приглашение. Не пренебрегайте строкой-приглашением, каждая уважающая себя программа, запрашивая данные, помечает, что она имеет ввиду. Тем более не забывайте, что пользователь не видит вашего программного кода и не понимает, что программа от него требует.
![]() |
Обязательно используйте строку-приглашение. Она записывается в круглых скобках после имени функции и заключена в кавычки. |
Как же сработает программа?
s = input(«Введите данные: «)
Выглядит сложно? Разрушить кажущуюся сложность легко: просто попробуйте, как это работает!
ВВОД СТРОКИ
Поставим себе несложную задачу: спросить у пользователя имя и вывести его на экран. Решается предельно просто:
s = input(«Введите ваше имя: «) print(s)
Введите ваше имя: Виктор Виктор
Если переменная s не инициализирована, то есть ей не задано значение, то возникнет ошибка. Программа из одной строки:
NameError: name ‘s’ is not defined
Ошибка имени: идентификатор ‘s’ не определён.
ВЫВОД НЕСКОЛЬКИХ АРГУМЕНТОВ
Усложним предыдущую задачу: спросим у пользователя имя и выведем приветствие: «Привет, ИМЯ_ПОЛЬЗОВАТЕЛЯ! Как твои дела?».
Получать имя пользователя мы научились, определимся с выводом нескольких аргументов, то есть формированием выходной строки.
![]() |
Аргументами называются передаваемые в функцию значения. Например, функция print() выводит на экран всё, что мы укажем в скобках. Указанное и будет аргументом (или аргументами) — например, имя переменной, имя другой переменной, текст, заключённый в кавычки, формула и т.д. |
Каждый аргумент функции print() перечисляется через запятую. Как прилагательные в великом, могучем, родном, красивом, пушкинском русском языке.
Общий вид команды print() с несколькими аргументами.
print(«Привет», «Как», «Твои», «Дела?»)
Привет Как Твои Дела?
Отметьте для себя наличие запятых после каждой части фразы.
![]() |
Аргументы перечисляются через запятую. |
userName = input(«Введите ваше имя: «) print(«Привет,», userName, «! Как твои дела?»)
Введите ваше имя: Виктор Привет, Виктор ! Как твои дела?
![]() |
Обратите внимание на написание переменной userName. Слово «Name», так как является вторым словом, составляющим идентификатор, записано с заглавной буквы. Python’у, в общем, это без разницы. Так — каждое новое слово с большой буквы — принято писать у профессиональных программистов. |
Но у нас есть ещё одна проблема. Дело в том, что запись восклицательного знака на расстоянии в пробел от имени (да и любого слова) не соответствует стандартам. То есть так нельзя: «Привет, Виктор !» Нужно так: «Привет, Виктор!» Восклицательный знак «прижат» к слову.
Происходит из-за того, что print() по умолчанию между перечисленными через запятую аргументами ставит пробел. Исправим программу, воспользовавшись конкатенацией, то есть сложением строк:
userName = input(«Введите ваше имя: «) print(«Привет,», userName + «!», «Как твои дела?»)
Введите ваше имя: Виктор Привет, Виктор! Как твои дела?
Бинго! Злосчастный пробел убран!
print(«Привет,», userName + «!», «Как твои дела?»)
. вы можете записывать в одну строку. Главное не запутайтесь в запятых:
print(«Привет,», userName + «!», «Как твои дела?»)
Строка в отдельную переменную:
userName = input(«Введите ваше имя: «) outString = «Привет, » + userName + «! Как твои дела?» print(outString)
ВВОД ЦЕЛЫХ ЧИСЕЛ
Данные, получаемые с помощью input() всегда являются строковым значением str. Со строками мы не можем выполнять математические действия — вычитать, например, или делить. Даже если введём в строковые переменные числа:
a = input(«Введите число: «) b = input(«Введите число: «) summa = a + b print(«Сумма чисел:», summa)
Введите число: 35 Введите число: 15 Сумма чисел: 3515
То есть сработало присоединение, конкатенация. «Что же делать?» — спросите вы. А я вам отвечу: «Преобразовать тип!»
Если нам нужно получить целое число, то пользуемся функцией int(), которая пытается преобразовать строку в целое число.
Почему «пытается»? Потому что если в строке будут находиться буквы или знаки препинания, то Python выдаст ошибку. То есть int(«100») — сработает, а int(«Привет!») загубит программу.
a = int(input(«Введите число: «))
a = int(input(«Введите число: «)) b = int(input(«Введите число: «)) summa = a + b print(«Сумма чисел:», summa)
Введите число: 35 Введите число: 15 Сумма чисел: 50
Бинго! Теперь Python в соответствие с правилами математических выражений может работать с введёнными значениями, принимая их за числа.
Но если пользователь окажется коварен, хитёр и введёт дробное значение, то Python выдаст ошибку:
Введите число: 3.14 Traceback (most recent call last): File «D:PythonВвод значений.py», line 1, in a = int(input(«Введите число: «)) ValueError: invalid literal for int() with base 10: ‘3.14’
Пока избежать мы этого не можем. Поэтому при тестировании программы всегда следите за вводимыми данными. Проверку поставим потом.
ПРОГРАММА ДЛЯ БАБУШКИ
Пишем программу, которая поможет бабушке определить площадь прямоугольника. Комнаты, например, или дачного участка.
![]() |
Дружеский совет: при написании любой программы задавайтесь вопросом — а сможет ли вашей программой пользоваться бабушка? Или двухлетний брат? Ваша задача — писать простые и понятные программы с простым и понятным интерфейсом. Пользователь не должен гадать, что же вы от него хотите. Пользователь должен видеть нужное и не видеть ненужное. |
Подумал. А вдруг бабушка, которая станет читать этот учебник, не знает значение слова «интерфейс»? Итак, специально для Вас, Бабушка:
Площадь для бабушки. Листинг программы (текст кода):
print(«Здравствуй, дорогая бабушка!») print(«Написал специально для тебя программу,») print(«которая может посчитать площадь, например, комнаты.») print(«Просто введи нужные (целые!) числа и нажми Enter.») a = int(input(«Введи длину комнаты: «)) b = int(input(«Введи ширину комнаты: «)) resultat = a * b print(«Площадь комнаты text/javascript»>document.write(«
«)Здравствуй, дорогая бабушка! Написал специально для тебя программу, которая может посчитать площадь, например, комнаты. Просто введи нужные (целые!) числа и нажми Enter. Введи длину комнаты: 4 Введи ширину комнаты: 3 Площадь комнаты = 12
- Блок вывода: 1-4 строка с командами print().
- Блок ввода: запрос значений a и b.
- Блок обработки: вычисление значения resultat = a * b.
- Блок вывода: вывод на экран результата.
Крик восхищения
Братцы, да эта программа идеальна!
Источник: www.vgtrofimov.ru