Ввод и вывод данных

Мы уже встречались с функцией print(). Она отвечает за вывод данных, по-умолчанию на экран. Если код содержится в файле, то без нее не обойтись. В интерактивном режиме в ряде случаев можно обойтись без нее.

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

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

Можно сказать, что программа – это открытая система, которая обменивается чем-либо с внешней для нее средой. Если живой организм в основном обменивается веществом и энергией, то программа – данными, информацией.

Вывод данных. Функция print()

Что такое функция в программировании, узнаем позже. Пока будем считать, что print() – это такая команда языка Python, которая выводит то, что в ее скобках на экран.

>>> print(1032)
1032
>>> print(2.34)
2.34
>>> print("Hello")
Hello

В скобках могут быть любые типы данных. Кроме того, количество данных может быть различным:

>>> print("a:", 1)
a: 1
>>> one = 1
>>> two = 2
>>> three = 3
>>> print(one, two, three)
1 2 3

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

Если в скобках стоит выражение, то сначала оно выполняется, после чего print() уже выводит результат данного выражения:

>>> print("hello" + " " + "world")
hello world
>>> print(10 - 2.5/2)
8.75

В print() предусмотрены дополнительные параметры. Например, через параметр sep можно указать отличный от пробела разделитель строк:

>>> print("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", sep="-")
Mon-Tue-Wed-Thu-Fri-Sat-Sun
>>> print(1, 2, 3, sep="//")
1//2//3

Параметр end позволяет указывать, что делать, после вывода строки. По-умолчанию происходит переход на новую строку. Однако это действие можно отменить, указав любой другой символ или строку:

>>> print(10, end="")
10>>>

Обычно, если end используется, то не в интерактивном режиме, а в скриптах, когда несколько выводов подряд надо разделить не переходом на новую строку, а, скажем, запятыми. Сам переход на новую строку обозначается комбинацией символов "\n". Если присвоить это значение параметру end, то никаких изменений в работе функции print() вы не увидите, так как это значение и так присвоено по-умолчанию:

>>> print(10, end='\n')
10
>>>

Однако, если надо отступить на одну дополнительную строку после вывода, то можно сделать так:

>>> print(10, end='\n\n')
10
 
>>>

Следующее, что стоит рассказать о функции print() – это использование форматирования строк. На самом деле это никакого отношения к print() не имеет, а применяется к строкам. Но обычно используется именно в сочетании с функцией print().

Форматирование может выполняться в так называемом старом стиле или с помощью строкового метода format. Старый стиль также называют Си-стилем, так как он схож с тем, как происходит вывод на экран в языке C. Рассмотрим пример:

>>> pupil = "Ben"
>>> old = 16
>>> grade = 9.2
>>> print("It's %s, %d. Level: %f" % (pupil, old, grade))
It's Ben, 16. Level: 9.200000

Здесь вместо трех комбинаций символов %s, %d, %f подставляются значения переменных pupil, old, grade. Буквы s, d, f обозначают типы данных – строку, целое число, вещественное число. Если бы требовалось подставить три строки, то во всех случаях использовалось бы сочетание %s.

Хотя в качестве значения переменной grade было указано число 9.2, на экран оно вывелось с дополнительными нулями. Однако мы можем указать, сколько требуется знаков после запятой, записав перед буквой f точку с желаемым числом знаков в дробной части:

>>> print("It's %s, %d. Level: %.1f" % (pupil, old, grade))
It's Ben, 16. Level: 9.2

Теперь посмотрим на метод format():

>>> print("This is a {0}. It's {1}.".format("ball", "red"))
This is a ball. It's red.
>>> print("This is a {0}. It's {1}.".format("cat", "white"))
This is a cat. It's white.
>>> print("This is a {0}. It's {1} {2}.".format(1, "a", "number"))
This is a 1. It's a number.

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

На самом деле возможности метода format() существенно шире, и для их изучения понадобился бы отдельный урок. Нам пока будет достаточно этого.

Ввод данных. Функция input()

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

Если в интерактивном режиме ввести команду input(), то ничего интересного вы не увидите. Компьютер будет ждать, когда вы что-нибудь введете и нажмете Enter или просто нажмете Enter. Если вы что-то ввели, это сразу же отобразиться на экране:

>>> input()
Yes!
'Yes!'

Функция input() передает введенные данные в программу. Их можно присвоить переменной. В этом случае интерпретатор не выводит строку сразу же:

>>> answer = input()
No, it is not.

В данном случае строка сохраняется в переменной answer, и при желании мы можем вывести ее значение на экран:

>>> answer
'No, it is not.'

При использовании функции print() кавычки опускаются:

>>> print(answer)
No, it is not.

Куда интересней использовать функцию input() в скриптах – отдельно взятых файлах с кодом. Рассмотрим такую программу:

Использование функции input()

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

Вышеприведенный скрипт далек от совершенства. Откуда пользователю знать, что хочет от него программа? Чтобы не вводить в замешательство многозадачного биоробота, для функции input() предусмотрен специальный параметр-приглашение. Это приглашение выводится на экран при вызове input(). Усовершенствованная программа может выглядеть так:

Функция input() с аргументом-приглашением

Обратите внимание, что в программу поступает строка. Даже если ввести число, функция input() все равно вернет его строковое представление. Но что делать, если надо получить число? Ответ: использовать функции преобразования типов.

Преобразование ввода к числу

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

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

qtyOranges = int(input("Сколько апельсинов? "))
priceOrange = float(input("Цена одного апельсина? "))
 
sumOranges = qtyOranges * priceOrange
 
print("Заплатите", sumOranges, "руб.")

