3.7. Ввод и вывод чисел
Информатика, 6 класс. Учебник: Кадыркулов Р. А., Нурмуханбетова Г. К. (Алматыкітап баспасы, 2023). Раздел 3: Программирование на языке Python. Страницы 93–96.
Чему научишься
- Вводить с клавиатуры одно число и сразу несколько чисел в одной строке.
- Разбивать строку на части методом split() и превращать части в числа функцией map.
- Управлять выводом через параметры sep и end функции print().
- Писать короткие программы, которые считают по любым введённым данным.
Разминка
- Какие два способа ввода данных ты уже знаешь? Первый: написать значение прямо в тексте программы, например
a = 4.45. Второй: попросить его у пользователя черезinput(). - Чем второй способ удобнее? Одна программа работает для любых чисел, а не только для тех, что вписаны в код. Это называют свойством массовости алгоритма.
- Что делает
print()? Выводит данные на экран. - Что нужно сделать, чтобы
input()вернул число, а не текст? Обернуть его вint(...)(целое число) илиfloat(...)(дробное).
Разбираемся
input() всегда приносит текст
Представь, что ты пишешь сообщение другу. Что бы ты ни набрал, 1000 или «привет», для мессенджера это просто строка символов. С input() то же самое: он возвращает строку. Если нужно число, строку превращают в число сама.
# спрашиваем число и сразу делаем его целым
K = int(input("ввод: "))
print(K)
Запусти программу, введи 1000, и на экране появится 1000. Слова в кавычках внутри input() просто подсказка для человека, она печатается перед вводом.
split(): режем строку на кусочки
А что, если нужно ввести сразу несколько чисел в одной строке? Например, 1 2 3 4 5 6 7. Метод split() режет строку на части по разделителю. Если в скобках ничего нет, разделитель по умолчанию пробел.
K = input().split() # вводим: 1 2 3 4 5 6 7
print(K) # ['1', '2', '3', '4', '5', '6', '7']
Обрати внимание на кавычки вокруг цифр. Это всё ещё строки, просто лежащие в списке.
Если числа записаны через дефис, разделитель нужно указать в скобках, в кавычках:
K = input().split('-') # вводим: 1-2-3-4-5-6-7
print(K) # ['1', '2', '3', '4', '5', '6', '7']
📕 В таблице учебника (с. 93) во втором примере напечатано
input().split(−), без кавычек. Так программа не запустится: правильноinput().split('-'). Разделитель всегда записывают как строку, то есть в кавычках.
map(int, ...): строки в числа
Чтобы кусочки стали настоящими числами, каждый нужно пропустить через int. Это делает функция map: она применяет int ко всем частям списка.
K = map(int, input().split()) # вводим: 1 2 3 4 5 6 7
print(list(K)) # [1, 2, 3, 4, 5, 6, 7]
Теперь кавычек нет: это числа, и с ними можно считать. list(K) нужен, чтобы на экране увидеть результат map как список.
a, b = map(int, input().split()) # вводим: 10 20
print(a + b) # 30
💡 Хочешь ввести три числа сразу? Просто напиши три переменные слева:
a, b, c = map(int, input().split()). Их количество должно совпадать с количеством введённых чисел, иначе Python сообщит об ошибке.
print(): sep и end
Функция print() умеет больше, чем просто печатать. У неё есть два полезных параметра.
- sep (от англ. separator): что поставить между выводимыми значениями. По умолчанию пробел.
- end: чем закончить вывод. По умолчанию
'\n', то есть переход на новую строку.
P = int(input()) # 25
K = int(input()) # 5
print(P * K, P + K, P - K, sep='<==>')
# выведет: 125<==>30<==>20
А теперь сравни два похожих кода. Вводим 20 и 30.
# вариант 1: end=' ' — следующий вывод продолжится в той же строке
P = int(input())
K = int(input())
print(P + K, end=' ')
print(P * K, end=' s!!!')
# 50 600 s!!!
# вариант 2: end='\n' — каждый вывод на новой строке
P = int(input())
K = int(input())
print(P + K, end='\n')
print(P * K, end=' s!!!')
# 50
# 600 s!!!
📌
end=' 'склеивает выводы в одну строку,end='\n'разделяет их строками. Если параметрendне указан, Python сам ставит'\n'.
👨👩👧 Родителю. Попросите ребёнка запустить любую программу из урока в Thonny, IDLE или на online-python.com и сначала предсказать вывод, а потом сверить. Привычка угадывать результат и проверять себя быстрее всего учит читать чужой код.
Проверь, как понял
Проверь себя
- Какое значение имеют методы в функции
input()? Они обрабатывают введённую строку.split()разбивает её на части, аmapпревращает части в числа. - Для чего в
print()нуженend='\n'? Чтобы каждый вывод оказывался на новой строке. Если заменить его наend=' ', всё выведется в одну строку. - Какое свойство алгоритма позволяет использовать
input()? Свойство массовости: один и тот же алгоритм решает задачу для любых допустимых входных данных.
Решаем упражнения
№ 1
(Применяй на практике, «Задание».) Дидар из 4-го класса получил домашнее: взять два числа и составить примеры на четыре действия. Помоги ему программой. Пример на экране: 659 + 985 = 1644, 654 - 586 = 68, 145 * 556 = 80620, 200 / 25 = 8.0.
Как думать. Нужно ввести пары чисел, разделённые знаком действия (659+985). Знак действия и есть разделитель для split(). Для каждого действия своя строка ввода.
Решение.
# пары чисел вводим через знак действия, например 659+985
k, p = map(int, input().split('+'))
m, h = map(int, input().split('-'))
t, w = map(int, input().split('*'))
c, d = map(int, input().split('/'))
# print сам ставит каждый вывод на новую строку
print(k, '+', p, '=', k + p)
print(m, '-', h, '=', m - h)
print(t, '*', w, '=', t * w)
print(c, '/', d, '=', c / d)
Ввод: 659+985, 654-586, 145*556, 200/25. Вывод:
659 + 985 = 1644
654 - 586 = 68
145 * 556 = 80620
200 / 25 = 8.0
Деление / всегда даёт дробное число, поэтому 8.0, а не 8.
📕 В коде учебника (с. 95) для вычитания и умножения использована одна и та же переменная
h: сначалаm, h = ..., потомt, h = .... Все четыре строки ввода выполняются до печати, поэтому к моменту вычитания вhуже лежит число из умножения (556), и вместо 654 − 586 = 68 программа напечатает 654 − 556 = 98. Нужны разные имена, как в решении выше.
Ответ: программа выше выводит все четыре примера с верными результатами.
№ 2
(Применяй на практике, «Анализ».) Составь программу для вычисления: 1) 352 · 985 · 25 · 3; 2) 362 + 1206 + 215554 + 6957 + 628.
Как думать. Выражения можно записать прямо в print(): Python сам посчитает. Умножение это *.
Решение.
print(352 * 985 * 25 * 3) # 26004000
print(362 + 1206 + 215554 + 6957 + 628) # 224707
А если хочешь сделать программу «массовой», вводи числа с клавиатуры:
a, b, c, d = map(int, input().split()) # вводим: 352 985 25 3
print(a * b * c * d)
Ответ: 1) 26 004 000; 2) 224 707.
№ 3
(Вопросы для размышления, № 1.) Какое значение имеют методы в функции input()?
Как думать. input() приносит одну строку. Что можно с ней сделать, чтобы получить числа?
Пример ответа. Методы обрабатывают введённую строку. split() разделяет её на части по разделителю (по умолчанию пробелу), а map вместе с int превращает каждую часть в число. Благодаря этому за один ввод можно получить сразу несколько чисел.
Ответ: методы разбивают введённую строку на части и превращают части в нужные типы данных.
№ 4
(Вопросы для размышления, № 2.) С какой целью используют end='\n' в print()?
Как думать. Что произойдёт, если несколько раз вызвать print() подряд?
Пример ответа. '\n' означает переход на новую строку. Так результаты нескольких print() выводятся каждый на своей строке, как в примере с выводом 50 и 600. Если заменить на end=' ', они окажутся в одной строке.
Ответ: чтобы каждый результат выводился на новой строке.
№ 5
(Вопросы для размышления, № 3.) Какое свойство алгоритма позволяет использовать input() при программировании?
Как думать. Подумай: почему одна и та же программа может считать для любых чисел?
Пример ответа. Это свойство массовости: алгоритм рассчитан не на одно конкретное число, а на целый класс задач. Данные подставляют уже при запуске, через input().
Ответ: массовость.
№ 6
(Вопросы для размышления, № 4.) Какие отличия имеют функции input() и print()?
Как думать. Одна работает «в программу», другая «из программы».
Пример ответа. input() вводит данные: принимает с клавиатуры строку и передаёт её программе. print() выводит данные: показывает результат на экране (или записывает в файл). Первая возвращает значение, которое можно сохранить в переменную, вторая только показывает.
Ответ: input() вводит данные в программу, print() выводит результат из программы.
№ 7
(Вопросы для размышления, № 5.) Как с помощью input() выделить числа из строки '548 + 895 + 1000 + 5012' и сложить их?
Как думать. Числа разделены знаком +. Значит, разделитель для split() это '+'.
Решение.
s = input() # вводим: 548 + 895 + 1000 + 5012
chisla = map(int, s.split('+')) # режем по плюсу, строки в числа
print(sum(chisla)) # sum складывает все числа: 7455
Пробелы вокруг чисел не мешают: int(' 895 ') всё равно даёт 895.
Ответ: ввести строку, разбить split('+'), превратить части в числа через map(int, ...) и сложить. Результат 7455.
№ 8
(Задания, № 1 со звёздочкой.) На числовой оси даны целые числа x₁ и x₂. Напиши программу вычисления расстояния между точками. Пример: ввод 4 -8, ответ 12.
Как думать. Расстояние между точками это длина отрезка, она не бывает отрицательной. Значит, нужна разность по модулю: S = |x₂ − x₁|.
Решение.
# вводим два числа в одной строке: 4 -8
x1, x2 = map(int, input().split())
print(abs(x2 - x1)) # abs — модуль числа
Проверка: 4 и −8. Разность −8 − 4 = −12, модуль равен 12.
Ответ: программа выше; для 4 -8 выводит 12.
№ 9
(Задания, № 2 со звёздочкой.) Дано значение x. Вычисли y = 3(x − 2)³ + 5(x − 4)² − 7. Пример: x = 5, ответ 79.
Как думать. Степень в Python записывается **. Скобки и знаки умножения нужно поставить везде, 3(x-2) без * Python не поймёт.
Решение.
x = int(input()) # вводим: 5
y = 3 * (x - 2) ** 3 + 5 * (x - 4) ** 2 - 7
print(y) # 79
Проверка вручную: 3 · 3³ = 81, 5 · 1² = 5, 81 + 5 − 7 = 79.
Ответ: программа выше; при x = 5 получается 79.
№ 10
(Задания, № 3 со звёздочкой.) Марат и Еркин укладывали кирпичи. Марат перенёс P кирпичей, это больше, чем у Еркина. Еркин перенёс на K кирпичей меньше, чем Марат. Сколько всего кирпичей перенесли ребята? Пример: ввод 150 50, ответ 250.
Как думать. У Марата P. У Еркина на K меньше, значит P − K. Вместе: P + (P − K).
Решение.
P, K = map(int, input().split()) # вводим: 150 50
erkin = P - K # столько перенёс Еркин
print(P + erkin) # 150 + 100 = 250
Ответ: P + (P − K) = 2P − K; для 150 50 получается 250.
№ 11
(Задания, № 4 со звёздочкой.) У Асель A тенге. Ластик стоит K тенге, ручка C тенге. Сколько ластиков или ручек может купить Асель на все свои деньги? Пример: 100 10 15 даёт 10 6; 10 10 15 даёт 1 0.
Как думать. Сколько целых раз цена помещается в сумме? Это целочисленное деление //, которое отбрасывает остаток. Обычное деление / дало бы 6.66… .
Решение.
A, K, C = map(int, input().split()) # вводим: 100 10 15
print(A // K, A // C) # 10 6
Проверка второго примера: 10 // 10 = 1 ластик, 10 // 15 = 0 ручек: вывод 1 0.
Ответ: print(A // K, A // C).
№ 12
(Домашнее задание.) С помощью линейного алгоритма составь условие своей задачи из повседневной жизни (как в задании 3). Напиши алгоритм решения с input() и print() и код программы.
Как думать. Выбери ситуацию, где данные меняются: цена и количество, время и скорость, число друзей и конфет. Подумай, какие числа вводит пользователь и что нужно получить.
Пример ответа. Условие. В классе N учеников. Учитель купил M тетрадей и раздал поровну. Сколько тетрадей получил каждый и сколько осталось?
Алгоритм. 1) Ввести N и M. 2) Найти M // N, это тетради каждому. 3) Найти M % N, это остаток. 4) Вывести оба числа.
N, M = map(int, input().split()) # например: 25 80
print(M // N, M % N) # 3 5
Проверка: 25 · 3 = 75 и 80 − 75 = 5, всё верно.
Ответ: любая своя задача, где программа вводит данные, считает и выводит результат; например, выше раздача тетрадей.
Шпаргалка
a, b = map(int, input().split())вводит два числа из одной строки.- Если нужен другой разделитель, пиши его в кавычках:
split('+'). //целочисленное деление,%остаток,abs()модуль числа.- Один и тот же алгоритм для любых данных называют массовым.