Главная → Уроки → Информатика 8 класс
Прочитай параграф о циклах на Python — операторах while и for, функции range, выходе из цикла через break и вложенных циклах — и ответь на 10 вопросов.
Не получается разобраться? Бесплатный ИИ-репетитор по информатике 8 класс разберёт ошибку по шагам и не даст списать.
Представьте программу, которая должна напечатать сто строк или сложить все числа, сколько бы их ни набрал пользователь. Писать одну команду сто раз подряд никто не станет, а во втором случае число повторений даже неизвестно заранее. Для таких задач в языке есть операторы цикла — команды, которые записывают конструкцию «повторение»: они велят машине повторять одну группу операторов, тело цикла, столько раз, сколько нужно. В Python операторов цикла два, while и for, и ими записывают все виды циклов: цикл ПОКА, цикл ДО и цикл ДЛЯ.
Оператор while
Оператор while записывает цикл ПОКА, у которого задано условие продолжения. Первая строка — слово while, условие и двоеточие, а под ней со сдвигом вправо идёт тело:
while условие: тело цикла
Условие здесь такое же логическое выражение, как в операторе if: сравнение или несколько сравнений, связанных словами and, or и not. Python находит его значение перед каждым проходом. Если вышло True, тело выполняется целиком, и всё начинается снова с проверки. Если вышло False, цикл окончен и программа идёт к первой строке после тела — к той, что стоит на уровне самого while. Тело, как и блок ветвления, образуют строки с одинаковым сдвигом под строкой с двоеточием. Последовательность «проверка, затем тело» изображена на рисунке 1 слева.
Дано: программа узнаёт, сколько раз введённое число можно разделить на 2 без остатка, а пользователь набрал 48.
n = int(input('Введите число: ')) k = 0 while n % 2 == 0: n = n // 2 k += 1 print(k, n)
Решение. 48 — чётное, тело выполняется: n = 24, k = 1. Затем n принимает значения 12, 6 и 3, и после каждого прохода k увеличивается на 1. При n = 3 остаток от деления на 2 равен 1, условие ложно, и цикл заканчивается.
Ответ: 4 3.
Запись k += 1 — сокращение для k = k + 1. Переменную, которая так считает проходы, называют счётчиком, а перед циклом её обнуляют.
Ни разу или бесконечно
У оператора while есть два свойства, о которых надо помнить. Первое: если условие ложно уже при первой проверке, тело не выполнится ни разу. Наберите в той же программе 45 — и на экране сразу будет 0 45, ведь нечётное число на 2 не делится.
Второе: если условие никогда не станет ложным, цикл будет работать бесконечно, то есть программа зациклится. Поэтому тело обязано менять то, от чего зависит условие. Ловушка есть даже в нашей программе: при вводе 0 проверка 0 % 2 == 0 истинна каждый раз, потому что 0 // 2 снова равно 0. Такую программу приходится останавливать вручную, командой среды разработки.
Без while не обойтись, когда число повторений нельзя узнать до начала цикла. Вклад каждый год растёт в a раз; через сколько лет он хотя бы удвоится?
a = float(input('Введите годовой множитель: ')) y = 1 k = 0 while y < 2: y = y * a k += 1 print('Лет:', k)
При a = 1.1 вклад после первого года равен 1.1 от начального, после второго — 1.21, и только после восьмого года он впервые станет не меньше 2. Программа напечатает Лет: 8, хотя заранее этого числа в ней нет нигде.
Ввод до нуля
Похожая задача — читать числа, пока пользователь не наберёт условный знак конца, скажем 0. Программа ниже считает, сколько раз среди введённых чисел появлялся новый рекорд, то есть число больше всех прежних:
rekord = 0 k = 0 a = int(input()) while a != 0: if a > rekord: rekord = a k += 1 a = int(input()) print(k, rekord)
Ввод здесь записан дважды: перед циклом и последней строкой тела. Благодаря этому любое прочитанное число сначала проходит проверку a != 0 в заголовке и только потом сравнивается с рекордом, так что ноль с рекордом не сравнивается никогда.
В Family Track телефон открывается за уроки: прочитал параграф, сдал тест и получил минуты. Сколько минут стоит урок, решают родители. Отправь им ссылку, пусть посмотрят.
Отправить родителямПройти урок бесплатноПравильные ответы и разбор ошибок — в приложении: при пересдаче вопросы меняются, поэтому списать не получится.
Какие значения по очереди примет параметр i в цикле for i in range(6, 30, 6)?
Что напечатает программа ниже? Каждое число на экране стоит в своей строке, здесь они перечислены через запятую.
Не получается разобраться? Бесплатный ИИ-репетитор по информатике 8 класс разберёт ошибку по шагам и не даст списать.