Основы Python: практические задания с while

Раздел: Основы Python -> Основы Python: циклы

Задача: вычислить сумму чисел от 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

Условие выхода – близость квадрата текущего приближения к исходному числу.

Задачи с циклом while в Python - comments

En
задачи с циклом while python (python)