Ввод данных
Часто в программах требуется, чтобы человек ввел какое-нибудь число или строку или выполнил любое другое действие. Это можно назвать вводом данных в программу. Мы уже с этим сталкивались в скриптах, ожидающих от пользователя нажатия клавиш клавиатуры или мыши.
Также программы могут просить человека ввести какое-нибудь число или строку. После этого программа связывает полученные данные с именем какой-нибудь переменной, чтобы сохранить данные и потом их использовать.
Вспомним один из скриптов прошлого занятия:
Если мы хотим предоставить человеку самому определять скорость, а не ограничивать ее только тремя вариантами, код станет проще:
Когда выполняется команда «спросить … и ждать», на сцене появляется поле, куда пользователь должен что-то ввести и нажать Enter на клавиатуре. Также он может ничего не вводить, а просто нажать Enter.
В Scratch команда «спросить … и ждать» блокирует свой скрипт, но не другие. Блокирует она свой скрипт до тех пор, пока не будет нажат Enter в поле ввода. После этого то, что было введено в поле, присваивается встроенной переменной «ответ», которая далее используется в скрипте.
Что будет, если человек введет не число, а слова? Переменная «ответ» будет содержать введенную строку текста. Но поскольку в команду «идти … шагов» бессмысленно подставлять строку, скорость кота не изменится.
Допустим, мы хотим, чтобы в случае ввода текста, скрипт не пыталась его подставлять в команду «идти … шагов». Вместо этого на сцене появлялось бы сообщение о неправильном вводе.
В Scratch нет команды проверки, введено число или строка. Однако можно придумать способ это узнать. В Scratch если выполнить над строкой арифметическую операцию, то результатом будет число 0. Например, если взять из положительного числа модуль, то вернется само число. Если же попытаться взять модуль из строки, что бессмысленно, будет получен 0.
Таким образом, если модуль ответа не совпадает с самим ответом, значит было введено что-то не то: либо строка, либо отрицательное число. Если же модуль ответа совпадает с самим ответом, значит было введено положительное число.
Рассмотрим второй пример использования команды «спросить … и ждать». Пусть наша программа складывает три числа, которые вводит пользователь. Здесь уже не обойтись одной встроенной переменной «ответ». Придется создавать свои. При этом задачу можно решить разными способами.
Во первых, каждое число можно присваивать отдельной переменной, а потом выводить их сумму.
Второй вариант – создать одну переменную, в которой постепенно накапливать сумму.
Составьте программу, в которой пользователь вводит координаты точки. После этого спрайт переходит в указанную точку, ждет секунду и опять запрашивает новые координаты.
В системе зарегистрированы три пользователя – Вася, Петя и Варя. Если в систему пытается войти один из них, кот его приветствует, говоря его имя, к которому добавляет слово «привет». Если в систему пытается проникнуть посторонний, кот включает аварийную сигнализацию, то есть мяукает.
Функция input() передает введенные данные в программу. Их можно присвоить переменной. В этом случае интерпретатор не выводит строку сразу же:
В данном случае строка сохраняется в переменной answer, и при желании мы можем вывести ее значение на экран.
Куда интересней использовать функцию input() в скриптах – отдельно взятых файлах с кодом. Рассмотрим такую программу:
Результат выполнения получиться следующий:
Обратите внимание, что в программу поступает строка. Даже если ввести число, функция input() все равно вернет его строковое представление. Но что делать, если надо получить число? Ответ: использовать функции преобразования типов:
Результат выполнения может быть следующий:
В данном случае с помощью функций int() или float() строковые значения переменных number_1 и number_2 преобразуются соответственно в целое число или дробное число. После этого новые численные значения присваиваются тем же переменным.
# Упражнения
Напишите программу, которая запрашивала бы у пользователя:
После этого выводила бы три строки:
Напишите программу, которая предлагала бы пользователю ввести три числа, а затем решить пример составленный из введенных чисел. Потом выводила бы на экран правильный ответ и ответ пользователя. Пример должен вычисляться. Подумайте, нужно ли здесь преобразовывать строку в число.
Результат выполнения может быть следующий:
Другой пример выполнения этой же программы:
Запросите у пользователя четыре числа. Отдельно сложите первые два, отдельно вторые два числа и выведите суммы. Разделите первую сумму на вторую и выведите результат на экран.
Input Python
Как говорилось в предыдущей статье, программа – это, чаще всего, обработчик данных, который требует как ввода, так и вывода этих самых данных. В этом уроке мы поговорим о самом простом способе получить данные от пользователя в Python: считать их из консоли функцией input().
Ввод в Python
В Питоне есть функция input(), предназначенная для считывания данных, введённых пользователем в консоль с клавиатуры.
Когда вызывается input(), поток выполнения программы останавливается до тех пор, пока пользователь не произведет ввод в терминал.
Для завершения ввода пользователь должен нажать «Enter».
После этого функция input() считывает введённые пользователем данные и автоматически преобразует к строковому типу, даже если это цифры:
Преобразование вводимых данных
Если Вам необходимо использовать данные, введённые пользователем не как строковые, Вам придётся самостоятельно преобразовать тип данных. Мы уже рассказывали о преобразовании типов, но давайте освежим знания.
Input() в int
Если Вам нужно получить целое число, используйте функцию int():
Input() в float
Если нужно получить число с плавающей точкой (не целое), примените функцию float().
Input() в list (список)
Используя некоторые хитрости, можно преобразовать данные, возвращаемые функцией input() в список или другую списко-подобную коллекцию. Для этого надо при помощи метода строки split() разбить её на элементы, используя какой-либо разделитель. Пример с пробелом, в качестве разделителя:
input() в dict (словарь)
К сожалению, попытки простого преобразования данных input() в dict приводят лишь к извращениям:
Ввод в несколько переменных
Если необходимо заполнить одним вводом с клавиатуры сразу несколько переменных, воспользуйтесь распаковкой:
Этого можно избежать, если использовать ещё одну хитрость: распаковку слева))
Параметр prompt
Если использовать функцию input() так, как мы это делали в примерах выше, пользователю будет не ясно, что от него требуется, ведь программа просто остановится. Хорошо было бы вывести пояснение:
Обработка исключений ввода
Древняя компьютерная мудрость гласит: «не доверяй пользователю». Дело в том, что пользовательский ввод – это место, через которое информация попадает внутрь программы. Здесь можно провести аналогию со ртом, через который пища попадает в организм. Вы ведь не всё подряд засовываете в рот? Очень надеемся, что так и есть!
Продолжая аналогию, можно сказать, что пища (пользовательский ввод) может быть опасной (вирусы, sql инъекции и прочие атаки) или просто не съедобной (ожидаем от пользователя электронный адрес, а он вводит домашний).
Есть целый ряд профессий, направленных на борьбу с этими угрозами: пинтестеры и различные инженеры по информационной безопасности.
В целом, всегда стоит придерживаться правила: пользовательский ввод должен быть проверен!
Давайте немного повоюем с воображаемым программистом. Вот код, который доверчиво ожидает от пользователя ввода числа от 1 до 100:
Получение пользовательского ввода в Python с input()
Получение и обработка информации — один из важнейших элементов любого языка программирования, особенно если речь идет о получении информации от пользователей.
Python, будучи медленным относительно таких языков, как C или Java, предлагает продвинутые инструменты для получения, анализа и обработки данных от конечного пользователя.
В этом материале речь пойдет о том, какие функции Python можно использовать для этих целей.
Ввод в Python
Когда input() или raw_input() вызываются, поток программы останавливается до тех пор, пока пользователь не введет данные через командную строку. Для ввода нужно нажать Enter после завершения набора текста. Обычно Enter добавляет символ новой строки ( \n ), но не в этом случае. Введенная строка просто будет передана приложению.
Сравнение функций input и raw_input
Разница между этими функциями зависит от версии Python. Так, в Python 2 функция raw_input() используется для получения ввода от пользователя через командную строку, а input() оценивает ее и попробует запустить как код Python.
Взгляните на пример функции raw_input в Python 2.
Вывод
А вот как она работает в Python 3
Вывод
Дальше в материале будет использоваться метод input из Python 3, если не указано другое.
Строковый и числовой ввод
По умолчанию функция input() конвертирует всю получаемую информацию в строку. Прошлый пример продемонстрировал это.
С числами нужно работать отдельно, поскольку они тоже изначально являются строками. Следующий пример показывает, как можно получить информацию числового типа:
Вывод
Того же можно добиться и таким образом:
Здесь сразу после сохранения ввода происходит преобразование и присваивание значения переменной.
Нужно лишь отметить, что если пользователь ввел не целое число, то код вернет исключение (даже если это число с плавающей точкой).
Обработка исключений ввода
Есть несколько способов, как можно удостовериться в том, что пользователь ввел корректные данные. Один из них — перехватывать все возможные ошибки, которые могут возникнуть.
Вот такой код считается небезопасным:
Запустим его и введем следующее:
Вот как можно сделать код безопаснее и обработать ввод:
Вот так будет выглядеть вывод с исключением.
Такой код можно объединить с другой конструкцией, например, циклом for, чтобы убедиться, что код будет выполняться постоянно, до тех пор, пока пользователь не введет те данные, которые требуются.
Полный пример
Вывод:
Выводы
В этой статье вы узнали, как встроенные инструменты Python используются для получения пользовательского ввода в разных форматах. Также научились обрабатывать исключения и ошибки, которые могут возникнуть в процессе.
Диалог с пользователем
Напишем программу, которая сумеет провести с пользователем короткий, более или менее осмысленный диалог.
Сначала программа спрашивает у пользователя, какое у него настроение. Затем ответ анализируется. Предполагается, что пользователь отвечает словом или фразой, записанной строчными буквами.
Если в ответе пользователя есть ключевые слова вроде «хорошее», «прекрасно» (в любой форме), программа отвечает что-нибудь подходящее — например «Отлично, у меня тоже всё хорошо 
Если же встречаются слова вроде «плохо», то нужно ответить что-то подходящее и на этот случай (например, «Ничего, скоро всё наладится»).
Если ключевых слов того или другого типа не найдено, программа отвечает что-то нейтральное или извиняется и говорит, что не понимает пользователя. То же происходит, если в ответе есть «не» или вопросительный знак.
Случай, когда в ответе есть и «хорошие», и «плохие» слова, можно не рассматривать.
Многошаговый диалог с пользователем
Здравствуйте, уважаемые коллеги! С недавних пор самостоятельно изучаю Django и пытаюсь писать с.
Диалог с пользователем
Подскажите пож,как в Swing организовать стандартное окно с функционалом «назад» «далее» «прервать».

Итак, через set /p прошу пользователя ввести некое значение, которое задаю переменной %p%. Теперь.
Многократный диалог с пользователем
Помогите пожалуйста,нужно с помощью функции организовать многократный диалог с пользователем о.
