• 1
    Ввод и вывод данных
    • Задачи
  • 2
    Условия
    • Задачи
  • 3
    Цикл for
    • Задачи
  • 4
    Строки
    • Задачи
  • 5
    Цикл while
    • Задачи
  • 6
    Списки
    • Задачи
  • 7
    Двумерные массивы
    • Задачи
  • 8
    Словари
    • Задачи
  • 9
    Множества
    • Задачи
  • 10
    Функции и рекурсия
    • Задачи
  • к

Занятие 5. Цикл while

Уровень сложности:

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib

Задача«Удвоение последовательности»

Вы — юный подмастерье в лаборатории великого алхимика. Ваш наставник открыл способ удваивать силу магических эссенций, которые представлены числовыми значениями. Однако его метод работает только с "чистыми" эссенциями, имеющими положительную силу. Эссенции с нулевой или отрицательной силой считаются нестабильными и не поддаются трансформации.

Алхимик диктует вам значения силы эссенций одну за другой. Ваша задача — создать программу, которая будет принимать эти значения, пока алхимик не скажет "стоп". После этого программа должна обработать все полученные эссенции: удвоить силу каждой "чистой" (положительной) эссенции и вывести результат на экран. Нестабильные эссенции следует просто проигнорировать.

Задача:
Напишите программу, которая:

  1. Считывает последовательность целых чисел, вводимых пользователем по одному на строке.
  2. Прекращает считывание, когда пользователь вводит слово "стоп".
  3. Для каждого введённого положительного числа вычисляет его значение, умноженное на 2.
  4. Выводит полученные результаты, каждый на новой строке. Числа, которые не являются положительными (ноль и отрицательные), игнорируются, и для них ничего выводить не нужно.

Формат ввода

Последовательность данных, где каждая строка содержит либо целое число (int), либо слово "стоп" (string). Ввод завершается после получения строки "стоп".

Формат Вывода

Последовательность целых чисел (int), каждое на новой строке. Это удвоенные значения всех положительных чисел из входной последовательности, выведенные в том же порядке.

Пример

Ввод

10
-5
25
0
8
стоп

Вывод

20
50
16

Подсказка

Всё о цикле while в Python

Цикл while (в переводе «пока») позволяет повторять выполнение блока кода до тех пор, пока определенное логическое условие остается истинным (True). Это незаменимый инструмент, когда вы не знаете заранее, сколько именно раз нужно выполнить действие. Основное отличие от цикла for в том, что for обычно используется для итерации по известной последовательности (списку, строке, диапазону), а while — когда количество итераций зависит от выполнения некоторого условия в процессе работы программы.

Синтаксис цикла while

Вот базовый синтаксис цикла while в Python:

while условие:
    блок_кода
  • Условие: это любое выражение, которое возвращает True или False. Это может быть не только сравнение переменных, но и, например, проверка наличия элементов в списке или значение, возвращаемое функцией. Если условие истинно (True), выполняется блок_кода.
  • Блок_кода: один или несколько операторов с обязательным отступом, которые выполняются при каждом прохождении цикла (каждой итерации).

Пример простого цикла while

Рассмотрим пример, где мы выводим числа от 1 до 5:

count = 1
while count <= 5:
    print(count)
    count += 1  # Важнейшая строка: увеличиваем значение переменной count на 1

Вывод:

1
2
3
4
5

Здесь мы начинаем со значения count = 1. Перед каждой итерацией Python проверяет условие count <= 5. Пока оно истинно, выполняется блок кода: печатается текущее значение count, и затем оно увеличивается на 1. Как только count становится равен 6, условие 6 <= 5 становится ложным (False), и цикл завершает свою работу.

Полезный совет: переменная, которая управляет циклом (в нашем случае count), часто называется счетчиком или переменной управления циклом. Крайне важно следить за тем, чтобы она изменялась внутри цикла таким образом, чтобы условие рано или поздно стало ложным.

Потенциальные проблемы: бесконечные циклы

Бесконечный цикл — это цикл, который никогда не завершается. Это происходит, когда его условие всегда остается истинным.

count = 1
while count <= 5:
    print(count)
    # Ошибка: мы забыли изменить значение count, поэтому условие всегда будет True

Чтобы остановить выполнение такого цикла, нужно прервать программу вручную (например, нажав Ctrl+C в терминале).

Однако стоит отметить, что бесконечные циклы не всегда являются ошибкой. Иногда они используются намеренно, например, в программах, которые должны работать постоянно: серверы, слушающие подключения, или игровые циклы. В таких случаях часто используется конструкция while True:, а выход из цикла организуется с помощью break по какому-то особому событию.

Использование break для досрочного выхода из цикла

Мы можем использовать оператор break, чтобы немедленно и полностью завершить выполнение цикла, даже если его основное условие все еще истинно.

count = 1
while count <= 10:  # Условие позволяет идти до 10
    if count == 3:
        print("Встретили число 3, выходим из цикла.")
        break  # Выход из цикла, когда count равно 3
    print(count)
    count += 1

