(Python) Оператор цикла с условием - WHILE


Цикл с условием. Оператор while

Изучая цикл for, мы говорили, что если известно число повторений каких-либо действий, то можно сократить программу, используя оператор цикла for. А что делать, если количество повторений неизвестно? А такое бывает довольно часто.
 
Пример
Вспомнив перевод числа из десятичной системы счисления в любую другую, нам необходимо делить число (а затем результат деления) на основание системы счисления, пока в ответе мы не получим ноль. Сколько раз мы поделим неизвестно. А программ, реализующих такой алгоритм достаточно много. 

Как же реализовывать алгоритм, если нам неизвестно точное число повторений?

Для таких случаев в программировании существует оператор цикла с условием. 
В языке программировании Python, оператор цикла с условием начинается со слова while и имеет следующую конструкцию.
while <условие>:
  тело цикла

Как нам уже известно:
- условие - это выражение, результатом которого может быть либо истина, либо ложь (как в условном операторе);
- тело цикла - это команды, которые необходимо повторить, они записываются с отступами.

Как работает оператор?
1. Сначала программа вычисляет условие, стоящее в скобках после слова while. Если условие выполнятся (истинно), то программа выполняет оператор(ы), содержащийся в теле цикла.
2. После того, как завершено выполнение тела цикла, программа возвращается на проверку условия и заново его проверяет.
3. Эти действия (проверка условия - выполнение тела цикла) повторяются до тех пор, пока условие не станет ложным.
4. Если при первом выполнении данного оператора условие сразу не выполняется (ложно), то программа ни разу не выполнит тело цикла.

Анализируя работу данного оператора, должно стать ясным, что в теле цикла должен находиться оператор, который влияет на условие.
Например, в цикле может увеличиваться значение переменной, используемой в условии.

Пример программы, которую мы назовем "Молчаливый счет".
Заставим программу вместо нас считать, например, до 10.
Программа должна выводить фразы "Start" и "Finish", и между этими действиями выводить на экран числа, которые считаются.

Например, так:
Start
1 2 3 4 5 6 7 8 9 10
Finish

Программа с использованием цикла while будет выглядеть следующим образом:
print("Start")  
i = 1
while i <= 10:
    print(i, end=" ")
    i += 1         # оператор, который влияет на изменение переменной, 
                   # стоящей в условии
print()            # перевод курсора на новую строку
print("Finish")

В данной программе мы присваиваем значение переменной i = 1 - начало отсчета.
Далее, пока у нас значение переменной i не больше (то есть меньше либо равно) нужного нам значения, мы: 
 1. выводим на экран значение переменной i;
 2. увеличиваем значение переменной i на 1 - данный оператор влияет на значение условия, стоящего в скобках. Переменная i увеличивается, то есть в какой-то момент условие i <= 10 станет ложным. Это произойдет, когда i станет равно 11. В этом случае тело цикла выполняться уже не будет, и программа будет выполнять следующий после цикла оператор, т.е. print() и print("Finish").

Задача

Необходимо ввести число (пусть оно будет меньше 3 000 000), и определить количество цифр в нем.
 
Идея решения
Нам необходимо просто последовательно отсекать от числа последнюю цифру (сделать это можно, уменьшив число в 10 раз, применяя целочисленное деление на 10), при этом каждый раз необходимо увеличить счетчик. 

В итоге, после того как мы отсечём все цифры числа, в счетчике получим их количество.

Этот алгоритм можно сформулировать так:
Пока число не равно нулю, уменьшать его в 10 раз и увеличивать каждый раз счетчик на 1.
 
число (n) счетчик
123 0
12 1
1 2
0 3

Программа будет выглядеть следующим образом.
n = int(input())
count = 0
while n != 0:
    count += 1
    n = n // 10
print("Number -", n, "contains", count, "digits")

Данную программу нужно знать наизусть, т.к. на ее основе решаются многие другие задачи, связанные с обработкой цифр числа.

Задача

На вход программы поступает поток данных — последовательность целых чисел, которая заканчивается нулём (ноль не входит в последовательность). Требуется найти сумму элементов этой последовательности.
 
Алгоритм решения
 sum=0
 ввод x           // ввести первое число 
 пока x != 0      // в условии ставится признак окончания ввода, 
 нц               // то есть пока не ввели ноль
   sum = sum + x // с исходным числом можно выполнить какие-либо действия. 
                  // Можно добавить проверку числа на какое-то условие и т.д.
   ввод x         // ввести следующее число
 кц
 вывести sum      //вывод результата

Пропустить Навигационные Ссылки. Чтобы оставить комментарий нужна авторизация