theSum = 0 # переменная-аккумулятор
x = -1 # очередное слагаемое
while x != 0:
x = int(input("Следующее число (0 для остановки): "))
theSum = theSum + x
print(theSum) # вывод ответа
Условие цикла находится в x?третьей строке программы.
Ещё один пример использования цикла while - валидация вводимых значений. В следующем коде, ввод возраста (переменная age) будет продолжаться до тех пор, пока не введут число xбольше нуля:
while True:
print("Эта строка появится на экране")
break
print("А эта строка?")
print("Цикл while завершил работу")
Рисунок 2: Работа инструкции break
Инструкция, записанная в xчетвертой строке не выполнится, так как инструкция break в третьей строке прервёт выполнение цикла.
Инструкция continue
Инструкция continue прерывает выполнение текущей итерации цикла. Интерпретатор вернётся к проверке условия цикла.
В следующем примере на экран выведутся только чётные числа от 1 до 9. Каждый раз, когда значение переменной x делится на 2 без остатка, будем пропускать итерацию цикла с помощью continue:
while True:
name = input("Имя пользователя: ")
if name != 'admin':
continue
password = input('Привет, admin. Введите пароль:')
if password == 'swordfish':
break
print("Доступ разрешён!")
Цикл while будет выполняться бесконечно, так как условие цикла всегда равно True. В теле цикла просим ввести имя пользователя - переменная name. Если имя не равно строке “ xadmin”, то пропускаем итерацию цикла с помощью continue и возвращаемся к началу тела цикла. Когда введено правильное имя, просим ввести пароль - переменная password. Когда будет введен пароль “ xswordfish” будет выполнена инструкция break и цикл while прервётся.
Примеры
Пример № 1 (ex01.py)
Напишите программу рассчитывающую среднее арифметическое группы оценок. Количество оценок не известно заранее. Оценка не может быть отрицательным числом.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
print("Среднее арифметическое")
#сумма чисел изначально равна 0
sum=0
#переменная count будет хранить количество оценок
count=0
#вводим первую оценку
x=int(input("Введите оценку> "))
#цикл while будет выполняться пока введённая оценка
print("Среднее арифметическое")
#сумма чисел изначально равна 0
sum = 0
#переменная count будет хранить количество оценок
count = 0
#вводим первую оценку
x = int(input("Введите оценку> "))
#цикл while будет выполняться пока введённая оценка
#будет положительным числом
while x >= 0:
#прибавляем введённую оценку к общей сумме
sum = sum + x
#увеличиваем счётчик оценок на 1
count = count + 1
#запрашиваем ввод следующей оценки
x = int(input("Введите оценку> "))
#выводим среднюю оценку
print("Средняя оценка: ", sum / count)
Пример № 2 (ex02.py)
Напишите игру «Угадай число». Компьютер загадывает число от 1 до 10 и предлагает его отгадать. Компьютер сообщает пользователю больше или меньше число введённое пользователем относительно загаданного числа. Для получения случайного числа используется модуль random.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#импортируем модуль для получения случайного числа
importrandom
#генерируем случайное число от 1 до 10
num=random.randrange(1,11)
#предлагаем ввести ответ
guess=int(input(">"))
#инициализируем счётчик количества попыток угадать число
#импортируем модуль для получения случайного числа
import random
#генерируем случайное число от 1 до 10
num = random.randrange(1,11)
#предлагаем ввести ответ
guess = int(input(">"))
#инициализируем счётчик количества попыток угадать число
guesses = 1
#цикл повторяется пока число не угадано
while num != guess:
if num > guess:
print("Задуманное число больше введённого")
elif num < guess:
print("Задуманное число меньше введённого")
guess = int(input(">"))
guesses = guesses + 1
#выводим результаты игры
print("Задуманное число:", num)
print("Количество попыток:", guesses)
Задания для самостоятельной работы
Задание № 1 (sam01.py)
Вычислите сумму всех нечётных чисел от 1 до 20. Для выполнения вычислений используйте цикл while.
Задание № 2 (sam02.py)
Вычислите сумму чётных чисел от одного до n, где n – число, введённое с клавиатуры. Для выполнения вычислений используйте цикл while.
Задание № 3 (sam03.py)
Найти все трёхзначные числа, которые делятся на 11 без остатка. Для решения задачи используйте цикл while.
Для определения делимости числа используйте оператор % - получение остатка от деления:
# 10 не делится на 3 без остатка, 3 не является делителем 1010%3>>>1# 10 делится на 5 без остатка, 5 является делителем 1010%5>>>0
Задание № 4 (sam04.py)
Числа 1, 1, 2, 3, 5, 8 … являются частью последовательности Фибоначчи. Каждое число в последовательности, после первых двух является суммой двух предыдущих чисел последовательности. Напишите программу, которая вычисляет и выводит на экран n-ое число последовательности. Число n вводиться с клавиатуры.
Задание № 5 (sam05.py)
Для нахождения наибольшего общего делителя (НОД) двух чисел можно использовать алгоритм Евклида. Пусть m и n - исходные числа. Многократно выполним следующую операцию:
n, m = m, n % m
до тех пор, пока m не будет равно 0. После этого значение НОД будет храниться в переменной n.
Напишите программу нахождения НОД двух чисел, используя приведённый выше алгоритм.