Содержание:
- Словарь Python-объектов
- Теория
- 1. Введение. Зачем нужен цикл while
- 2. Синтаксис цикла while
- 3. while и if: в чём разница
- 4. Сравнение for и while
- 5. Считывание данных до стоп-значения
- 6. Бесконечные циклы
- 7. Эмуляция цикла с постусловием (while True + break)
- 8. Обработка цифр числа с помощью while
- 9. Условие в while с логическими операторами
- 10. Обработка цифр числа с помощью for
- Лабораторные работы
- Самостоятельные задания
Словарь Python-объектов
Ниже приведён справочник по основным конструкциям, операторам и шаблонам, рассмотренным в этом уроке. Каждый пункт содержит ссылку на соответствующий раздел теории, лабораторную работу или задание.
Цикл while loop
-
while условие:
Повторяет блок кода, пока условие истинно. -
Тело цикла
Блок команд с отступом, выполняемый на каждой итерации. -
Цикл с предусловием
Условие проверяется до выполнения тела. -
for vs while
for — когда известно число повторений; while — когда неизвестно.
Управление циклом control
-
Стоп-значение (sentinel)
Особое значение, сигнализирующее о завершении ввода. -
Бесконечный цикл
Цикл, условие которого никогда не станет ложным. -
while True + break
Эмуляция цикла с постусловием. -
Ctrl + C
Прерывание зависшей программы в терминале.
Обработка цифр digits
-
n % 10
Получить последнюю (младшую) цифру числа. -
n // 10
Удалить последнюю цифру числа. -
while n != 0
Стандартный цикл перебора всех цифр числа. -
reversed = reversed * 10 + digit
Сборка перевёрнутого числа. -
len(str(n))
Количество разрядов числа. -
num // 10**(n-i) % 10
Получить i-ю цифру слева (через for).
Типовые шаблоны patterns
-
Сумма цифр
Аккумулятор, стартующий с 0. -
Произведение цифр
Аккумулятор, стартующий с 1. -
Счётчик цифр
Переменная для подсчёта количества. -
Флаг (flag)
Логическая переменная для запоминания состояния.
Ввод и вывод I/O
-
input()
Считывает строку от пользователя. Возвращаетstr. -
int(input())
Считывает целое число с клавиатуры. -
print()
Выводит данные на экран.
Лабораторные работы practice
- Лабораторная 1Вывод цифр в обратном порядке столбиком.
- Лабораторная 2Сумма, количество, произведение, среднее, первая цифра.
- Лабораторная 3Проверка одинаковых цифр.
- Лабораторная 4Максимальная и минимальная цифра числа.
Самостоятельные задания tasks
- Задание 1Обратный отсчёт от n до 1.
- Задание 2Сумма чисел до нуля.
- Задание 3Подсчёт чётных цифр числа.
- Задание 4Проверка наличия заданной цифры.
- Задание 5Вторая цифра справа.
- Задание 6Проверка на палиндром.
- Задание 7Сумма цифр равна произведению.
- Задание 8Проверка пароля с повторным вводом.
- Задание 9Сумма квадратов цифр.
- Задание 10Цифры от большего к меньшему.
- Задание 11Подсчёт чётных и нечётных цифр.
- Задание 12Поиск цифры 7 с использованием флага.
- Задание 13Количество разрядов числа.
- Задание 14Удаление цифры 0 из числа.
- Задание 15Ввод чисел до слова «stop».
- Задание 16Проверка: возрастает ли последовательность цифр.
Теория
1. Введение. Зачем нужен цикл while
В предыдущем уроке мы рассмотрели цикл for — счётный цикл. Он отлично работает, когда мы заранее знаем, сколько повторений (итераций) нам потребуется.
Но иногда нужно, чтобы цикл выполнялся до наступления некоторого события, и количество итераций заранее оценить просто невозможно. Например:
- считывать числа до тех пор, пока пользователь не введёт
stop; - делить число на 10, пока оно не станет равным нулю;
- запрашивать пароль, пока он не будет введён верно.
Здесь на помощь приходит цикл while — условный цикл. Слово while в переводе с английского означает «пока».
| Характеристика | for | while |
|---|---|---|
| Тип | Счётный цикл | Условный цикл |
| Когда использовать | Известно число итераций | Известно условие остановки |
| Проверка условия | Автоматически по диапазону | Перед каждой итерацией |
| Нужно ли обновлять переменную | Нет | Да, вручную |
2. Синтаксис цикла while
Структура цикла while в Python очень похожа на условный оператор if:
while условие: # тело цикла — блок кода |
Ключевые элементы:
- Ключевое слово
while. - Условие, которое возвращает
TrueилиFalse. - Двоеточие
:в конце строки с условием. - Блок кода с отступом (4 пробела) — тело цикла.
i = 0 while i < 10: print('Привет') i += 1 |
Вывод:
Привет Привет Привет Привет Привет Привет Привет Привет Привет Привет
Как это работает:
i = 0— инициализируем счётчик.while i < 10:— проверяем, что 0 < 10. Истина — входим в цикл.print('Привет')— выводим сообщение.i += 1— увеличиваем счётчик. Возвращаемся к шагу 2.- Когда
iстанет равным 10, условие станет ложным, и цикл завершится.
i = -1 while i > 0: print('Hello world!') |
Ничего не выведется, потому что условие i > 0 ложно с самого начала.
3. while и if: в чём разница
# if — выполняется ОДИН РАЗ, если условие истинно if i < 10: print("Hello") # while — выполняется МНОГОКРАТНО, пока условие истинно i = 0 while i < 10: print("Hello") i += 1 |
Блок if выполняется максимум один раз. Блок while — до тех пор, пока условие не станет ложным.
while обязательно должно быть что-то, что сделает условие ложным. Иначе цикл никогда не завершится.
4. Сравнение for и while
Любой цикл for можно заменить циклом while (но не наоборот).
# С помощью for for i in range(101): print(i) # С помощью while i = 0 while i < 101: print(i) i += 1 |
# С помощью for for i in range(0, 100, 3): print(i) # С помощью while i = 0 while i < 100: print(i) i += 3 |
Обратите внимание: в случае с while нам пришлось самостоятельно завести переменную i и вручную увеличивать её значение.
for— когда известно точное количество итераций.while— когда известно условие остановки, но не количество итераций.
5. Считывание данных до стоп-значения
Очень часто в задачах на while данные считываются до тех пор, пока пользователь не введёт некоторое стоп-значение (sentinel value).
num = int(input()) while num != -1: print('Квадрат вашего числа равен:', num * num) num = int(input()) |
Здесь важны два момента:
- Первичное считывание — читаем первое число до входа в цикл. Это даёт нам первое значение для проверки.
- Повторное считывание — читаем следующее число в конце тела цикла. Если забыть эту строку,
numникогда не изменится, и цикл станет бесконечным.
stop.text = input() total = 0 while text != 'stop': total += int(text) text = input() print('Сумма чисел равна', total) |
Пример работы:
5 10 3 stop Сумма чисел равна 18
6. Бесконечные циклы
Если условие цикла никогда не станет ложным, такой цикл называется бесконечным. Бесконечный цикл продолжает выполняться до тех пор, пока программа не будет прервана.
i = 0 total = 0 while i < 10: total += i |
Переменная i внутри цикла не изменяется, поэтому условие i < 10 всегда истинно. Программа зависает.
Ctrl + C (KeyboardInterrupt). В IDLE можно закрыть окно или нажать Ctrl + F6.
- Забыли увеличить/уменьшить переменную внутри цикла.
- Условие проверяет не ту переменную, которая изменяется.
- Условие всегда истинно (например,
while Trueбезbreak).
7. Эмуляция цикла с постусловием (while True + break)
В Python нет цикла с постусловием (когда тело выполняется хотя бы один раз, а условие проверяется после). Однако его можно сэмулировать с помощью конструкции while True с оператором break:
while True: # тело цикла if условие_выхода: break |
count = 0 while True: print(count) count += 1 if count >= 10: break |
Вывод:
0 1 2 3 4 5 6 7 8 9
Такая конструкция удобна, когда тело цикла должно выполниться хотя бы один раз, независимо от условия.
8. Обработка цифр числа с помощью while
Одно из самых частых применений цикла while — обработка цифр натурального числа. Опирается это на два оператора:
num % 10— возвращает последнюю (младшую) цифру числа;num // 10— возвращает число без последней цифры.
Проследим для num = 123:
123 % 10 = 3 | 123 // 10 = 12 12 % 10 = 2 | 12 // 10 = 1 1 % 10 = 1 | 1 // 10 = 0
Как только число становится равным 0, все цифры обработаны — цикл можно завершать.
Стандартная структура цикла
num = int(input()) while num != 0: last_digit = num % 10 # получаем последнюю цифру # ... обработка last_digit num = num // 10 # удаляем последнюю цифру |
num = 12345 while num != 0: print(num % 10) num = num // 10 |
Вывод:
5 4 3 2 1
Сумма цифр числа
num = int(input()) total = 0 while num != 0: total += num % 10 num //= 10 print("Сумма цифр:", total) |
Пример работы:
Введите число: 1234 Сумма цифр: 10
Произведение цифр числа
num = int(input()) product = 1 while num != 0: product *= num % 10 num //= 10 print("Произведение цифр:", product) |
0, начальное значение произведения — 1. Это нейтральные элементы для сложения и умножения соответственно.
Проверка: есть ли в числе заданная цифра (флаг)
num = int(input("Введите число: ")) has_seven = False # сигнальная метка (флаг) while num != 0: last_digit = num % 10 if last_digit == 7: has_seven = True num = num // 10 if has_seven: print('YES') else: print('NO') |
Пример работы:
Введите число: 1576 YES
Переворот числа
Используя формулу reversed_num = reversed_num * 10 + digit, можно собрать число в обратном порядке:
num = int(input()) reversed_num = 0 while num != 0: digit = num % 10 reversed_num = reversed_num * 10 + digit num //= 10 print("Перевёрнутое число:", reversed_num) |
Трассировка для num = 123:
| Итерация | digit | reversed_num | num |
|---|---|---|---|
| 1 | 3 | 0×10+3 = 3 | 12 |
| 2 | 2 | 3×10+2 = 32 | 1 |
| 3 | 1 | 32×10+1 = 321 | 0 |
9. Условие в while с логическими операторами
Условие в цикле while, как и в условном операторе if, может содержать логические операторы or, and, not:
name = input() while name != 'Валера' and name != 'Артур': print('Доступ запрещён') name = input() print('Доступ разрешён') |
Цикл продолжается до тех пор, пока имя не равно ни «Валера», ни «Артур».
10. Обработка цифр числа с помощью for
Помимо while, цифры числа можно обрабатывать циклом for, если заранее известно количество разрядов числа.
Формула для получения i-й цифры (слева направо, нумерация с 1):
(num // 10**(n-i)) % 10
где n — количество разрядов числа, i — номер цифры.
Количество разрядов находят через длину строки:
n = len(str(num)) |
num = 8619 n = len(str(num)) for i in range(1, n + 1): digit = num // 10 ** (n - i) % 10 print(f"{i}-я цифра равна {digit}") |
Вывод:
1-я цифра равна 8 2-я цифра равна 6 3-я цифра равна 1 4-я цифра равна 9
| Подход | Плюсы | Минусы |
|---|---|---|
while num != 0 |
Не нужно знать длину числа, работает для любого количества разрядов | Обрабатывает цифры справа налево |
for i in range(1, n+1) |
Обрабатывает цифры слева направо | Требует вычисления длины числа |
Лабораторные работы
В этом разделе представлены лабораторные работы с решениями. Попробуйте сначала решить задачу самостоятельно, а затем откройте решение для проверки.
Показать решение
n = int(input("Введите число: ")) while n != 0: print(n % 10) n //= 10 |
Пример работы:
Введите число: 12345 5 4 3 2 1
Пошаговое объяснение:
- Считываем число
n. - Пока
nне равно 0 — извлекаем последнюю цифру черезn % 10и печатаем её. - Удаляем последнюю цифру через
n //= 10. - Цикл повторяется, пока все цифры не будут обработаны.
- сумму его цифр;
- количество цифр;
- произведение его цифр;
- среднее арифметическое его цифр;
- первую (старшую) цифру;
- сумму первой и последней цифр.
Показать решение
n = int(input("Введите число: ")) original = n # сохраняем оригинал для расчёта первой цифры total = 0 count = 0 product = 1 while n != 0: digit = n % 10 total += digit count += 1 product *= digit n //= 10 # После цикла n стал равен 0. Восстанавливаем первую цифру из оригинала. first_digit = original // (10 ** (count - 1)) last_digit = original % 10 average = total / count print("Сумма:", total) print("Количество:", count) print("Произведение:", product) print("Среднее:", average) print("Первая цифра:", first_digit) print("Сумма первой и последней:", first_digit + last_digit) |
Пример работы:
Введите число: 5678 Сумма: 26 Количество: 4 Произведение: 1680 Среднее: 6.5 Первая цифра: 5 Сумма первой и последней: 13
Пошаговое объяснение:
- Инициализируем
total = 0,count = 0,product = 1. Запоминаемoriginal = n. - В цикле извлекаем цифры справа налево, накапливаем сумму, счётчик и произведение.
- После цикла вычисляем первую цифру:
original // 10**(count-1). - Последняя цифра — это
original % 10. - Среднее = сумма / количество.
Показать решение
n = int(input("Введите число: ")) if n == 0: print("YES") # 0 — одна цифра, считается тривиально одинаковым else: last_digit = n % 10 n //= 10 is_identical = True while n != 0: digit = n % 10 if digit != last_digit: is_identical = False break n //= 10 if is_identical: print("YES") else: print("NO") |
Пример работы:
Введите число: 111111 YES
Введите число: 111112 NO
Пошаговое объяснение:
- Отдельно обрабатываем случай
n == 0. - Запоминаем последнюю цифру как эталон (
last_digit) и удаляем её из числа. - Устанавливаем флаг
is_identical = True. - Перебираем оставшиеся цифры: если хотя бы одна отличается — сбрасываем флаг и прерываем цикл через
break. - Выводим результат в зависимости от значения флага.
Показать решение
n = int(input("Введите число: ")) max_digit = n % 10 # инициализируем последней цифрой min_digit = n % 10 n = n // 10 # удаляем её из дальнейшей обработки while n != 0: digit = n % 10 if digit > max_digit: max_digit = digit if digit < min_digit: min_digit = digit n = n // 10 print("Максимальная цифра:", max_digit) print("Минимальная цифра:", min_digit) |
Пример работы:
Введите число: 53258 Максимальная цифра: 8 Минимальная цифра: 2
Пошаговое объяснение:
- В качестве начального значения
max_digitиmin_digitберём последнюю цифру числа. - Удаляем её из числа, чтобы не сравнивать с самой собой.
- В цикле извлекаем очередную цифру и сравниваем с текущими максимумом и минимумом.
- Если цифра больше
max_digit— обновляем максимум. Если меньшеmin_digit— обновляем минимум.
Самостоятельные задания
Решите следующие задачи самостоятельно. Для проверки используйте примеры вывода.
n и выведите все числа от n до 1 с помощью цикла while.
Пример вывода:
Введите n: 5 5 4 3 2 1
Пример вывода:
5 10 3 0 Сумма: 18
Пример вывода:
Введите число: 1234 Количество чётных цифр: 2
Введите число: 1357 Количество чётных цифр: 0
Пример вывода:
Введите число: 4567 Введите цифру: 5 YES
n (n > 9) и выведите его вторую цифру справа.
Пример вывода:
Введите число: 4567 Вторая цифра справа: 6
Введите число: 123 Вторая цифра справа: 2
Пример вывода:
Введите число: 121 YES
Введите число: 123 NO
Подсказка: сравните оригинальное число с его перевёрнутой версией.
Пример вывода:
Введите число: 123 YES
Введите число: 456 NO
Пример вывода:
Введите пароль: hello Неверно, попробуйте снова Введите пароль: world Неверно, попробуйте снова Введите пароль: python123 Доступ разрешён
Пример вывода:
Введите число: 123 Сумма квадратов цифр: 14
Пояснение: 1² + 2² + 3² = 1 + 4 + 9 = 14.
Пример вывода:
Введите число: 53258 8 5 3 2 2
Подсказка: сначала соберите цифры в список, отсортируйте его и выведите.
Пример вывода:
Введите число: 123456 Чётных цифр: 3 Нечётных цифр: 3
Пример вывода:
Введите число: 1576 YES
Введите число: 1234 NO
while.
Пример вывода:
Введите число: 987654 Количество разрядов: 6
Подсказка: на каждой итерации делите число на 10 и увеличивайте счётчик.
Пример вывода:
Введите число: 102030 Новое число: 123
Подсказка: собирайте новое число, прибавляя цифру справа к текущему результату.
stop. Выведите сумму и количество введённых чисел.
Пример вывода:
5 10 3 stop Сумма: 18 Количество: 3
Пример вывода:
Введите число: 1234 YES
Введите число: 1232 NO
Подсказка: обрабатывайте цифры справа налево и сравнивайте каждую с предыдущей.