Задачи с циклами в Python: примеры и реализация

Раздел: Практика -> Решение задач

Задачи на циклы в Python

Как вычислить сумму всех чисел от 1 до N?

Основной способ: цикл for с функцией range. Код:

N = 10
total = 0
for i in range(1, N+1):
    total += i
print(total)

задачи с решениями с циклами python (задачи на циклы с решениями в python)

Пояснение: переменная total инициализируется нулём, затем на каждой итерации к ней прибавляется очередное число. Диапазон range(1, N+1) включает все числа от 1 до N. Результат: 55.

Вариант с циклом while:

N = 10
total = 0
i = 1
while i <= N:
    total += i
    i += 1
print(total)

задача примеры python (примеры задач по python с решениями)

Подходит, когда шаг или условие выхода меняются динамически. Необходимо вручную увеличивать счётчик.

Вариант с использованием списков и функции sum (но это не цикл, хотя внутри может быть цикл):

N = 10
total = sum(range(1, N+1))
print(total)

Это более краткий способ, но для обучения циклам не подходит.

Типичные ошибки:

  • Забыть инициализировать total (будет NameError).
  • Использовать range(N) вместо range(1,N+1) - тогда суммируются числа от 0 до N-1.
  • В цикле while забыть увеличивать i (бесконечный цикл).

Как вычислить факториал числа N с помощью цикла?

Факториал N! = 1*2*...*N. Основное решение - цикл for:

N = 5
fact = 1
for i in range(1, N+1):
    fact *= i
print(fact)

Для N=0 факториал равен 1, что обрабатывается автоматически, так как range будет пустым и fact останется 1.

Вариант с while:

N = 5
fact = 1
i = 1
while i <= N:
    fact *= i
    i += 1
print(fact)

Вариант с проверкой отрицательных чисел:

N = -3
if N < 0:
    print('Факториал не определён')
else:
    fact = 1
    for i in range(1, N+1):
        fact *= i
    print(fact)

Это добавляет обработку исключительной ситуации.

Частые проблемы:

  • Начальное значение fact = 0 - тогда произведение всегда 0.
  • Не учтён случай N=0 (должен быть 1). Цикл for с range(1,1) не выполняется, fact=1, поэтому решение корректно.

Как проверить, является ли число N простым?

Простое число делится только на 1 и на себя. Оптимальный цикл: перебор делителей от 2 до sqrt(N). Пример:

import math
N = 17
if N < 2:
    print('Не простое')
else:
    is_prime = True
    for i in range(2, int(math.sqrt(N)) + 1):
        if N % i == 0:
            is_prime = False
            break
    print('Простое' if is_prime else 'Составное')

Используется break для досрочного выхода при нахождении делителя.

Вариант с полным перебором от 2 до N-1 - менее эффективен:

N = 17
is_prime = True
for i in range(2, N):
    if N % i == 0:
        is_prime = False
        break
print('Простое' if is_prime else 'Составное')

Для больших N такой подход будет медленным.

Вариант с while:

N = 17
if N < 2:
    print('Не простое')
else:
    i = 2
    is_prime = True
    while i * i <= N:
        if N % i == 0:
            is_prime = False
            break
        i += 1
    print(is_prime)

Условие i*i <= N эквивалентно sqrt(N).

Ошибки новичков:

  • Проверка до N, а не до sqrt(N) - тратится время.
  • Не обработан случай N=2 (is_prime должен быть True, цикл не выполняется).
  • Условие i <= N**0.5 без int может привести к ошибкам при сравнении с float.

Как вывести таблицу умножения размером 10x10?

Вложенные циклы for:

for i in range(1, 11):
    for j in range(1, 11):
        print(f'{i*j:4}', end='')
    print()

Внешний цикл отвечает за строки (множитель i), внутренний - за столбцы (множитель j). Форматирование :4 выравнивает числа по ширине.

Вариант с использованием списков и join:

for i in range(1, 11):
    row = [str(i * j).rjust(4) for j in range(1, 11)]
    print(''.join(row))

Вариант с while для обоих циклов:

i = 1
while i <= 10:
    j = 1
    while j <= 10:
        print(f'{i*j:4}', end='')
        j += 1
    print()
    i += 1

Менее наглядный, но возможный.

Распространённые недочёты:

  • Забыть сбросить end или не добавить print() после внутреннего цикла - всё будет в одной строке.
  • Перепутать порядок циклов - получится транспонированная таблица.

Расширенные примеры использования циклов

Обход списка с индексами через enumerate

Пример
fruits = ['яблоко', 'банан', 'вишня']
for idx, fruit in enumerate(fruits, start=1):
    print(f'{idx}. {fruit}')
1. яблоко
2. банан
3. вишня

Пояснение: enumerate возвращает кортеж (индекс, элемент). start=1 задаёт начальное значение.

Ввод числа с проверкой с помощью while

Пример
while True:
    user_input = input('Введите положительное целое число: ')
    if user_input.isdigit() and int(user_input) > 0:
        number = int(user_input)
        break
    else:
        print('Некорректный ввод, попробуйте снова.')
print(f'Вы ввели: {number}')
Введите положительное целое число: -5
Некорректный ввод, попробуйте снова.
Введите положительное целое число: abc
Некорректный ввод, попробуйте снова.
Введите положительное целое число: 42
Вы ввели: 42

Пояснение: бесконечный цикл с break при успехе.

Выход из вложенных циклов с помощью флага

Пример
found = False
for i in range(5):
    for j in range(5):
        if i == 2 and j == 3:
            found = True
            break
    if found:
        break
print(f'i={i}, j={j}')
i=2, j=3

Пояснение: без флага break выйдет только из внутреннего цикла.

Цикл по словарю

Пример
capitals = {'Россия': 'Москва', 'Франция': 'Париж', 'Германия': 'Берлин'}
for country, city in capitals.items():
    print(f'Столица {country} - {city}')
Столица Россия - Москва
Столица Франция - Париж
Столица Германия - Берлин

Пояснение: .items() возвращает пары ключ-значение.

Задачи на циклы с решениями в Python - comments

En
задачи с решениями с циклами python (python)