Skip to content

Instantly share code, notes, and snippets.

@meredian
Last active June 17, 2022 10:51
Show Gist options
  • Save meredian/b60a689ae30d6609b3080dbf7ea9e7ab to your computer and use it in GitHub Desktop.
Save meredian/b60a689ae30d6609b3080dbf7ea9e7ab to your computer and use it in GitHub Desktop.
FizzBuzz in python

Задачка FizzBuzz

Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz»

Цитата: "Нормальный программист должен написать такую программу на бумажке за пару минут. Но вот что интересно: многие люди с профильным образованием вообще не могут справится с этой задачей. Были даже случаи, когда кандидаты, подававшие резюме на вакансию «Senior developer» тратили на эту программу больше 15 минут."

Подробнее про историю задачи и ее значимость можете прочитать по ссылке: https://habrahabr.ru/post/298134/

# Самое наивное решение, каждый случай - независимая ветка
for x in range(1, 101):
if x % 3 == 0 and x % 5 == 0:
print("FizzBuzz", end=' ')
elif x % 3 == 0:
print("Fizz", end=' ')
elif x % 5 == 0:
print("Buzz", end=' ')
else:
print(x, end=' ')
# Чуть более лаконичное решение - в нем столько же строк, сколько и в предыдущем
# но оно более изящно и содержит меньше повторов кода
for x in range(1, 101):
s = '';
if x % 3 == 0:
s += 'Fizz'
if x % 5 == 0:
s += "Buzz"
if s == '':
s = x
print(s, end=' ')
@DedSec256
Copy link

print(str(x) * bool(x % 3 & x % 5) + "fizz" * (not(x % 3)) + "buzz" * (not(x % 5)))

или

s = "fizz" * (not(x % 3)) + "buzz" * (not(x % 5))
print(str(x) * (not(s)) + s)

@jabooticaba
Copy link

Только в цикле range должен быть (1, 101)

@meredian
Copy link
Author

meredian commented Sep 7, 2021

@jabooticaba и то правда 🤷

@GeorgAmisare
Copy link

Enumerable.Range(1, 100).ToList().ForEach(_ =>
            {
                Console.WriteLine(_ % 3 != 0 && _ % 5 != 0
                    ? _.ToString()
                    : (_ % 3 == 0 ? "Fizz" : String.Empty)
                    + (_ % 5 == 0 ? "Buzz" : String.Empty));
            });

C#

Copy link

ghost commented Jun 17, 2022

Вот кое-что посовременнее на python 3.10:

for n in range(1, 101):
    match n % 3, n % 5:
        case 0, i if i > 0: print(f'{n} Fizz')
        case i, 0 if i > 0: print(f'{n} Buzz')
        case 0, 0: print(f'{n} FizzBuzz')
        case _: print(n)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment