Python: логические головоломки для начинающих и продвинутых

Раздел: Python -> Учебные задачи

Логические задачи: пример FizzBuzz

Наиболее эффективное решение задачи FizzBuzz на Python использует цикл с проверкой остатка от деления. Ключевой момент - проверка деления на 15 (общее кратное 3 и 5) первой, чтобы числа типа 30 выводили "FizzBuzz", а не "Fizz".

for i in range(1, 101):
    if i % 15 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)

алгоритм решения задачи python (алгоритм решения задачи на python)

Этот код прост и понятен. Ошибки возникают при изменении порядка условий: если сначала проверять i % 3 == 0, то число 15 выведет "Fizz".

Как использовать тернарный оператор для компактной записи FizzBuzz?

for i in range(1, 101):
    print("FizzBuzz" if i % 15 == 0 else "Fizz" if i % 3 == 0 else "Buzz" if i % 5 == 0 else i)

базовые задачи python (базовые задачи python)

Проблема: вложенные тернарные операторы ухудшают читаемость. Частая ошибка - неверный порядок веток, при котором условие на 3 может перехватить числа, кратные 15. Решение: всегда ставить самое специфическое условие (на 15) первым.

Как породить список результатов через списковое включение?

result = ["FizzBuzz" if i % 15 == 0 else "Fizz" if i % 3 == 0 else "Buzz" if i % 5 == 0 else str(i) for i in range(1, 101)]
print("\n".join(result))

задачи для обучения python (задачи для обучения python)

Типичная ошибка: забыть преобразовать число в строку (str(i)), что вызывает TypeError при вызове join. Решение: всегда явно приводить к строке, если в списке есть строки.

Как применить словарь для отображения комбинаций делителей?

rules = {(1,0): "Fizz", (0,1): "Buzz", (1,1): "FizzBuzz"}
for i in range(1, 101):
    key = (i % 3 == 0, i % 5 == 0)
    print(rules.get(key, i))

Ошибка: ключ должен быть кортежем из булевых значений, но не путать с числами (True/False против 1/0). Решение: использовать bool или числа 0/1, но будьте последовательны. Если ключа нет, get вернёт i, что корректно для остальных чисел.

- задачи на модули python (задачи на модули в python)
- задачи на операторы в python (задачи на операторы в python)
- задачи на последовательности python (задачи на последовательности в python)

Дополнительные примеры логических задач

Проверка строки на палиндром

Задача: определить, является ли строка палиндромом, игнорируя пробелы, знаки препинания и регистр.

Пример
def is_palindrome(s):
    cleaned = ''.join(c.lower() for c in s if c.isalnum())
    return cleaned == cleaned[::-1]
print(is_palindrome("A man, a plan, a canal: Panama"))
True

Пояснение: избавляемся от лишних символов через isalnum() и приводим к нижнему регистру. Результат равен обратной строке.

Поиск простых чисел с помощью решета Эратосфена

Задача: найти все простые числа до заданного n.

Пример
def sieve(n):
    primes = [True] * (n+1)
    primes[0] = primes[1] = False
    for i in range(2, int(n**0.5)+1):
        if primes[i]:
            for j in range(i*i, n+1, i):
                primes[j] = False
    return [i for i, is_p in enumerate(primes) if is_p]
print(sieve(30))
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

Пояснение: алгоритм помечает составные числа, начиная с квадрата простого. Сложность O(n log log n).

Определение анаграмм

Задача: проверить, являются ли две строки анаграммами (игнорируя пробелы и регистр).

Пример
from collections import Counter
def are_anagrams(s1, s2):
    return Counter(s1.replace(" ", "").lower()) == Counter(s2.replace(" ", "").lower())
print(are_anagrams("Listen", "Silent"))
True

Используется Counter для подсчета символов. Ошибка: не учитывать пробелы - они искажают сравнение.

Задача Two Sum

Задача: найти индексы двух чисел в списке, сумма которых равна заданному числу.

Пример
def two_sum(nums, target):
    seen = {}
    for i, num in enumerate(nums):
        complement = target - num
        if complement in seen:
            return [seen[complement], i]
        seen[num] = i
    return []
print(two_sum([2,7,11,15], 9))
[0, 1]

Пояснение: используем словарь для хранения пройденных чисел. Ошибка: если забыть вернуть список, можно вернуть None. Решение: всегда возвращать список, даже пустой.

Логические задачи на Python - comments

En
логические задачи python (python)