Задачи с циклами в 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() возвращает пары ключ-значение.