FizzBuzz — это классическая задача на программирование, которая часто используется на собеседованиях для проверки базовых навыков кодирования. Несмотря на кажущуюся простоту, она помогает оценить:
Понимание условных операторов
Умение работать с циклами
Внимание к деталям (краевым случаям)
Формулировка задачи:
Напишите программу, которая выводит числа от 1 до N, но:
Если число делится на 3 → выводится "Fizz"
Если делится на 5 → "Buzz"
Если делится и на 3, и на 5 → "FizzBuzz"
Иначе выводится само число
Базовые реализации
Классическое решение (if-else)
def fizzbuzz(n):
for i in range(1, n+1):
if i % 15 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
Особенности:
Проверка делимости на 15 идет первой (чтобы избежать ложных срабатываний)
Порядок условий важен!
Решение с конкатенацией (без проверки %15)
def fizzbuzz(n):
for i in range(1, n+1):
output = ""
if i % 3 == 0:
output += "Fizz"
if i % 5 == 0:
output += "Buzz"
print(output or i)
Преимущества:
Более гибкое (легко добавить новые условия, например "Jazz" для 7)
Нет дублирования кода
Неочевидные оптимизации
Избегание операции % (для ограниченных N)
def fizzbuzz(n):
c3, c5 = 0, 0
for i in range(1, n+1):
c3 += 1
c5 += 1
output = ""
if c3 == 3:
output += "Fizz"
c3 = 0
if c5 == 5:
output += "Buzz"
c5 = 0
print(output or i)
Плюсы:
Замена дорогой операции % на инкремент и сравнение
Минусы:Менее читаемо
Решение с match-case (Python 3.10+)
def fizzbuzz(n):
for i in range(1, n+1):
match (i % 3, i % 5):
case (0, 0): print("FizzBuzz")
case (0, _): print("Fizz")
case (_, 0): print("Buzz")
case _: print(i)
Почему FizzBuzz — важный тест?
Фильтр базовых навыков
Выявляет проблемы:
Незнание оператора %
Неправильный порядок условий
Ошибки в граничных значениях (1 и N)
Расширяемость задачи
Добавление новых условий ("Jazz" для 7)
Генерация последовательности без if
Продвинутые вариации
FizzBuzz без условных операторов
def fizzbuzz(n):
for i in range(1, n+1):
print(["FizzBuzz", "Fizz", "Buzz", str(i)]
[(i % 3 != 0 and i % 5 != 0) + 2*(i % 5 == 0)])
Однострочник (Python)
print('\n'.join("Fizz"*(i%3==0)+"Buzz"*(i%5==0) or str(i) for i in range(1,101)))