Сначала выполняется функция input(). Она возвращает строку, которую функция int() или float() сразу преобразует в число. Только после этого происходит присваивание переменной, то есть она сразу получает численное значение.

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

  1. Напишите программу (файл user.py), которая запрашивала бы у пользователя:
    - его имя (например, "What is your name?")
    - возраст ("How old are you?")
    - место жительства ("Where are you live?")
    После этого выводила бы три строки:
    "This is имя"
    "It is возраст"
    "(S)he live in место_жительства"
    Вместо имя, возраст, место_жительства должны быть данные, введенные пользователем. Примечание: можно писать фразы на русском языке, но если вы планируете стать профессиональным программистом, привыкайте к английскому.

  2. Напишите программу (файл arithmetic.py), которая предлагала бы пользователю решить пример 4 * 100 - 54. Потом выводила бы на экран правильный ответ и ответ пользователя. Подумайте, нужно ли здесь преобразовывать строку в число.

  3. Запросите у пользователя четыре числа. Отдельно сложите первые два и отдельно вторые два. Разделите первую сумму на вторую. Выведите результат на экран так, чтобы ответ содержал две цифры после запятой.

Примеры решения в android-приложении и pdf-версии курса.

Создано

Обновлено

Комментарии

Как проверить,что в введённой строке( input(count) )
count - является числом (int)
и при этом - не вылазил эррор .
Заранее благодарю!

Ответ на от Григорий

count = input()
try:
    count = int(count)
except ValueError:
    print('Вводите число')

С зацикливанием пока не будет введено число:

while 1:
    count = input()
    try:
        count = int(count)
        break
    except ValueError:
        print('Вводите число')

 

Если вводить цифры, оно работает, а если буквы - ошибка.
Не могу придумать, как сделать проверку на ввод цифр, чтобы при вводе букв говорило "ошибка, нужно ввести цифры". Подскажите, пожалуйста!

print('Вы в магазине. Вам надо купить хлеб, молоко и масло')
print('Хлеб стоит 4 грн., молоко - 10, а масло 20 грн.')
cash = int(input('Сколько у вас денег?'))
 
bread = 4
milk = 10
butter = 20
a = bread + milk + butter
 
if a < cash :
    print('стоимость товаров ' + str(a) + ' грн.')
    b = cash - a
    print('Отлично! Ваша сдача ' + str(b) + ' грн.')
elif a == cash :
    print('Спасибо, что без сдачи!')
else :
    print('Сумма недостаточна')

 

Ответ на от Anton

Во-первых сама функция input в версии 2 питона принимает только числовые форматы. С этой точки зрения лучше использовать тогда отдельную функцию raw_input, которая принимает строки и не только.

Во-вторых для проверки введенной строки на предмет явления числом есть метод isdigit().

Все сказанное реализовано в коде ниже. Проверил, работает.

print('Вы в магазине. Вам надо купить хлеб, молоко и масло')
print('Хлеб стоит 4 грн., молоко - 10, а масло 20 грн.')
cash = raw_input('Сколько у вас денег?\n')
 
if cash.isdigit():
    cash = int(cash)
    bread = 4
    milk = 10
    butter = 20
    a = bread + milk + butter
    if a < cash:
        print('стоимость товаров ' + str(a) + ' грн.')
        b = cash - a
        print('Отлично! Ваша сдача ' + str(b) + ' грн.')
    elif a == cash :
        print('Спасибо, что без сдачи!')
 
    else :
        print('Сумма недостаточна')
else:
    print('Значение должно быть числом')

 

Как проверить тип введенных данных?
Нашел информацию, что тип данных можно проверить с помощью команды type. Но программа не работает

name = input ("Введите что-нибудь:  ")
if type (name) == int:
   print ("Вы ввели целое число")
elif type (name) == float:
   print ("Вы ввели дробное число")
elif type (name) == str:
   print ("Вы ввели текст")
else:
   print ("Ошибка")

 

Ответ на от Mihey

Дело в том, что функция input() всегда возвращает строку. Т.е. если даже вводится число 5, оно присваивается переменной name как строка "5".

Если все же надо проверить, что вводит пользователь, то можно воспользоваться конструкцией обработки исключения try-except. Например:

name = input ("Введите что-нибудь:  ")
try:
	name = int(name)
	print ("Вы ввели целое число")
except ValueError:
	try:
		name = float(name)
		print ("Вы ввели дробное число")
	except ValueError:
		print ("Вы ввели не число")

Программа пытается (try) преобразовать значение name в целое число. Если это возможно, то исключения (ошибки) не возникает. В таком случае выполняется следующая строка с print, а ветка except вообще не выполняется.

Если то, что ввел пользователь, преобразовать к целому нельзя, то возникает ошибка ValueError, и тело try прекращает выполняться. Ошибку начинает обрабатывать ветка except. Там проверяем не возникнет ли исключения при попытке преобразования к вещественному числу.

Ответ на от plustilino

Спасибо за пояснение. Ваш код работает так, как я хотел. Но мне осталось непонятным следующее: почему если ввести дробное число, то строка name = int(name) не преобразует его в целое число. ведь функция int() должна преобразовать дробное в целое.
Я полагал, что независимо от того, введет ли пользователь 5 или 5.2, на третьей строке кода мы должны получить 5.
В принципе, я догадываюсь, что поскольку функция input() всегда возвращает строку, то 5.2 понимается как строка и поэтому 5.2 не может быть преобразовано в целое число (банально из-за наличия точки между цифрами). Я прав?

Ответ на от Mihey

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

try:
    1/0
    print "Можно делить на ноль"
except:
    print "Нельзя делить на ноль!"
 
print "Жизнь продолжается..."

Помогите пожалуйста найти указанное с клавиатуры значение в массиве python