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

Занятие 3. Цикл for

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

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

Задача«сканер посылок»

💻 Python

На фабрике установлен новый сканер посылок. Он проверяет партию одну за другой. Вы — программист, которому поручено написать для него программу.

Программа сначала получает на вход количество посылок в партии (N). Затем она начинает получать целочисленные коды каждой посылки по одному.

Сканер работает по следующим правилам:

  1. Если код посылки — отрицательное число, это считается ошибкой сканирования. Такую посылку нужно проигнорировать, вывести сообщение "Неверный код, пропуск." и сразу перейти к следующей посылке.
  2. Если код посылки делится на 13 без остатка (например, 0, 13, 26, ...), то посылка считается опасной. Нужно немедленно остановить всю проверку, вывести сообщение "Обнаружена опасная посылка с кодом:
    [код]! Проверка остановлена." и завершить программу.
  3. Если код посылки — обычное, неотрицательное число, не делящееся на 13, то его значение (ценность) прибавляется к общей сумме ценности всех проверенных посылок.
  4. Если вся партия была проверена и ни одной опасной посылки не нашлось, программа должна вывести сообщение "Проверка завершена. Общая ценность посылок:
    [сумма]."

Формат ввода

Первая строка содержит одно целое число N (1 ≤ N ≤ 100) — количество посылок в партии.
Следующие N строк содержат по одному целому числу — код очередной посылки.

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

Программа выводит одно или несколько сообщений в зависимости от кодов посылок:

  • При отрицательном коде: Неверный код, пропуск.
  • При обнаружении опасной посылки: Обнаружена опасная посылка с кодом: [код]! Проверка остановлена. (где
    [код] — это сам код).
  • Если проверка успешно завершилась: Проверка завершена. Общая ценность посылок: [сумма]. (где
    [сумма] — итоговая сумма ценности).

Пример

Ввод

5
10
-5
20
15
2

Вывод

Неверный код, пропуск.
Проверка завершена. Общая ценность посылок: 47.

Подсказка

Основы цикла for

Цикл for в Python — это ваш основной инструмент для перебора элементов в любой последовательности. Представьте, что у вас есть коробка с разными предметами. Цикл for позволяет вам брать по одному предмету, что-то с ним делать и переходить к следующему, пока предметы в коробке не закончатся.

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

Синтаксис:

for элемент in последовательность:
    # блок кода, который будет выполняться для каждого элемента
    # ВАЖНО: этот блок должен иметь отступ!

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

Итерация по списку

Список — это упорядоченная коллекция элементов. Цикл for пройдет по нему от первого элемента до последнего.

фрукты = ['яблоко', 'банан', 'вишня']
for фрукт in фрукты:
    print(фрукт)

Вывод:

яблоко
банан
вишня

Итерация по строке

Строка — это, по сути, последовательность символов. Поэтому цикл for может так же легко перебирать и её.

слово = "Python"
for буква in слово:
    print(буква)

Вывод:

P
y
t
h
o
n

Управление циклом: break и continue

Иногда вам не нужно проходить весь цикл до конца. Для этого существуют специальные операторы.

Оператор break

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

Полезный совет: break незаменим, когда вы что-то ищете. Как только вы нашли то, что искали, нет смысла продолжать поиск.

Пример: У нас есть список чисел, и мы хотим найти первое четное число и остановить выполнение цикла, как только оно будет найдено.

numbers = [1, 3, 5, 6, 7, 9, 10]
for num in numbers:
    if num % 2 == 0:  # Проверка на четность
        print(f"Найдено первое четное число: {num}")
        break  # Немедленно выходим из цикла
print("Цикл завершен.")

Вывод:

Найдено первое четное число: 6
Цикл завершен.

Обратите внимание, что числа 7, 9 и 10 не были проверены, так как цикл был прерван на числе 6.

Оператор continue

Оператор continue используется для пропуска текущей итерации и немедленного перехода к следующей. Весь код, который находится в цикле после continue, для текущего элемента выполняться не будет.

Полезный совет: continue очень удобен для "фильтрации" данных внутри цикла. Если текущий элемент вам не подходит по какому-то критерию, вы просто пропускаете его и переходите к следующему.

