Если вы программист или учитесь программировать, вы наверняка сталкивались или столкнетесь с FizzBuzz Challenge.
Ниже мы расскажем об этой задаче и реализуем ее, используя python list comprehension!
Что такое FizzBuzz Challenge
Нас просят написать программу, которая выводит n чисел.
Если число кратно 3, напечатайте Fizz
Если число кратно 5, выведите Buzz
Если число кратно 3 и 5, выведите FuzzBuzz
Если число не кратно какому-либо, выведите это число.
Регулярная реализация FizzBuzz
Чтобы понять, как работает наше понимание списка, нам сначала нужно понять, как должна работать наша программа.
Самый простой способ реализовать это с помощью цикла for
и выражений if
.
Сначала нам нужно выполнить итерацию по количеству чисел.
На каждой итерации мы будем проверять наши условия с помощью оператора модуляции %
.
Мы можем использовать этот оператор в булевом виде, так как когда результат по модулю равен 0, он возвращает False
.
Мы можем инвертировать наш булев результат, используя not
, и таким образом, когда наше число кратно, оно вернет True
, Эта логика может быть реализована внутри нашего цикла for
следующим образом:
for i in range(1, 16):
if not (i%3 and not i%5):
print("FizzBuzz")
elif not (i%3):
print("Fizz")
elif not (i%5):
print("Buzz")
else:
print(i)
Нашим консольным ответом будет:
Поздравляем, вы прошли испытание FizzBuzz.
FizzBuzz с пониманием списков
Чтобы применить наше понимание списка, мы должны помнить, что использование оператора *
повторяет это количество раз.
Поэтому мы можем использовать x = "string "*(not i%5):
.
Когда результатом нашей оценки будет False, наша строка не будет отображаться.
Сначала мы оценим наши условия.
Пример:
вот так:
FizzBuzzList = ["Fizz"*(not i%3) + "Buzz"*(not i%5) or i ]
Пока что мы имеем логическую часть понимания нашего списка.
Для каждой итерации мы будем передавать нашу строку, в которой, если наше условие не выполняется, она не будет конкатенирована, а если условие не выполняется, то будет конкатенирован номер нашей итерации.
Теперь нам просто нужно добавить наш цикл for for i in range(1, 16)
, в range()
наш первый параметр является включающим, а второй – исключающим.
Таким образом, если нам нужны числа от 1 до 15, мы должны ввести параметры 1, 16
, 16.
Наш окончательный вариант List Comprehension будет выглядеть следующим образом:
FizzBuzz = ["Fizz"*(not i%3) + "Buzz"*(not i%5) or i for i in range(1, 16)]
Надеюсь, это было полезно!
Счастливого взлома!
Карло Монрой