Каноническая схема цикла
Повторение:
Условный оператор
Цикл for имя in последовательность: …
Оператор break — немедленный выход из цикла
Цикл while
Простой вариант:
- Сначала проверяется условие
Если оно выполнено (True), выполняется тело, после чего переходим к п. 1
Если не выполнено (False), работа цикла заканчивается
Упражнения
ввести число и делить его пополам. Пока оно не ноль
преобразовать к циклу while такой фрагмент:
Каноническая схема цикла
Мнемоническая структура, которой в подавляющем большинстве случаев нужно уподоблять циклические конструкции в программе. Каноническая схема состоит из четырёх частей. Пропуск любой из этих частей в программе может повлечь за собой ошибку алгоритма.
- Инициализация. Присваивание начальных значений объектам, которые участвуют в проверке условия. Выполняется один раз перед входом в цикл. Следующие шаги выполняются итеративно.
- Проверка условия. Если условие ложно, цикл заканчивает работу.
- Тело. Полезная нагрузка — действия, ради которых написан цикл.
Изменение. Изменение объектов, которые участвуют в проверке условия. Переход к п. 1.
Упражнения
Где в предыдущем упражнении все 4 шага?
Цикл по вводу (ввести числа по одному в строке, вывести 2*n+1, конец ввода — пустая строка).
Обратите внимание на 4 шага! input() input()-у рознь…
Посчитать сумму чисел в этом упражнении
Полный вариант:
Часть False выполняется, если условие — False
В таком виде смысла не имеет. Но в случае наличия break выход происходит всегда мимо else
«Поиск первого». Вводить строки (пустая строка — конец ввода), если среди них попадётся строка с пробелом, вывести эту строку и остановиться, а если нет — вывести "NOPE".
Вводить и складывать числа (пустая строка — конец ввода). Когда сумма превысит 100, вывести "МНОГО", если не превысит — "МАЛО".
В цикле for тоже есть клауза else:, и работает она так же: если цикл закончился break — не выполняется, если закончилась последовательность — выполняется
Модифицировать программу так, чтобы можно было ввести шаг и проверить с разными шагами
Вложенные циклы
Внутри цикла может быть что угодно — например, цикл!
Нетаблица умножения (в столбик):
Модифицировать так, чтобы вышло покрасивее — 8 строк, 8 столбцов
Вспомним про форматную строку, например f"{a:2}"
Модифицировать так, чтобы вышло ещё красивее (без «гробика»)
Задача: вводить числа (пустая строка — конец ввода) и выводить их наибольший делитель
Составляем алгоритм:
- Ввести строку
- Пока она непуста:
- превращаем её в число
- по всем возможным делителям этого числа, начиная с наибольшего (n // 2 + 1)
- Если число на это делится (остаток от деления нулевой)
- Вывести делитель и выйти из внутреннего цикла
- Если число на это делится (остаток от деления нулевой)
- Ввести следующую строку
Переводим на Python
(если будет время) Ещё такие задчки
Д/З
Отщёлкать Шестое занятие учебника и решить первые 10 задач.
Обратите внимание на то, что последовательностью в учебнике называется не какая-либо Python-последовательность, а процесс ввода данных пользователем. Хранить эти последовательности в решениях не предполагается, это их только усложнит.
Скопировать решения в соответствующие файлы и проверить, что они всё ещё работают!
Имена файлов — от prog_6_1.py до prog_6_10.py
Прислать эти 10 файлов в виде десяти приложений к одному письму по адресу <uneexlectures AT cs DOT msu DOT ru>
В поле Subject должно быть «слово» PhilosoPython2022 (другие слова тоже можно ☺)