Пример: У нас есть список чисел, и мы хотим вывести все числа, кроме четных.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for num in numbers:
    if num % 2 == 0:  # Проверка на четность
        continue  # Если число четное, пропускаем print() и идем к следующему числу
    print(num)

Вывод:

1
3
5
7
9

Когда num было равно 2, 4, 6 и т.д., условие if выполнялось, continue пропускал команду print(num), и цикл сразу начинал новую итерацию.

Разница между break и continue в двух словах

  • break: "Стоп, машина!". Полностью останавливает цикл.
  • continue: "Этот не подходит, давай следующего!". Пропускает только текущий шаг.

Блок else в цикле for

Цикл for может иметь необязательный блок else. Этот блок выполняется только в том случае, если цикл завершил все свои итерации естественным образом, то есть не был прерван оператором break.

Полезный совет: Это очень мощный инструмент для поисковых задач. Блок else позволяет легко обработать ситуацию, когда поиск завершился, но ничего не было найдено.

Пример 1: Цикл завершился нормально

for число in range(3):
    print(число)
else:
    print("Цикл завершен без прерываний.")

Вывод:

0
1
2
Цикл завершен без прерываний.

Пример 2: Цикл прерван оператором break

for число in range(3):
    if число == 1:
        print("Нашли 1, прерываем цикл.")
        break
    print(число)
else:
    # Этот блок не выполнится, так как был break
    print("Цикл завершен без прерываний.")

Вывод:

0
Нашли 1, прерываем цикл.

Практические примеры

Сумма всех чисел в списке

Это классическая задача для понимания работы с циклом и накопления результата.

числа = [1, 2, 3, 4, 5]
сумма = 0  # Инициализируем переменную для хранения суммы ДО цикла
for число in числа:
    сумма += число # На каждой итерации добавляем текущее число к общей сумме
print(f'Сумма: {сумма}')  # Выводим итоговый результат ПОСЛЕ цикла

Вывод: Сумма: 15

Полезный совет: Хотя этот способ отлично демонстрирует работу цикла, в реальном коде для нахождения суммы элементов списка лучше использовать встроенную функцию sum(): print(sum(числа)). Это короче и эффективнее.

Поиск максимального числа в списке

Здесь мы предполагаем, что первый элемент является максимальным, а затем в цикле сравниваем его со всеми остальными.

числа = [1, 7, 3, 9, 5]
максимальное = числа[0] # Принимаем первый элемент за временный максимум
for число in числа:
    if число > максимальное: # Если находим число больше нашего максимума...
        максимальное = число # ...то обновляем максимум
print(f'Максимальное: {максимальное}')

Вывод: Максимальное: 9

Полезный совет: Как и в случае с суммой, в Python есть встроенная функция max() для этой задачи: print(max(числа)). Знание этих функций экономит время, но понимание алгоритма их работы с помощью цикла for является ключевым навыком для программиста.

main.py
Тест 1
Тест 2
Тест 3
Тест 4
Тест 5
Тест 6
Тест 7
Тест 8
Тест 9
Тест 10
Решение разработчика
# Сначала считываем количество посылок в партии
num_packages = int(input())

# Инициализируем переменную для хранения общей ценности
total_value = 0

# Запускаем цикл for, который будет выполняться num_packages раз
for _ in range(num_packages):
    # Считываем код очередной посылки
    package_code = int(input())

    # 1. Проверяем на ошибку сканирования (отрицательный код)
    if package_code < 0:
        print("Неверный код, пропуск.")
        # Пропускаем остаток кода и переходим к следующей итерации
        continue

    # 2. Проверяем, не является ли посылка опасной
    if package_code % 13 == 0:
        print(f"Обнаружена опасная посылка с кодом: {package_code}! Проверка остановлена.")
        # Немедленно выходим из цикла
        break

    # 3. Если посылка обычная, добавляем ее ценность к общей сумме
    total_value = total_value + package_code

# 4. Этот блок выполнится, только если цикл for завершился без break
else:
    print(f"Проверка завершена. Общая ценность посылок: {total_value}.")

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

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

AD

Реклама

red-snake blue-snake green-snake

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

Помощник ИИ

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