ВВОД ДАН­НЫХ



Источник данных - источник, при обращении к которому программа получает формализованную, то есть приведённую к определённому виду в соответствие с определёнными правилами, информацию.

Формализация в общем случае требует, что мы, прежде чем запрашивать данные, должны полностью понимать, каким образом и в каком виде поступает информация: текст ли это, числа, табличная форма с полями, HTML-код и прочее.

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

Источниками данных могут являться:

Несмотря на многообразие источников, в данной части учебника мы будем использовать ввод данных только с клавиатуры; в последнем разделе, где напишем игру с использованием Tkinter, - данные будут вводиться с помощью "мыши".


ВВОД С КЛА­ВИАТУРЫ


С клавиатуры мы можем получить два типа данных:

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

Набранное на клавиатуре всегда поступает в программу в текстовой форме (тип str). Мы должны преобразовать строку в число, если нам требуются математические операции с данными.

Ввод данных с клавиатуры осуществляет функция input().


input()


Функция input() возвращает данные, набранные пользователем на клавиатуре. Данные передаются только тогда, когда нажата клавиша Enter. Процесс набора текста в момент запроса данных с помощью input() никак не контролируется. До нажатия Enter'a проверить набираемое человеком на, например, корректность, невозможно.

Если в программе нам нужны числа, а пользователь упорно вводит символы, - сделать мы с этим ничего не сможем. Лишь потом, когда он успокоится и нажмёт Enter, программа получит эти данные и мы злорадно сообщим, что требовалось число, а не текст, и попросим ввести данные заново.

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

Вы спрашиваете у друга:
- У тебя когда днюха?
Он отвечает:
- Одинадцатого апреля!

Ваш вопрос - это функция. Ответ собеседника - результат работы функции, информация, которую вы сохраняете в памяти и по необходимости используете.

Функция input() возвращает "ответ" на вопрос "Что ввёл пользователь?"

Оформление:

s = input("Введите данные: ")

Здесь s - переменная, в которую Python поместит результат работы функции: введённые символы, input() - функция.

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

Обязательно используйте строку-приглашение. Она записывается в круглых скобках после имени функции и заключена в кавычки.

Как же сработает программа?

s = input("Введите данные: ")

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

    Введите данные: _

  2. В этот момент выполнение программы приостановится, Python ждёт действий пользователя.
  3. Пользователь получил возможность набрать (то есть напечатать, олдскульный термин) на клавиатуре какую-нибудь фразу. Есть возможность редактировать набранное, пользуясь клавишами управления курсором (попросту стрелочками), кнопками BackSpace, Delete.
  4. После того, как данные набраны, пользователь нажимает Enter.
  5. Введённая информация помещаются в переменную s (запоминаются компьютером).
  6. Программа продолжает работать дальше, со следующей строки программного кода.

Выглядит сложно? Разрушить кажущуюся сложность легко: просто попробуйте, как это работает!


ВВОД СТРО­КИ


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

s = input("Введите ваше имя: ") print(s)

Результат работы:

Введите ваше имя: Виктор Виктор

Функция print(s) выводит на экран не символ s, а значение переменной s. Запишем s в кавычках:

print("s")
В этом случае Python отобразит символ.

Если переменная s не инициализирована, то есть ей не задано значение, то возникнет ошибка. Программа из одной строки:

print(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("Привет!") загубит программу.

Преобразовать строку в число можно с помощью функции 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("Площадь комнаты =", resultat)

Результат:

Здравствуй, дорогая бабушка! Написал специально для тебя программу, которая может посчитать площадь, например, комнаты. Просто введи нужные (целые!) числа и нажми Enter. Введи длину комнаты: 4 Введи ширину комнаты: 3 Площадь комнаты = 12

Крик восхищения

Братцы, да эта программа идеальна!


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


© 2019-2021 Виктор Трофимов
[ Оглавление ] [ В начало страницы ]