20.3 3과 5의 공배수 처리하기

3의 배수와 5의 배수는 출력했지만 3과 5의 공배수를 출력하지는 못했습니다. 3과 5의 공배수는 어떻게 출력해야 할까요? 공배수는 다음과 같이 논리 연산자 and를 사용하면 됩니다.

fizzbuzz.py

for i in range(1, 101):              # 1부터 100까지 100번 반복
    if i % 3 == 0 and i % 5 == 0:    # 3과 5의 공배수일 때
        print('FizzBuzz')            # FizzBuzz 출력
    elif i % 3 == 0:                 # 3의 배수일 때
        print('Fizz')                # Fizz 출력
    elif i % 5 == 0:                 # 5의 배수일 때
        print('Buzz')                # Buzz 출력
    else:
        print(i)                     # 아무것도 해당되지 않을 때 숫자 출력

실행 결과

1
2
Fizz
... (생략)
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz

i % 3 == 0 and i % 5 == 0처럼 i를 3으로 나눴을 때 나머지가 0이면서 5로 나눴을 때도 나머지가 0이면 3과 5의 공배수입니다. 그러므로 이때는 print'FizzBuzz'를 출력해줍니다.

만약 i가 30인데 if에서 3의 배수를 먼저 검사하면 3과 5의 공배수는 검사를 하지 않고 그냥 넘어가버리므로 주의해야 합니다. 따라서 3과 5의 공배수를 먼저 검사한 뒤 elif로 3의 배수, 5의 배수를 검사해야 합니다.

if i % 3 == 0:                     # i가 30이면
    print('Fizz')                  # Fizz를 출력하고 그냥 넘어가버림
elif i % 5 == 0:
    print('Buzz')
elif i % 3 == 0 and i % 5 == 0:    # 3과 5의 공배수는 검사하지 못함
    print('FizzBuzz')
else:
    print(i)