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)