Добавил:
хачю сдать сессию Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2_Ввод_и_вывод_сообщений_на_экран_Jupyter_Notebook

.pdf
Скачиваний:
0
Добавлен:
09.07.2025
Размер:
284.64 Кб
Скачать

19.09.2022, 01:58

2. Ввод и вывод сообщений на экран - Jupyter Notebook

Лекция 2. Ввод информации с клавиатуры

Иногда возникает необходимость запросить какую-нибудь информацию у пользователя — попросить ввести ее с клавиатуры. Это может быть нужно, например, когда мы пытаемся имитировать заполнение какой-нибудь формы (собрать информацию и обработать) или написать функцию, которая будет работать по-разному в зависимости от режима ("Если хотите выгрузить данные из файла, нажмите 1, если хотите вводить данные вручную, введите 2").

Запросить данные с клавиатуры можно с помощью функции input() :

In [1]:

1 input("Введите что-нибудь: ")

Введите что-нибудь: ршл akld9 524#$%^&

Out[1]:

'ршл akld9 524#$%^&'

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

In [2]:

1 num = input("Введите какое-нибудь число: ")

Введите какое-нибудь число: 15

Теперь мы можем работать с переменной num, в которую мы сохранили результат ввода с клавиатуры.

In [3]:

1 num

Out[3]:

'15'

Введенное нами число 5 сохранилось. Однако, если посмотреть внимательнее, это не совсем число: число пять стоит в кавычках. Это строка! То есть обычный текст. Проверим:

In [4]:

1 type(num)

Out[4]:

str

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

localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/2. Ввод и вывод сообщений на экран.ipynb

1/6

19.09.2022, 01:58

2. Ввод и вывод сообщений на экран - Jupyter Notebook

In [5]:

1 num = int(num)

2 num

Out[5]:

15

И теперь все сразу: правильно и компактно.

In [6]:

1 num = int(input("Введите какое-нибудь число: ")) 2 num

Введите какое-нибудь число: 155

Out[6]:

155

Раз мы не предлагаем пользователю ввести именно целое число, число может быть любым, даже дробным. Учтем это ‒ будем конвертировать введенный текст в число с плавающей точкой.

In [8]:

1 num = float(input("Введите какое-нибудь число: ")) 2 num

Введите какое-нибудь число: 15.962

Out[8]:

15.962

С клавиатуры можно вводить сколько угодно объектов:

In [9]:

1 numbers = input("Введите числа через пробел: ")

Введите числа через пробел: 8, 9,26, 2, 016

In [10]:

1 numbers

Out[10]:

'8, 9,26, 2, 016 '

Только тогда для работы с отдельными элементами ввода потребуется разбить строку на части по какому-нибудь символу (в нашем случае по пробелу). О разбиении текста на части поговорим позже, когда будем обсуждать работу со строками, а пока разберем вывод информации на экран.

localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/2. Ввод и вывод сообщений на экран.ipynb

2/6

19.09.2022, 01:58

2. Ввод и вывод сообщений на экран - Jupyter Notebook

Вывод информации на экран

Как мы уже знаем, для вывода чего-либо на экран в Python существует функция print() :

In [11]:

1 print(15)

2 print("Hello!")

15

Hello!

Для того, чтобы вывести на экран сразу несколько объектов, нужно просто перечислить их через запятую в круглых скобках.

In [13]:

1

age = 23

2

print('Your age is', age)

Your age is 23

Примечание для тех, кто работал в R: print() в Python отличается от print() в R тем, что на вход он легко принимает сразу несколько объектов. В R перечень значений пришлось бы оформлять в виде списка (вектора), в противном случае на экран был бы выведен только первый элемент.

Форматирование строк (string formatting)

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

Пусть для начала пользователь вводит свое имя и возраст.

In [14]:

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

2 age = int(input("Введите Ваш возраст: ")) # возраст будет целочисленным

Введите Ваше имя: bob Введите Ваш возраст: 49

Теперь выведем на экран сообщение вида

Ваше имя: `имя`. Ваш возраст: `возраст`.

Но прежде, чем это сделать, поймем, какого типа будут значения, которые мы будем подставлять в шаблон. Имя (переменная name) ‒ это строка (string), а возраст (переменная age) ‒ это целое число

(integer).

localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/2. Ввод и вывод сообщений на экран.ipynb

3/6

19.09.2022, 01:58

2. Ввод и вывод сообщений на экран - Jupyter Notebook

In [20]:

1 r = "Ваше имя: %s. Ваш возраст: %i." % (name,age) 2 print(r)

Ваше имя: bob. Ваш возраст: 49.

Что за таинственные %s и %i ? Все просто: оператор % в строке указывает место, на которое будет подставляться значение, а буква сразу после процента ‒ сокращенное название типа данных ( s ‒ от string и i ‒ от integer). Осталось только сообщить Python, что именно нужно подставлять — после кавычек поставить % и в скобках перечислить названия переменных, значения которых мы будем подставлять.

Для тех, кто работал в R: форматирование строк с помощью оператора % ‒ аналог форматирования с помощью функции sprintf() в R.

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

In [21]:

1 print("Ваше имя: %s. Ваш возраст: %i." % (name, age))

Ваше имя: bob. Ваш возраст: 49.

Примечание: не теряйте часть с переменными после самой строки. Иначе получится нечто странное:

In [22]:

1 print("Ваше имя: %s. Ваш возраст: %i.")

Ваше имя: %s. Ваш возраст: %i.

Важно помнить, что если мы забудем указать какую-то из переменных, мы получим ошибку (точнее, исключение): Python не будет знать, откуда брать нужные значения.

In [20]:

1 print("Ваше имя: %s. Ваш возраст: %i." % (name))

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

TypeError Traceback (most recent call last)

<ipython-input-20-2343aa81e176> in <module>

----> 1 print("Ваше имя: %s. Ваш возраст: %i." % (name)) TypeError: not enough arguments for format string

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

localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/2. Ввод и вывод сообщений на экран.ipynb

4/6

19.09.2022, 01:58

2. Ввод и вывод сообщений на экран - Jupyter Notebook

In [23]:

1 print("Ваше имя: %s. Ваш возраст: %s." % (name, age)) # так сработает

Ваше имя: bob. Ваш возраст: 49. In [24]:

1 print("Ваше имя: %i. Ваш возраст: %s." % (name, age)) # а так нет

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

TypeError

Traceback (most recent call last)

<ipython-input-24-9c083ea32449> in <module>

----> 1 print("Ваше имя: %i. Ваш возраст: %s." % (name, age)) # а так нет

TypeError: %i format: a number is required, not str

В первом случае код сработал: Python не очень строго относится к типам данных, и поэтому он легко может превратить целочисленный возраст в строку (два %s вместо %s и %i не является помехой). Во втором случае все иначе. Превратить строку, которая состоит из букв (name) в целое число никак не получится, поэтому Python справедливо ругается.

А что будет, если мы будем подставлять не целое число, а дробное, с плавающей точкой? Попробуем!

In [25]:

1 height = float(input("Введите Ваш рост (в метрах): ")) 2 height

Введите Ваш рост (в метрах): 1.965

Out[25]:

1.965

In [26]:

1 print("Ваш рост: %f м." % height) # f - от float

Ваш рост: 1.965000 м.

По умолчанию при подстановке значений типа float Python выводит число с шестью знаками после запятой. Но это можно исправить. Перед f нужно поставить точку и указать число знаков после запятой, которое мы хотим:

In [29]:

1 print("Ваш рост: %.2f м." % (height)) # например, два

Ваш рост: 1.97 м.

localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/2. Ввод и вывод сообщений на экран.ipynb

5/6

19.09.2022, 01:58 2. Ввод и вывод сообщений на экран - Jupyter Notebook

In [30]:

1 print("Ваш рост: %.1f м. " % height) # или один

Ваш рост: 2.0 м.

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

Рассмотренный выше способ форматирования строк ‒ не единственный. Он довольно стандартный, но при этом немного устаревший. В Python 3 есть другой способ ‒ форматирование с помощью метода

.format() . Кроме того, в Python 3.6 появился еще более продвинутый способ форматирования строк ‒ f-strings (formatted string literals). Об этом можно почитать в дополнительных материалах (ноутбук String- formatting-additional.ipynb).

localhost:8888/notebooks/EXONTOOLS/2/Доп. занятия/2. Ввод и вывод сообщений на экран.ipynb

6/6