Циклы в Python
Практически любой язык программирования содержит вложенные конструкции цикла, причём в большинстве случаев таких конструкций несколько.
Python — не исключение. В списке техдокументации для Python есть 2 типа циклов: — цикл while, — цикл for.
Циклы необходимы, если нам надо что-либо сделать множество раз, реализовать последовательность одинаковых действий. Речь идёт о выполнении какой-нибудь операции либо списков операций снова и снова. Циклы максимально упрощают этот процесс. Если говорить о вышеназванных циклах, то цикл for многие считают более популярным. С него и начнём.
Цикл for в Python
Как было сказано выше, использование цикла целесообразно, если нужно повторить действие n-ное количество раз, выполнить некую последовательность одних и тех же операций. Рассмотрим это на примере. Возьмём встроенную в Python 3 функцию range , которая создаёт список длиной в «n» элементов (в Python 2-й версии для этого надо было использовать функцию xrange — тоже генератор чисел, но не такой ресурсоёмкий).
print(range(5)) # ответ: range(0, 5)Как видим, функция в Python взяла целое число, а вернула объект range . Также она принимает конечное значение, начальное значение и значение шага. Приведём ещё пару примеров:
a = range(5, 10) print(a) # range(5, 10) b = list(range(1, 10, 2)) print(b) # [1, 3, 5, 7, 9]В первом примере мы передаём начальное и конечное значение, при этом range возвращает список из чисел последовательности, начиная с начального, заканчивая последним (но не включая последний). Таким образом, при запросе 5-10 мы получаем 5-9 в прямом, а не обратном порядке.
Во 2-м случае используем функцию списка (list). В результате возвращается каждый 2-й элемент между 1-10 (наша последовательность будет равна 1, 3 и т. п., разумеется, также в прямом, а не обратном порядке).
Закономерный вопрос: а что функция range будет делать с использованием цикла? Давайте посмотрим:
for number in range(5): print(number)Что в данном случае произошло? Чтобы понять это, расшифруем наш код: 1. Мы вводим число для каждого числа в диапазоне 5. 2. Мы знаем, что при вызове range со значением 5 будет создан вложенный список из пяти элементов. 3. Каждый раз функция, проходя через цикл for, выведет каждый из этих элементов по списку.
Вышеупомянутый цикл for м. б. эквивалентом следующего:
for number in [0, 1, 2, 3, 4]: print(number)Здесь range просто выдаёт меньший результат.
Что ещё «умеет» цикл for?
Цикл for способен обходить любой итератор Python. Мы видели особенности действия цикла при обработке списка и последовательности. А теперь взглянем, можно ли его использовать для выполнения итерации со словарём:
a_dict = for key in a_dict: print(key)Если использовать for в словаре, легко заметить, что он перебирает ключи автоматически. К примеру, не нужно указывать for в a_dict.keys() (хотя это тоже работает). Python делает только то, что необходимо. Да, ключи выводятся в несколько другом порядке, который отличен от указанного в словаре. Однако словари не упорядочены, поэтому можно использовать итерацию над ними, а ключи при этом м. б. в любом порядке. Если вы знаете, что ключи можно отсортировать, это лучше сделать до итерации. Чтобы увидеть, как это работает, немного изменим словарь:
a_dict = keys = a_dict.keys() keys = sorted(keys) for key in keys: print(key)Результат использования данного цикла for в Python следующий:
1 2 3Давайте разберём код данного цикла for подробнее. Во-первых, был создан словарь, где ключи выступают вместо строк в качестве целых чисел. Во-вторых, мы извлекли из словаря ключи. Каждый раз при вызове метода keys() , он возвращает нам неупорядоченный список ключей. И если при выводе списка мы видим, что они находятся в прямом либо обратном порядке, это просто случайность.
Итак, получен доступ к ключам, хранимым в keys. Мы сортируем список, после чего нужно использовать цикл for в нём. Чтобы сделать процесс интереснее, попробуем использовать цикл for в функции range , однако для этого потребуется вывести лишь целые числа. Дабы это осуществить, придётся использовать условный оператор, а не параметр шага range, что делается так:
for number in range(10): if number % 2 == 0: print(number)Результат работы цикла for таков:
0 2 4 6 8Возможно, не все поняли, что происходит и откуда в цикле знак процента. Если кто подзабыл, в Python, % — это оператор модуля. Когда его используют, возвращается остаток. При делении целого числа на 2, остатка, разумеется, нет.
После разговора о цикле for пришла пора познакомиться с циклом while.
Цикл while
Цикл while хорошо использовать для повторений частей кода. Здесь вместо зацикливания n-е количество раз цикл будет работать, пока не исполнится определённое условие.
Пример работы цикла while в Python:
i = 0 while i < 10: print(i) i = i + 1Цикл while по сути — это один из вложенных условных операторов. Если говорить о коде цикла, который мы решили использовать выше, на экран будет выводиться переменная i до тех пор, пока она меньше десяти. То есть с запуском этого кода в Python вы получите список от 0 до 9, сформированный в прямом, а не обратном порядке, причём каждая цифра выведется в отдельной строке, и цикл завершится.
Однако, удалив часть кода с увеличением значения i, мы получим бесконечный цикл, а это уже плохо. Бесконечные циклы называют логическими ошибками, которых лучше избегать. Но это не значит, что в таком случае нельзя будет «вырваться» из цикла. Можно, если использовать вложенные функции в Python, например, break :
while i < 10: print(i) if i == 5: break i += 1Узнать больше про Python-циклы вы всегда сможете на наших курсах. Изучайте циклы, списки, функции, классы и другие нюансы «Пайтона» вместе с OTUS!
Когда целесообразно использовать оператор цикла for
Цикл - это одна и та же последовательность команд, повторяемая определенное число раз. Повторяющиеся операторы называются телом цикла. Visual Basic предоставляет возможность использовать два типа циклов. Если число повторений цикла известно заранее или может быть вычислено, то целесообразно использовать оператор цикла For. Next. Если же момент завершения цикла зависит от выполнения некоторого условия, то применяется оператор цикла Do. Loop.
Оператор цикла For. Next
Оператор цикла For. Next является самым старым и в тоже время основным оператором цикла, реализованным во всех языках программирования.
Синтаксис оператора:
Код: (Visual Basic)
For Счетчик = Начальное значение To Конечное значение [ Step Шаг]
Тело цикла
Next СчетчикВ начале цикла счетчик устанавливается в начальное значение, и с каждой итерацией будет изменятся на величину шага. Если шаг не указывается, то он по умолчанию равен 1. С помощью данной конструкции можно организовать как инкрементный цикл (с возрастанием счетчика) - шаг положительный или не указывается, так и декрементный цикл (с убыванием счетчика цикла) - шаг отрицательный.
Примеры организации цикла:
Инкрементный цикл с шагом 1
Код: (Visual Basic)
For i = 0 To 10
MsgBox i
Next i
Инкрементный цикл с шагом 5
Код: (Visual Basic)
For i = 0 To 10 Step 5
MsgBox i
Next i
Декрементный цикл с шагом 2
Код: (Visual Basic)
For i = 10 To 0 Step -2
MsgBox i
Next i
Оператор цикла Do. LoopЦикл Do. Loop, уточняемый оператором While, выполняется до тех пор, пока верно условие, задаваемое в цикле. Если же конструкция цикла уточняется оператором Until, то цикл выполняется до тех пор, пока заданное условие ложно.
Синтаксис:Код: (Visual Basic)
Do While ( Until ) условие
операторы
[ Exit Do ]
операторы
LoopДанный тип цикла называется циклом с предусловием, т.к. сначала проверяется условие, а после, если оно верно (ложно), выполняются операторы. Этот цикл может и не выполниться ни одного раза, если условие ложно (верно) при первой же проверке.
Существует также цикл с постусловием, когда сначала выполняется тело цикла, а после проверяется условие продолжения цикла. Этот цикл в любом случае выполниться ХОТЯ БЫ ОДИН РАЗ.
Синтаксис цикла с постусловием:Код: (Visual Basic)
Do
операторы
[ Exit Do ]
операторы
Loop While ( Until ) условие
Приложение
Компонент Флажок (CheckBox)Назначение
Флажки - это элементы управления, которые можно отмечать (ставить "галочку"), выбирая из ряда опций одну или несколько. CheckBox может иметь два различных состояния - отмеченное и не отмеченное. Собственно, он может иметь и третье состояние. В этом случае элемент управления отображается как отмеченный, но недоступный. Установить такое состояние элемента управления можно только программно.События
Важнейшим для флажка, как и для кнопки, является событие click.Свойства
Единственным важным свойством элемента управления CheckBox является его значение (Value). В зависимости от того, отмечен флажок или нет.
Style | Внешний вид. При graphical имеет вид выпуклой или утопленной кнопки. На которых можно размещать изображение. | Standard/graphical |
Value | Состояние: сброшен, установлен, недоступен | 0-Unchecked 1-Checked 2-Grayed |
Компонент Переключатель (OptionButton)
Назначение
Этот элемент управления, представляющий собой кружок с точкой или без, предназначен для установки только одной опции из группы. Обычно все переключатели формы объединены в одну группу.
События
Так же, как и для элемента управления CheckBox, для переключателей важно только одно событие - Click.
Свойства
Важнейшим свойством переключателей является свойство Value. С его помощью можно определить состояние переключателя. Это свойство может принимать значения True И False.
Value | True/false |
Практическая работа
Программа Флажки и Радиокнопки
- Установить 3 флажка и 2 группы радиокнопок, по 4 в каждом, компоненты изображение и этикетка.
- Одна из групп радиокнопок регулирует цвет этикетки: при нажатии радиокнопки меняется цвет этикетки (4 варианта цвета)
- Другая группа радиокнопок загружает в компонент Изображение различные изображения (рисунки или фотографии).
- Первый флажок блокирует доступ к обеим группам радиокнопок
- Второй флажок разрешает пользоваться радиокнопками цвета
- Третий флажок разрешает пользоваться радиокнопками изображениия
Задачи на цикл For. Next
На форме расположить 5 текстовых поля и кнопку "Расчет". В первое поле пользователь вносит начальное значение множества. Во второе - конечное значение множества. В третье - шаг расчета (проводите проверку при вводе шага, на кратность разницы начального и конечного значений с вводимым шагом). После нажатия кнопки "Расчет", вывести в четвертое поле сумму элементов множества, выполняющих условие: начальное значение + i*шаг, причем i = 0..n (реализовать с помощью инкрементного цикла). В пятое поле - произведение элементов множества, удовлетворяющих условию: конечное значение - i*шаг, причем i = 0..n(реализовать с помощью декрементного цикла).
Задачи на цикл Do. Loop
- Написать программу, которая будет прибавлять к заданному числу по 5 и выводить результаты подсчетов на форму, пока не получит число больше 30.
- Написать программу, которая будет допускать к 3 текстовым полям только при введении в контрольное текстовое поле вашего имени. Например так: начальная форма содержит кнопку, этикетку и текстовое поле, причем поле заблокировано. Вы щелкаете на кнопке Доступ, на этикетке возникает надпись: ,Ты кто?" и становится доступным поле ввода. Вводите имя. Если оно совпадает с тем, кому разрешен доступ, открывается 2-ая форма с 2 текстовыми полями. Запрограммируйте 3 имени, на которые ваша программа будет ругаться при блокировке доступа (например, ,А тебя вообще чтоб тут не было!") с использованием цикла Do. Loop. На другой форме в первое окно введите рост, во второе - вес, третье создайте под пароль. Доступ к этикетке сделайте только по паролю. Если отношение веса к росту 1, выведите на этикетке текст:"Порядок", если оно 2- выведите ,Больше занимайся физкультурой", если больше 2 - , Считай, что ты покойник!", если оно меньше 1 напишите ,Ветром не сдувает?".
Автор: Dusk & Never
© Copyright "Весельчак У" 2002-2022 |
Все права на статьи принадлежат указанным авторам или в противном случае сайту "Весельчак У". Перепечатка статей без указания ссылок и без уведомления администрации сайта запрещена! | Powered by VUEngine 2.2.11. Enforced by eAccelerator. |
Циклы for и while
В C# имеются четыре различных вида циклов (for, while, do. while и foreach), позволяющие выполнять блок кода повторно до тех пор, пока удовлетворяется определенное условие. В этой статье мы познакомимся с циклами for и while.
Цикл for
Цикл for в C# предоставляет механизм итерации, в котором определенное условие проверяется перед выполнением каждой итерации. Синтаксис этого оператора показан ниже:
for (инициализатор; условие; итератор) оператор (операторы)
инициализатор
это выражение, вычисляемое перед первым выполнением тела цикла (обычно инициализация локальной переменной в качестве счетчика цикла). Инициализация, как правило, представлена оператором присваивания, задающим первоначальное значение переменной, которая выполняет роль счетчика и управляет циклом;
условие
это выражение, проверяемое перед каждой новой итерацией цикла (должно возвращать true, чтобы была выполнена следующая итерация);
итератор
выражение, вычисляемое после каждой итерации (обычно приращение значения счетчика цикла).
Обратите внимание на то, что эти три основные части оператора цикла for должны быть разделены точкой с запятой. Выполнение цикла for будет продолжаться до тех пор, пока проверка условия дает истинный результат. Как только эта проверка даст ложный результат, цикл завершится, а выполнение программы будет продолжено с оператора, следующего после цикла for.
Стоит отметить, что цикл for отлично подходит для повторного выполнения оператора или блока операторов заранее известное количество раз. Давайте рассмотрим практическое применение цикла for на следующем примере:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 < class Program < // Данный метод выводит таблицу умножения // размерностью b x b static void tab(byte b) < Console.WriteLine("Таблица умножения x \n", b); // Этот цикл проходит по строкам for (int i = 1; i <= b; i++) < // Этот цикл проходит по столбцам for (int j = 1; j <= b; j++) Console.Write("\t", j * i); Console.WriteLine(); > Console.WriteLine(); > static void Main(string[] args) < tab(8); // Давайте разберем нестандартные возможности цикла for // ************************************************* // // Применение нескольких переменных управления циклом for (byte i = 0, j = 20; i <= j; i += 5, j -= 5) Console.WriteLine("i = , j = ",i,j); Console.WriteLine(); // Использование условного выражения в цикле bool b = false; for (byte i = 1, j = 100; !b; i++, j--) if (i < Math.Sqrt(j)) Console.WriteLine("Число меньше квадратного корня из ", i, j); else b = true; // Отсутствие части цикла int k = 0; for (; k < 10; ) < k++; Console.Write(k); >Console.WriteLine("\n"); // Цикл без тела int sum = 0; for (int i = 1; i <= 10; sum += ++i); Console.WriteLine("Значение суммы: ",sum); Console.ReadLine(); > > >
Цикл while
Подобно for, while также является циклом с предварительной проверкой. Синтаксис его аналогичен, но циклы while включают только одно выражение:
while(условие) оператор (операторы);
где оператор — это единственный оператор или же блок операторов, а условие означает конкретное условие управления циклом и может быть любым логическим выражением. В этом цикле оператор выполняется до тех пор, пока условие истинно. Как только условие становится ложным, управление программой передается строке кода, следующей непосредственно после цикла.
Как и в цикле for, в цикле while проверяется условное выражение, указываемое в самом начале цикла. Это означает, что код в теле цикла может вообще не выполняться, а также избавляет от необходимости выполнять отдельную проверку перед самим циклом.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 < class Program < static void Main(string[] args) < // Пример возведения числа в несколько степеней byte l = 2, i = 0; int result = 1; while (i < 10) < i++; result *= l; Console.WriteLine("в степени равно ",l,i,result); > Console.ReadLine(); > > >
Оператор цикла for
Работа оператора цикла for подобна оператору while с той лишь разницей, что оператор for подразумевает изменение значения некоторой переменной и проверки ее на истинность. Работа данного оператора продолжается до тех пор, пока истинно условие цикла. Синтаксис оператора for следующий:
Рассмотрим особенность реализации данного оператора на примере расчета и вывода суммы квадратов целых чисел от 0 до 9.
Пример 5
printf(“Сумма квадратов чисел от 0 до 9 равна.\n”,s);
*Переменная i объявлена внутри оператора for. Это особенность языка С++ – возможность объявлять переменные в любом месте программы.
Особенности реализации оператора цикла for:
- Сложная модификация счетчика цикла:
printf(“%d. Результат равен %.2f.\n”, i, f);
- Сложное условие внутри цикла:
int ext = 1, m=0;
printf(“Произведение num*m = %d.\n”,num*m);
- Оператор for с одним условием:
Пример 8.
- Оператор for без условия:
if(i > 100) break;
В последнем примере оператор break служит для выхода из цикла for, т.к. он будет работать «вечно» не имея никаких условий – аналог цикла while(1).
Оператор цикла do while
Все представленные выше операторы циклов, так или иначе, проверяют условие перед выполнением цикла, благодаря чему существует вероятность, что операторы внутри цикла никогда не будут выполнены. Такие циклы называют циклы с предусловием. Однако бывают ситуации, когда целесообразно выполнять проверку условия после того, как будут выполнены операторы, стоящие внутри цикла. Это достигается путем использования операторов цикла do while, которые реализуют цикл с постусловием.
Следующий пример демонстрирует реализацию такого цикла.
Пример 10.
const int k = 13;
bool flag=false;
if(flag==false)
printf(“Введите задуманное мной число : ”);
printf(“Не угадал. Введите задуманное мной число еще раз: ”);
printf (“ УГАДАЛ\n”);
Из примера видно, что цикл с постусловием работает до тех пор, пока истинно условие, т.е. в данном случае пока значение введенного числа будет отличаться от значения задуманного. Также следует обратить внимание на то, что после ключевого слова while должна стоять точка с запятой. При реализации данного цикла можно использовать составные условия, подобно циклу while, а также принудительно выходить из цикла с помощью оператора break.
Программирование вложенных циклов
Все рассмотренные выше операторы циклов допускают использование любых других операторов языка С++ внутри цикла, в том числе и операторов цикла. Это значит, что внутри одного цикла может находиться другой, что приводит к реализации вложенных циклов. Вложенные циклы необходимы для решения большого числа задач, например, вычисления двойных, тройных и т.д. сумм, просмотр элементов двумерного массива и многих других задач. В качестве примера вложенных циклов рассмотрим задачу вычисления суммы двойного ряда:
Пример 11.
int M = 10, N = 5;
Того же результата можно добиться и с помощью оператора цикла while.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ.
- Ознакомится с теоретической частью лабораторной работы.
- Написать программу работы с операторами циклов while и for в соответствии с номером своего варианта.
- Написать программу с использованием оператора цикла do while в соответствии с номером своего варианта.
- Сделать выводы о полученных результатах работы программ.
СОДЕРЖАНИЕ ОТЧЕТА
- Титульный лист с названием лабораторной работы, номером своего варианта, фамилией студента(ов) и группы.
- На первом после титульного листа указать :
- Текст программы.
- Результаты работы программы.
- Выводы о полученных результатах работы программы.
- В чем отличия между операторами while и do while?
- Дайте понятие вложенных циклов?
- Что такое цикл с предусловием?
- Что такое цикл с постусловием?
- Условие остановки цикла while?
- Для каких целей используются циклы в программировании?
- Перечислите операторы циклов в языке С.
- Липпман С. Б. Основы программирования на C++: Пер. с англ. — М.:Вильямс, 2002. — 256 с.
- Липпман С. Б., Лажойе Ж. Язык программирования С++. Вводный курс: Пер. с англ. — 3-е изд. — М.: ДМК, 2001. — 1104 с.
- Страуструп Б. Язык программирования C++: Пер. с англ. — 3-е спец. изд. — М.: Бином, 2003. — 1104 с.
- Страуструп Б. Дизайн и эволюция языка C++. Объектно-ориентированный язык программирования: Пер. с англ. — М.: ДМК пресс, Питер, 2006. — 448 с.
- Эккель Б. Философия C++. Введение в стандартный C++: Пер. с англ. — 2-е изд. — СПб.: Питер, 2004. — 572 с.
- Эккель Б., Эллисон Ч. Философия C++. Практическое программирование: Пер. с англ. — СПб.: Питер, 2004. — 608 с.
- Задание по варианту.
КОНТРОЛЬНЫЕ ВОПРОСЫ
СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