Основы Python: практические задания с while
Задача: вычислить сумму чисел от 1 до N
Цикл while позволяет повторять действия, пока условие истинно. Рассмотрим классическую задачу: найти сумму всех целых чисел от 1 до N.
N = 10
summa = 0
i = 1
while i <= N:
summa += i
i += 1
print(summa)задача python циклы цикл со счетчиком for (задача на цикл for в python)
55
задачи с циклом while python (задачи с циклом while в python)
Пояснение: Переменная i инициализируется единицей. На каждой итерации к summa прибавляется текущее i, затем i увеличивается. Когда i становится больше N, цикл завершается.
Цель: показать базовый механизм счетчика.
Как вычислить факториал числа с помощью while?
Факториал n! = 1 * 2 * ... * n. Используем цикл while.
n = 5
fact = 1
i = 1
while i <= n:
fact *= i
i += 1
print(fact)
120
Типичная ошибка: забыть увеличить счетчик i, что приведет к бесконечному циклу. Также важно начать fact с 1, а не с 0.
Как вывести первые N чисел Фибоначчи?
Каждое следующее число равно сумме двух предыдущих: 0, 1, 1, 2, 3, 5...
N = 7
a, b = 0, 1
count = 0
while count < N:
print(a, end=' ')
a, b = b, a + b
count += 1
0 1 1 2 3 5 8
Ошибка: при многократном присваивании a, b = b, a+b используется одновременное обновление. Если записать последовательно, результат будет неверным.
Как определить, является ли число простым, используя while?
Проверим делители от 2 до sqrt(n).
num = 29
if num < 2:
print("Не простое")
else:
i = 2
is_prime = True
while i * i <= num:
if num % i == 0:
is_prime = False
break
i += 1
if is_prime:
print("Простое")
else:
print("Составное")
Простое
Важно обработать числа меньше 2. Использование break для досрочного выхода.
Как организовать обратный отсчет от N до 1?
N = 5
while N > 0:
print(N)
N -= 1
print("Старт!")
5 4 3 2 1 Старт!
Как выполнять действия до тех пор, пока пользователь не введет 'exit'?
while True:
cmd = input("Введите команду: ")
if cmd == 'exit':
break
print("Вы ввели:", cmd)
Цель: обработка ввода в интерактивном режиме.
Осторожно: бесконечный цикл без break приведет к зависанию.
Как найти НОК двух чисел с помощью while?
Используем формулу НОК = a*b / НОД. НОД можно найти через алгоритм Евклида.
a, b = 12, 18
x, y = a, b
while y:
x, y = y, x % y
gcd = x
lcm = a * b // gcd
print(lcm)
36
Как проверить, является ли строка палиндромом, используя while?
s = "radar"
left, right = 0, len(s)-1
is_pal = True
while left < right:
if s[left] != s[right]:
is_pal = False
break
left += 1
right -= 1
print(is_pal)
True
Общие проблемы с while: бесконечный цикл (забыли изменить условие), неправильное начальное значение счетчика, неверное условие остановки, изменение переменной цикла внутри тела, приводящее к неожиданным результатам.
Расширенные примеры с циклом while
Последовательность Коллатца (гипотеза 3n+1)
Последовательность строится по правилу: если число чётное, делим на 2, иначе умножаем на 3 и прибавляем 1. Цикл while продолжается, пока число не станет равным 1.
def collatz(n):
sequence = [n]
while n != 1:
if n % 2 == 0:
n //= 2
else:
n = 3 * n + 1
sequence.append(n)
return sequence
print(collatz(12))
[12, 6, 3, 10, 5, 16, 8, 4, 2, 1]
Пояснение: На каждом шаге проверяется чётность. Цикл гарантированно завершается (по гипотезе). Результат - список всех чисел последовательности.
Игра «Угадай число» с подсказками
Компьютер загадывает случайное число от 1 до 100. Пользователь вводит свои варианты, программа сообщает «Больше» или «Меньше». Цикл завершается при правильном ответе.
import random
secret = random.randint(1, 100)
guess = None
attempts = 0
while guess != secret:
guess = int(input("Ваше число: "))
attempts += 1
if guess < secret:
print("Больше")
elif guess > secret:
print("Меньше")
print("Угадано за", attempts, "попыток")
Ваше число: 50 Больше Ваше число: 75 Меньше Ваше число: 63 Больше Ваше число: 69 Угадано за 4 попытки
Цель: демонстрация цикла с проверкой условия на каждой итерации и вводом данных.
Вычисление числа π с точностью до 1e-6 (ряд Лейбница)
Ряд π/4 = 1 - 1/3 + 1/5 - 1/7 + ... суммируется, пока очередной член не станет меньше заданной точности.
pi_approx = 0.0
sign = 1
denom = 1
term = 1.0
while term > 1e-6:
pi_approx += term
sign = -sign
denom += 2
term = sign / denom
pi_approx *= 4
print(pi_approx)
3.141590653589692
Пояснение: Переменная term обновляется в конце тела цикла, условие проверяется перед следующей итерацией. После выхода из цикла полученное приближение умножается на 4.
Обработка строки: удаление всех символов, кроме букв и пробелов
Цикл while проходит по строке по индексу, проверяя каждый символ. Результат – строка без цифр и знаков препинания.
s = "Hello, world! How are you? 123"
i = 0
result = ""
while i < len(s):
if s[i].isalpha() or s[i] == ' ':
result += s[i]
i += 1
print(result)
Hello world How are you
Этот подход удобен, когда нужно модифицировать строку на месте (имитация изменения через индексы).
Симуляция банкомата: выдача купюр с ограничением
Пользователь запрашивает сумму, банкомат выдает купюры по 5000, 1000, 500, 100, пока сумма не будет исчерпана или не кончатся купюры.
amount = 14300
available = {5000: 2, 1000: 5, 500: 10, 100: 20}
given = {}
remaining = amount
for denom in [5000, 1000, 500, 100]:
while remaining >= denom and available[denom] > 0:
given[denom] = given.get(denom, 0) + 1
available[denom] -= 1
remaining -= denom
print("Выдано:", given)
print("Остаток:", remaining)
Выдано: {5000: 2, 1000: 4, 500: 1, 100: 4}
Остаток: 0
Здесь вложенный цикл while повторяется, пока можно выдать купюру данного номинала.
Метод Ньютона для нахождения квадратного корня
Итерационный процесс: x_{n+1} = 0.5 * (x_n + a / x_n). Цикл продолжается до достижения заданной точности.
a = 25
x = a
tol = 1e-10
while abs(x * x - a) > tol:
x = 0.5 * (x + a / x)
print(x)
5.0
Условие выхода – близость квадрата текущего приближения к исходному числу.