본문 바로가기

Python

[Python] flag OR for-else

이 글은 프로그래머스의 파이썬을 파이썬답게 강의를 수강하고 작성하는 글입니다.

 

자연수 5개를 받은 뒤 숫자를 차례로 곱해 나온 수가 제곱수가 되면 found를 출력하고

모든 수를 곱해도 제곱수가 나오지 않았따면 not found를 출력하는 코드이다.

(곱해 나온 수의 제곱근이 정수이면 제곱수이다.)

import math

numbers = [int(input()) for _ in range(5)]
multiplied = 1
flag = True
for number in numbers:
    multiplied *= number
    if math.sqrt(multiplied) == int(math.sqrt(multiplied)):
        flag = False
        print('found')
        break

if flag:
    print('not found')
 

 

위 코드를 for-else문을 사용하면 더 짧게 나타낼 수 있고, 의미를 알아보기도 쉽다.

import math

numbers = [int(input()) for _ in range(5)]
multiplied = 1
for number in numbers:
    multiplied *= number
    if math.sqrt(multiplied) == int(math.sqrt(multiplied)):
        print('found')
        break
else:
    print('not found')
 

for ~ else문은 "for문에서 break가 발생하지 않았을 경우의 동작"을 else문에 적어주는 것이다.

for문 안에서 break가 발생했다면 10~11번째 줄의 else문은 실행되지 않는다.

 

참고: itholic.github.io/python-for-else/