3 пиццы с собой, пожалуйста
Поздравляю! Если вы дошли до этого поста, значит 70% вы уже знаете. Остается 15% теории и 15% попрактиковаться. Если вы проходили предыдущие уроки сегодня, и сегодня же не поймете или запутаетесь - выходите. Без шуток. Переварите ту информацию и возвращайтесь через день/два. Вы на финишной прямой. 💕
Для этого поста я взял формулировки из вариантов ОГЭ по Информатике:
Первый
Второй
Основа последнего задания - это циклы. Мы идем на кухню и 3 раза подряд готовим одно и тоже, потом пакуем в пакет и отдаём.
Синтаксис
Циклы бывают двух типов:
Первый: for - этот цикл - волшебная палочка
Шаг цикла - это итерация. То есть первая пицца - это первая итерация, вторая - вторая итерация.
for i in range(3) - буквально: для "i" в диапазоне 3. Тут появляется временная переменная i, которая в этом случае значит порядковый номер итерации (шага). Давайте просто на примере:
Объявим переменную "количество_пицц" и выполним цикл
python
количество_пицц = 3
for i in range(количество_пицц):
# каждую итерацию выводим номер пиццы
print("Номер пиццы:",i)Вывод:
txt
<< Номер пиццы: 0
<< Номер пиццы: 1
<< Номер пиццы: 2Прошу заметить, что i начинается не с 1, а с 0. Это связано с устройством памяти в ПК. Подробнее объяснял тут: ссылка (но нам достаточно знать просто, что начало с 0)
Чтобы побороть баг (фичу), которая выводит 0 -> 1 -> 2, а не 1 -> 2 -> 3, можно сделать следущее:
python
количество_пицц = 3
for i in range(количество_пицц):
# каждую итерацию выводим номер пиццы
print("Номер пиццы:",i+1)txt
<< Номер пиццы: 1
<< Номер пиццы: 2
<< Номер пиццы: 3Зачем нужен?
Этот цикл отлично подходит для заданий, где дается такая таблица:
| Входные данные | Выходные данные |
|---|---|
| 3 | 123 |
| 20 | |
| 52 | |
| 67 |
И задание:
Программа получает на вход число проехавших автомобилей N (1 < N < 30), затем указываются их скорости.
Мы четко знаем, что первое значение - это всегда количество автомобилей, в нашей таблице оно равно 3. Значит нам нужно получить сначала число автомобилей (~ итераций в цикле, именно столько раз надо будет повторить цикл), а потом повторять цикл на этой основе. Меньше слов, больше кода:
python
# получаем число автомобилей
print("Количество автомобилей:")
количество_автомобилей = int(input())
# запускаем цикл, который выполнится "количество_автомобилей" раз
for i in range(количество_автомобилей):
# чтобы проще понять, выводим:
print("Введите скорость:")
скорость = int(input())
print("Для итерации",i+1,"вы ввели:",скорость)
print("Цикл выполнился:",количество_автомобилей,"раз(а) и закончился!")Вывод:
txt
<< Количество автомобилей: <- пишет программа
>> 3 <- из задания вводим 3
<< Введите скорость: <- начался цикл и первая итерация
>> 20 <- ввод из таблицы
<< Для итерации 1 вы ввели: 20
<< Введите скорость: <- вторая итерация
>> 52
<< Для итерации 2 вы ввели: 52
<< Введите скорость: <- третья итерация
>> 67
<< Для итерации 3 вы ввели: 67Для задания ОГЭ так много print не надо! Я написал только для того, чтобы вы поняли. Все, что должно остаться из предыдущего кода на экзамене:
python
количество_автомобилей = int(input())
for i in range(количество_автомобилей):
скорость = int(input())Второй тип циклов: while - это цикл работает, пока вы не остановите его.
Вообще while тоже имеет много функционала, но мы запомним просто вот это:
python
while True:
# ... код ...Этот цикл выполняется бесконечно, пока мы не прервем его через ключевое слово break
Пусть наш шеф делает пиццы, пока ему не скажут "0" (цикл кончится, когда шеф услышит "0"). "команда" - это ввод 0 или любое другое число, где 0 - это условное "всё, хватит делать пиццы", а любое число - это "продолжай":
python
# начинаем с 0
количество_пицц = 0
while True:
команда = int(input())
if команда == 0:
# если команда 0, то завершаем с помощью этого слова:
break
# мы проверили, что команда не завершающая
# значит продолжаем работать:
количество_пицц += 1
print("Приготовил:",количество_пицц,"единиц пиццы")Вывод:
txt
>> 1 <- произвольное число 1
>> 69 <- произвольное число 2
>> 52 <- произвольное число 3
>> 67 <- произвольное число 4
>> 1111 <- произвольное число 5
>> 0 <- ЭТО 0! Значит конец цикла
<< Приготовил: 5 единиц пиццыПрактика
Пора сделать первое задание из ОГЭ. Сейчас возьмем задание от сюда: клик
Читаем условие:
Напишите программу для решения следующей задачи. Камера наблюдения регистрирует в автоматическом режиме скорость проезжающих мимо нее автомобилей, округляя значения скорости до целых чисел. Необходимо определить максимальную зарегистрированную скорость автомобиля. Если скорость хотя бы одного автомобиля была меньше 30 км/ч, выведите «YES», иначе выведите «NO».
Программа получает на вход число проехавших автомобилей N (1 < N < 30), затем указываются их скорости. Значение скорости не может быть меньше 1 и больше 300. Программа должна сначала вывести максимальную скорость, затем YES или NO.
Программа получает на вход число проехавших автомобилей N (1 < N < 30), затем указываются их скорости. Значение скорости не может быть меньше 1 и больше 300. Программа должна сначала вывести максимальную скорость, затем YES или NO.
| Входные данные | Выходные данные |
|---|---|
| 4 | 74 |
| 74 | NO |
| 69 | |
| 63 | |
| 66 |
Очень много слов. По сути от нас хотят:
Напиши программу, которая:
1. Определит максимальную скорость из всех введенных
2. Если кто-то полз меньше 30 км/час, то вывести "YES"
Мы получаем:
1. Число автомобилей
2. Их скорости
1. Определит максимальную скорость из всех введенных
2. Если кто-то полз меньше 30 км/час, то вывести "YES"
Мы получаем:
1. Число автомобилей
2. Их скорости
Поехали! 🛻
Сначала понимаем, что нам дают именно число автомобилей, значит это цикл for. Первое наше действие - это получить их число:
python
количество_автомобилей = int(input())Теперь "количество_автомобилей" - это число итераций, то есть "сколько раз надо получить скорость". Делаем цикл, который выполняется "количество_автомобилей" РАЗ. В каждой итерации будем получать переменную "скорость_автомобиля"
python
количество_автомобилей = int(input())
for _ in range(количество_автомобилей):
скорость_автомобиля = int(input())Предлагаю ввести переменную "максимальная_скорость", которая хранит максимальную скорость, но пока дадим ей значение None. что означает - "пустота", "ничего", потом присвоим к ней первое значение, которое нам введут. Также сразу будем проверять в цикле: если "скорость_автомобиля" больше текущей "максимальная_скорость", значит НАЙДЕНА НОВАЯ МАКСИМАЛЬНАЯ СКОРОСТЬ И ЕЁ НАДО ПЕРЕЗАПИСАТЬ!
python
количество_автомобилей = int(input())
максимальная_скорость = None
for _ in range(количество_автомобилей):
скорость_автомобиля = int(input())
if максимальная_скорость == None:
максимальная_скорость = скорость_автомобиля
if скорость_автомобиля > максимальная_скорость:
максимальная_скорость = скорость_автомобиляКогда новая скорость_автомобиля, которую мы узнали, становится БОЛЬШЕ ТОЙ, которая у нас есть в переменной максимальная_скорость, тогда мы перезаписываем старую максимальную на новую, более высокую.
Теперь надо понять, есть ли улитки, чья скорость не превышает 30 км/час. Для этого предлагаю сделать хитрый ход: объявим переменную "улитки_есть" и дадим значение "NO", потому что "NO" выводится, когда все ехали быстрее 30 км/час, а если в цикле, после сравнения, окажется, что чья то скорость меньше 30, то "улитки_есть" перепишем на значение "YES". Поехали
python
количество_автомобилей = int(input())
максимальная_скорость = None
улитки_есть = "NO"
for _ in range(количество_автомобилей):
скорость_автомобиля = int(input())
if максимальная_скорость == None:
максимальная_скорость = скорость_автомобиля
if скорость_автомобиля > максимальная_скорость:
максимальная_скорость = скорость_автомобиля
if скорость_автомобиля < 30:
улитки_есть = "YES"Важно: читайте условие внимательно. В нашем случае написано просто ...Если скорость хотя бы одного автомобиля была меньше 30 км/ч..., но если будет написано ..была меньше ИЛИ РАВНА 30 км/ч..., то надо писать в условии: if скорость_автомобиля <= 30.
Отлично! Решение почти готово, осталось вывести на экран в последовательности: максимум -> про улиток
python
количество_автомобилей = int(input())
максимальная_скорость = None
улитки_есть = "NO"
for _ in range(количество_автомобилей):
скорость_автомобиля = int(input())
if максимальная_скорость == None:
максимальная_скорость = скорость_автомобиля
if скорость_автомобиля > максимальная_скорость:
максимальная_скорость = скорость_автомобиля
if скорость_автомобиля < 30:
улитки_есть = "YES"
print(максимальная_скорость)
print(улитки_есть)Самые внимательные заметили: я использовал for _ in... вместо for i in..., почему? "_" (нижнее подчеркивание) ставим вместо i, потому что i переменная нам не нужна, но чисто технически ее можно оставить и код останется рабочим.
Тестим
txt
>> 4
>> 74
>> 69
>> 63
>> 66
<< 74
<< NOОтлично! Задача решена
Практика
Предлагаю вам попытаться решить задачу, которую я составил сам:
Вы - владелец небольшой пиццерии. Вы решили сравнить среднее время приготовления пиццы. Ваши аналитики принесли вам отчёт, где написано время приготовления пиццы. Ваша задача написать программу, которая принимает сколько угодно строк с временем приготовления одной пиццы. В конце программы вы пишите "0", он означает, что пиццы в списке кончились.
Ваша задача также заключается в том, чтобы определить и вывести максимальное и минимальное время приготовления одной пиццы из всего списка. Также надо вывести число пицц, которые готовятся дольше 25 минут.
Вывод в формате: максимальное время -> минимальное время -> пиццы, готовящиеся более 25 минут
Ваша задача также заключается в том, чтобы определить и вывести максимальное и минимальное время приготовления одной пиццы из всего списка. Также надо вывести число пицц, которые готовятся дольше 25 минут.
Вывод в формате: максимальное время -> минимальное время -> пиццы, готовящиеся более 25 минут
| Входные данные | Выходные данные |
|---|---|
| 10 | 34 |
| 13 | 10 |
| 34 | 2 |
| 18 | |
| 27 | |
| 0 |
🍀 Удачи!