Вывод:

1
2
Встретили число 3, выходим из цикла.

Полезный совет: если у вас есть вложенные циклы (один while внутри другого), оператор break прервет выполнение только самого внутреннего цикла, в котором он находится.

Использование continue для пропуска итерации

Оператор continue пропускает оставшуюся часть кода в текущей итерации и немедленно переходит к проверке условия для следующей итерации.

count = 0
while count < 5:
    count += 1
    if count == 3:
        print("Пропускаем число 3...")
        continue  # Пропускаем оставшийся код и переходим к следующей итерации
    print(f"Обрабатываем число: {count}")

Вывод:

Обрабатываем число: 1
Обрабатываем число: 2
Пропускаем число 3...
Обрабатываем число: 4
Обрабатываем число: 5

Важно не путать continue с break. break полностью прекращает работу цикла, а continue лишь досрочно завершает текущий шаг.

Цикл while с пользовательским вводом

Циклы while идеально подходят для обработки пользовательского ввода, когда нужно запрашивать данные до тех пор, пока они не будут соответствовать нужным критериям.

import random

secret_number = random.randint(1, 10)
guess = None # Инициализируем переменную до цикла

# Цикл будет работать, пока guess не равен secret_number
while guess != secret_number:
    guess_text = input("Угадайте число от 1 до 10: ")
    # Проверяем, ввел ли пользователь число
    if not guess_text.isdigit():
        print("Пожалуйста, введите число.")
        continue # Пропускаем остальную логику и запрашиваем ввод снова
    
    guess = int(guess_text)

    if guess < secret_number:
        print("Ваше число меньше загаданного.")
    elif guess > secret_number:
        print("Ваше число больше загаданного.")

print(f"Поздравляем! Вы угадали число {secret_number}!")

Цикл while с блоком else

У циклов в Python есть интересная и не самая известная особенность — блок else. Код в блоке else выполняется только в том случае, если цикл завершился естественным путем (то есть его условие стало False), а не был прерван оператором break.

# Пример, где else выполнится
count = 1
while count <= 3:
    print(f"Итерация {count}")
    count += 1
else:
    print("Цикл завершился естественным образом.")

# Вывод:
# Итерация 1
# Итерация 2
# Итерация 3
# Цикл завершился естественным образом.

# Пример, где else НЕ выполнится из-за break
count = 1
while count <= 3:
    if count == 2:
        print("Цикл прерван оператором break.")
        break
    print(f"Итерация {count}")
    count += 1
else:
    print("Этот блок не будет выполнен.")
    
# Вывод:
# Итерация 1
# Цикл прерван оператором break.

Заключение

Цикл while — это мощный инструмент в Python. Вот основные моменты, которые нужно запомнить:

  1. Инициализация переменных: Убедитесь, что переменные, используемые в условии, существуют до начала цикла.
  2. Изменение условия: Внутри цикла должно происходить что-то, что в конечном итоге сделает условие ложным, чтобы избежать бесконечного цикла.
  3. break и continue: Используйте break для полного выхода из цикла и continue для пропуска текущей итерации.
  4. Паттерн while True: Это удобный способ организовать цикл, который должен прерываться по сложному внутреннему условию с помощью break.
  5. Блок else: Помните о возможности использовать блок else для кода, который должен выполниться только при штатном завершении цикла.
main.py
Тест 1
Тест 2
Тест 3
Тест 4
Тест 5
Тест 6
Тест 7
Тест 8
Тест 9
Тест 10
Решение разработчика
# Создаем пустой список, куда будем сохранять числовые значения эссенций.
essences = []

# Запускаем бесконечный цикл для ввода данных.
# Он будет прерван, когда пользователь введет "стоп".
while True:
    # Считываем очередную строку, которую ввел пользователь.
    user_input = input()

    # Проверяем, не является ли введенная строка командой для остановки.
    if user_input == "стоп":
        # Если да, то выходим из цикла ввода.
        break
    
    # Если это не команда "стоп", значит, это число.
    # Преобразуем строку в целое число и добавляем в наш список.
    essences.append(int(user_input))

# Теперь проходим по всему списку собранных эссенций.
# Цикл for идеально подходит для перебора элементов списка.
for value in essences:
    # Применяем правило алхимика: работаем только с чистыми (положительными) эссенциями.
    if value > 0:
        # Если значение положительное, умножаем его на 2 и выводим результат.
        print(value * 2)

🎉 Поздравляем! 🎉

Ты отлично справился с задачей! Это был непростой вызов, но ты нашёл правильное решение. Ты на шаг ближе к мастерству в программировании! Продолжай в том же духе, ведь каждый пройденный этап делает тебя ещё сильнее.

AD

Реклама

red-snake blue-snake green-snake

Запускаем ваш код...

Помощник ИИ

Привет! Я твой помощник по программированию. Задавай любые вопросы по Python, я могу рассказать о функциях, методах, обьяснить то, что тебе не понятно, а так же о текущей задаче!