FizzBuzz Kata¶
Write a Python function that given a positive integer number, returns a string “Fizz” if the number is multiply of three, “Buzz” if the number is multiply of five, “FizzBuzz” if the number is multiple of three and five, the number otherwise.
Tests
1import pytest
2from fizbuzz import fizbuzz3 as fizbuzz
3
4
5@pytest.mark.parametrize("num", (1, 2))
6def test_should_return_n_if_number_is_not_divisible_by_3_and_5(num):
7 assert str(num) == fizbuzz(num)
8
9
10@pytest.mark.parametrize("num", (3, 6))
11def test_should_return_Fizz_if_number_is_divisible_by_3(num):
12 assert "Fizz" == fizbuzz(num)
13
14@pytest.mark.parametrize("num", (5, 10))
15def test_should_return_Buzz_if_number_is_divisible_by_5(num):
16 assert "Buzz" == fizbuzz(num)
17
18@pytest.mark.parametrize("num", (15, 30))
19def test_should_return_FizzBuzz_if_number_is_divisible_by_3_and_by_5(num):
20 assert "FizzBuzz" == fizbuzz(num)
Solution 1
1def fizbuzz1(n):
2 if n % 3 == 0 and n % 5 == 0:
3 return "FizzBuzz"
4 if n % 3 == 0:
5 return "Fizz"
6 if n % 5 == 0:
7 return "Buzz"
8 return str(n)
Solution 2
1def fizbuzz2(n):
2 divisors = ( (15, "FizzBuzz"), (3, "Fizz"), (5, "Buzz") )
3 for divisor, result in divisors:
4 if n % divisor == 0:
5 return result
6 return str(n)
Solution 3
1from functools import reduce
2
3def fizbuzz3(n):
4 divisors = ( (3, "Fizz"), (5, "Buzz") )
5 result = ""
6 for divisor, word in divisors:
7 if n % divisor == 0:
8 result = result + word
9 if result == "":
10 result = str(n)
11 return result
Solution 4
1def fizbuzz4(n):
2 divisors = ( (3, "Fizz"), (5, "Buzz") )
3 result = "".join(word for divisor, word in divisors if n % divisor == 0)
4 return result or str(n)