Короткий ответ
FizzBuzz — классическая задача, которой проверяют базовые навыки программирования: циклы, условия и работу с остатком от деления. Для каждого числа от 1 до n нужно вывести FizzBuzz, если оно делится и на 3, и на 5; Fizz, если только на 3; Buzz, если только на 5; иначе — само число в виде строки.
Как это работает подробнее
Решение строится на простом цикле с проверками делимости, а главное в нём — корректный порядок условий.
- Правила вывода. Для каждого числа i от 1 до n выбирается ровно один вариант ответа: FizzBuzz, Fizz, Buzz или само число строкой.
- Оператор остатка. Делимость проверяется через
%:i % 3 == 0истинно, когда число кратно трём, аналогично для пяти. - Порядок веток. Комбинированное условие «делится и на 3, и на 5» обязано идти первым, иначе число 15 попадёт в ветку Fizz.
- Вывод числа. В ветке else число преобразуется в строку через
str(i), чтобы результат был однородным списком.
Пример кода
Классическое решение FizzBuzz
def fizz_buzz(n):
result = []
for i in range(1, n + 1):
if i % 3 == 0 and i % 5 == 0:
result.append('FizzBuzz')
elif i % 3 == 0:
result.append('Fizz')
elif i % 5 == 0:
result.append('Buzz')
else:
result.append(str(i))
return result
print(fizz_buzz(10))Что использовать на практике
- Простой цикл. Аккуратного цикла с
elifдостаточно для собеседования — не усложняй решение без необходимости. - Первая проверка. Ставь комбинированное условие делимости на 3 и 5 в начало, чтобы числа вроде 15 не получали Fizz.
- Функция со списком. Возвращай список строк из функции — так решение легко проверить на разных значениях n.
- Проба на примерах. Проверь вывод для маленьких n и для числа, кратного 15, прежде чем показывать результат.
Подводные камни
- Порядок условий. Если сначала проверять только делимость на 3, число 15 получит Fizz вместо FizzBuzz.
- Тип результата. В ветке else число нужно превратить в строку через
str(i), иначе список будет смешанного типа. - Границы диапазона.
range(1, n + 1)покрывает числа от 1 до n включительно — ошибка на единицу здесь типична. - Лишние конструкции. Накопление строки или словарь условий допустимы, но на собеседовании важнее простота и ясность.
Как отвечать на собеседовании
- Объяснить постановку задачи и ожидаемый вывод → показать цикл с проверками через оператор
%→ подчеркнуть, почему условие на оба делителя стоит первым → прогнать пример вроде n = 10 и упомянуть альтернативные подходы.