книга заданий пайтон. книга практических заданий, pyton. Сборник упражнений Введение в язык Python с задачами и решениями Бен Стивенсон Москва, 2021 удк 004. 438Python
Скачать 2.24 Mb.
|
5.2. циклы и спискиИнструкция for позволяет проходить по элементам любой коллекции. При этом коллекцией может являться как диапазон целых чисел, созданный при помощи функции range, так и список. В следующем фрагменте кода цикл for используется для суммирования элементов из списка data. # Инициализируем переменные data и total data = [2.71, 3.14, 1.41, 1.62] total = 0 # Суммируем значения в списке for value in data: total = total + value # Выводим сумму print("Сумма значений элементов списка:", total) Данная программа начинается с инициализации переменных data и total. Затем наступает черед цикла for. На первой итерации цикла переменной value присваивается значение первого элемента списка data, пос ле чего выполняется тело цикла, в котором текущая сумма значений элементов списка увеличивается на value. После выполнения тела цикла начинается следующая итерация, в процессе которой переменной value присваивается значение очередного элемента списка data, и тело цикла выполняется вновь. Цикл будет выполняться до тех пор, пока не будут пройдены все элементы списка. В результате будет рассчитана сумма значений всех элементов списка. После этого сумма будет выведена на экран, и на этом выполнение программы прекратится. Иногда необходимо пройти в цикле непосредственно по индексам спис ка, а не по значениям элементов. Для этого нужно сначала вычислить общее количество элементов, находящихся в списке. Сделать это можно при помощи функции len. Данная функция принимает на вход единственный аргумент в виде списка и возвращает текущее количество элементов в нем. Если в списке нет ни одного элемента, функция len ожидаемо вернет ноль. Функцию len бывает удобно использовать вместе с функцией range для создания коллекции целых чисел, являющихся допустимыми индексами списка. Это можно сделать, передав в качестве единственного аргумента в функцию range длину списка. Поднабор индексов можно собрать, если передать функции range второй параметр. В следующем фрагменте кода демонстрируется использование цикла for для прохода по всем индексам списка data, за исключением первого, для определения позиции элемента с наибольшим значением в коллекции. # Инициализируем переменные data и largest_pos data = [1.62, 1.41, 3.14, 2.71] largest_pos = 0 # Находим позицию элемента с наибольшим значением for i in range(1, len(data)): if data[i] > data[largest_pos]: largest_pos = i # Отображаем результат print("Наибольшее значение", data[largest_pos], \ "находится в элементе с индексом", largest_pos) Программа начинается с инициализации переменных data и largest_ pos. После этого с использованием функции range создается коллекция, по которой будет проходить цикл for. При этом первым аргументом передается единица, а вторым – длина списка, равная четырем. В результате в коллекции оказываются последовательные целые числа от единицы до трех, которые адресуют все элементы списка data, кроме первого, что нам и нужно. На первой итерации цикла for внутренней переменной цикла i присваивается значение 1, после чего в первый раз выполняется тело цикла. Внутри него выполняется сравнение элементов списка data с индексом i и largest_pos. Поскольку первых из них меньше, булево выражение возвращает значение False, и тело блока if пропускается. Далее управление передается в начало цикла for, и на этот раз переменной i присваивается значение 2. Тело цикла выполняется во второй раз. В этом случае значение элемента с индексом i оказывается больше по сравнению с largest_pos, в результате чего переменной largest_pos присваивается значение i, то есть 2. На третьей итерации переменная i получает значение 3. Проверка приводит к пропуску тела блока if, и программа завершает свое выполнение, выводя на экран значение 3,14, расположенное в списке data на индексной позиции 2. Циклы while также можно использовать со списками. Например, в следующем фрагменте кода цикл while используется для определения индекса первого элемента списка с положительным значением. В цикле используется внешняя переменная i, содержащая индекс текущего элемента в списке, начиная с нуля. Значение переменной i увеличивается по ходу выполнения программы, пока не будет достигнут конец списка или найден элемент с положительным значением. # Инициализируем переменные data = [0, –1, 4, 1, 0] # Цикл, пока i является допустимым индексом списка и значение по этому индексу # не положительное i = 0 while i < len(data) and data[i] <= 0: i = i + 1 # Если i меньше длины списка, значит, положительное значение было найдено # В противном случае i будет равна длине списка, а это означает, что # положительных чисел в списке нет if i < len(data): print("Первое положительное число в списке располагается по индексу", i) else: print("Список не содержит положительных чисел") Данная программа также начинается с инициализации переменных data и i. После этого сразу запускается цикл while. Переменная i, равная нулю, меньше длины списка, и значение элемента, располагающееся по этому индексу, меньше или равно нулю, в результате чего в первый раз выполняется тело цикла, в котором i увеличивается на единицу. Управление возвращается к началу цикла while, и условие проверяется снова. Результатом по-прежнему будет True, и тело цикла выполнится вновь, а переменная i сменит значение с единицы на двойку. На третьем проходе по циклу условное выражение вернет False, поскольку значение в третьей позиции больше нуля. Тело цикла пропускается, и выполнение программы продолжается с условной инструкции if, следующей за ним. Поскольку текущее значение i меньше, чем длина списка, на экран будет выведена информация о найденном положительном элементе с его индексом. |