지난 시간에는 변수와 함수의 실행 순서, return과 print의 차이, scope, 상수, 스타일과 같은 Python의 깔끔한 코드 작성에 도움을 주는 추상화를 배웠습니다. 이번 시간에는 Python 기초 마지막, 제어문에 대해 배워보겠습니다.

🤖 While 반복문 정의

지금까지 배운 프로그래밍은 대부분 간단한 연산만 수행했습니다. 이제부터 배울 반복문을 통해 여러분들은 왜 프로그래밍이 막강한 힘을 가지는 지 알게 될 것입니다.

while 반복문무언가를 반복하기 위해 사용합니다. 반복은 프로그래밍에서 중요한 역할을 하는데요. 복잡한 계산을 할 때 컴퓨터를 활용하는 것처럼 반복 작업 또한 컴퓨터에게 맡기곤 합니다. 지루한 과정을 싫어하는 사람과 달리 컴퓨터는 반복 작업에 매우 능하기 때문입니다.

프로그래밍으로 반성문을 썼다고 가정해 봅시다. "반성합니다."라는 문구를 10번 출력하고자 한다면 print()문을 10번 작성하면 됩니다. 그런데 똑같은 걸 10번이나 쓰려니 좀 번거롭게 느껴집니다. 이때 필요한 것이 반복문입니다.

반복문의 구조를 살펴볼까요?

while 조건 부분:
    수행 부분

while 반복문에는 조건 부분과 수행 부분이 있습니다. 수행 부분에는 반복적으로 실행하고 싶은 명령어들이 들어갑니다. 앞선 예시로 보면 print()문이 들어가야겠죠? 조건 부분에는 이 명령을 실행하기 위한 조건이 들어갑니다. 예시를 한 번 볼까요?

while 반성문 문구가 10개 이하다.
    반성문을 출력한다.

예시에서 반복해야 하는 작업은 반성문을 출력하는 것인데요. 문제는 이 작업을 얼마나 반복하냐 입니다. 따라서, 종료 조건이 필요하죠. 그리고 이 종료 조건이 바로 조건 부분에 들어가게 됩니다. 즉, 반성문이 10개 이하일 때는 반성문을 계속 출력하다가 10개를 초과하면 반복을 종료하는 것이죠.

while문의 실행 매커니즘은 조건 부분의 조건을 충족했는지 확인하고 충족한다면 실행 부분으로 내려가 명령을 수행한 다음 다시 조건 부분으로 돌아와서 조건 충족 여부를 확인하고 충족 시 명령을 수행하는 과정을 계속해서 반복합니다. 그러다 조건이 충족되지 않는 경우가 오면 명령을 종료합니다.

🤖 While 반복문 문법

이제 실전 Python 코드로 while 반복문을 만나봅시다.

코드를 보기에 앞서 while문의 구조를 다시 한 번 봅시다. while의 조건 부분에는 불린 값으로 계산되는 식이 들어갑니다. 불린 값은 True와 False, 이 두 가지가 있었죠? 따라서, 불린 값이 나오기 위해서는 조건 형태의 명제들이 필요합니다.

수행 부분에는 반복적으로 실행하고 싶은 명령이 들어갑니다. print()문으로 어떤 값을 출력하거나 특정 변수의 값을 수정할 수 있습니다.

정리하자면 조건 부분이 True일 동안만 수행 부분이 실행되고 수행 부분이 끝나면 다시 조건 부분으로 돌아갑니다. 이때, 조건 부분 끝에는 꼭 :(콜론)을 넣어줘야 하고 수행 부분이 들어가는 맨 앞 줄에는 반드시 4칸 들여쓰기를 해줘야 합니다. 조건 부분이 False가 되는 순간 while문은 종료됩니다.

앞서 예시로 활용했던 반성문에 대한 코드를 작성해보겠습니다.

while 조건 부분
    print("반성합니다.")

우선 수행 부분에 반복 작업을 할 명령어를 적어줍니다. 그 다음 조건 부분에 대해 생각해봐야 하는데 우리는 10개의 반성 문구가 필요합니다. 이 조건을 설정하기 위해 다음과 같은 과정이 필요합니다.

i = 1
while i <= 10:
    print("반성합니다.")
    i += 1

제일 먼저 i라는 변수를 선언해 줍니다. 이 변수가 필요한 이유는 반복 횟수를 지정하기 위함입니다. 그 다음 수행 부분의 명령어 아래 i를 1씩 더하는 식을 적어줍니다. 이 식은 조건이 반복될 때마다 횟수를 늘려주는 역할을 합니다.

참고로 += 표기는 지난 시간에 배운 Synatic Sugar입니다. 익숙하지 않은 분들을 위해 알려드리자면 이 표기의 원래 식은 'i = i + 1'입니다.

그 다음, 조건문에는 True의 값이 10개가 필요하므로 횟수 i가 10이하라는 조건으로 표현되어야 합니다. 10이 될 때까지는 출력을 하다가 11이 되는 순간 종료를 해야하기 때문이죠.

지난 시간에 했던 것처럼 한 줄씩 실행해 봅시다. 먼저 변수 i에 1이 지정됩니다. 그 다음에 조건 부분을 확인합니다. 지금 i는 1이니 'i <= 10'이라는 조건에 불린값 True가 나옵니다. 따라서, 조건을 충족하므로 수행 부분의 print()가 실행되어 콘솔 창에 "반성합니다." 문구를 하나 출력합니다. 그리고 그 다음 식에서 i에 1을 더하여 2가 됩니다.

이후로는 다시 조건 부분으로 돌아와서 i가 2인 상태로 조건 부분에 들어가고 수행 부분을 실행합니다. 이 과정이 계속 반복됩니다. 그러다 i가 11이 되어 조건식에서 False 값이 나오면 while문은 종료됩니다.

이렇게 반복문을 사용하면 지루한 반복 작업을 컴퓨터에게 대신 맡길 수 있습니다! 🥳🥳🥳

🤖 if문 정의

while문의 조건 부분에서 우리는 조건에 관한 식을 세워봤습니다. while문의 조건 부분은 반복의 종료 시점을 나타내는 지표로 활용되었는데요. 그렇다면 Python에서 일반적인 조건문은 어떻게 구현할 수 있을까요?

Python에서는 상황별로 다른 동작을 하기 위해서 if문과 else문을 사용합니다. if와 else는 각각 '만약'과 '그렇지 않다면'을 뜻합니다.

if문의 구조는 while문의 구조와 거의 비슷합니다. if문 또한 조건 부분과 수행 부분으로 이루어졌기 때문이죠.

if 조건 부분:
    수행 부분

조건 부분을 만족할 경우 수행 부분에 있는 명령들이 실행되는 것도 동일합니다.

이번에는 음악 파일을 다운로드 하는 상황을 예시로 들어봅시다. 음악 파일에는 wmv, mp3, wma, ogg 등이 있습니다. 우리는 mp3 파일만을 다운로드 하고 싶습니다. 이처럼 특정 조건을 충족하는 경우만 실행시키고 싶을 때, 조건문 if가 활용됩니다.

while 다운로드 안 받은 음악 파일이 있다:
    다음 음악 파일을 본다
    if 음악 파일이 mp3 파일이다:
        음악 파일을 다운로드 받는다

while문을 통해 전체 음악 파일 중 다운로드 받지 않은 음악 파일을 하나씩 찾아 다운로드 받게 하는 코드를 작성합니다. 그 다음 if문을 활용하여 그 중에서도 mp3 파일인 것만 골라서 다운로드 받도록 하는 코드를 작성합니다.

추가로 음악 파일의 확장자가 mp3가 아니면 문구를 출력하게 하기 위해 else문을 활용해보겠습니다.

while 다운로드 안 받은 음악 파일이 있다:
    다음 음악 파일을 본다
    if 음악 파일이 mp3 파일이다:
        음악 파일을 다운로드 받는다
    else:
        print("mp3가 아닙니다!")

이렇게 하면 음악 파일의 확장자가 mp3면 다운로드를 하고 mp3가 아니면 'mp3가 아닙니다!'라는 문구를 출력하게 됩니다. 이 논리를 가지고 실제 python 코드를 작성해봅시다.

참고로 if 조건 외 나머지 상황에 대해 아무런 명령도 내리고 싶지 않다면 else문을 생략해주시면 됩니다.

🤖 if문 문법

다시 한 번, if문의 구조를 봅시다. while문과 마찬가지로 if의 조건 부붑에도 불린 값으로 계산되는 식 즉, 명제들이 들어가고 수행 부분에는 조건을 충족했을 때, 실행하고 싶은 명령이 들어갑니다. 콜론과 들여쓰기도 잊지 말아주세요!

while문과의 차이는 반복하는 것 없이 조건을 만족하는 단 하나의 경우에만 실행을 한다는 점입니다.

온도가 20도 이상이면 '샤워를 한다'라는 문구가 출력되도록 코드를 작성해보겠습니다.

temperature = 21

if temperature >= 20:
    print("에어컨을 켠다.")

우선 온도를 나타내는 temperature라는 변수를 선언하고 아무 값이나 넣어 봅시다. 그 다음 if문의 조건문에 조건에 맞는 식 'temperature >= 20'을 넣어줍니다. 21은 20보다 큰 수이므로 조건 부분에 True값이 나와 '에어컨을 켠다.'는 문구를 출력합니다.

이번에는 변수에 15라는 수를 넣어봅시다. 15는 20보다 작은 수이기 때문에 조건 부분에 False값이 나오고 조건을 충족하지 못하므로 콘솔창에 아무 값도 출력되지 않습니다.

이번에는 온도가 20 미만인 경우에 '선풍기를 켠다'라는 문구가 출력될 수 있도록 else문을 추가해 보겠습니다.

temperature = 15

if temperature >= 20:
    print("에어컨을 켠다.")
else:
    print("선풍기를 켠다.")

이렇게 하면 if문의 조건 부분에 False 값이 나오더라도 else문에 따라 '선풍기를 켠다'라는 문구가 콘솔 창에 출력됩니다.

이처럼 단순히 조건만 묻고 싶은 상황에는 if문을 사용하면 됩니다.

🤖 elif문

if문과 else문을 쓰면 두 가지 상황을 가정할 수 있습니다. if문이 True면 if문의 수행 부분을, if문이 False면 else의 수행 부분을 실행하면 되는 것이죠.

하지만 세상에는 두 가지보다 더 많은 옵션이 존재합니다. 점수에 따라 성적이 A, B, C, D, F 다섯 가지로 나뉘는 것처럼 말이죠. 이와 같은 상황을 어떻게 Python으로 구현할 수 있을까요? 일단 if문과 else만으로도 구현이 가능합니다.

if 온도가 20도 이상이다:
    에어컨을 켠다
else:
    if 온도가 10도 이상이다"
        창문을 연다
    else:
        창문을 닫는다

예를 들어 온도가 21도면 20도 이상이기 때문에 에어켠을 켭니다. 그런데 온도가 15도이면 20도 이상이 아니므로 else의 수행 부분으로 들어가는데요. else 안에 또 다시 if문과 else가 있습니다. 온도가 15도이면 10도 이상이기 때문에 창문을 열게 되죠.

지금은 가능한 경우가 세 가지로 늘었습니다. 두 가지보다는 많지만 여전히 세상의 다양한 옵션을 설명하기에는 부족해보입니다. 앞서 말했던 성적을 받는 상황처럼 말이죠. 그래도 한 번 구현해볼까요?

if 점수가 90점 이상이다:
    A를 받는다
else:
    if 점수가 80점 이상이다:
        B를 받는다
    else:
        if 점수가 70점 이상이다:
            C를 받는다
        else:
            if 점수가 60점 이상이다:
                D를 받는다
            else:
                F를 받는다

이렇게 작성은 가능합니다. 하지만 반복되는 부분이 많아 한 눈에 들어오지 않고 들여쓰기가 많아 보기에도 불편합니다. 좋은 코드는 아닌 거죠. 거기다 경우가 더 늘어나면 점점 지저분해질 겁니다. 이 문제를 어떻게 해결해야 할까요?

코드를 유심히 살펴보면 반복되는 부분이 있습니다. else의 수행 부분에 바로 if문을 쓰고 있는 것이죠. 이런 상황에서 사용되는 것이 바로 elif입니다. else와 if문이 반복된 구간을 elif로 대체해봅시다.

if 점수가 90점 이상이다:
    A를 받는다
elif 점수가 80점 이상이다:
    B를 받는다
elif 점수가 70점 이상이다:
    C를 받는다
elif 점수가 60점 이상이다:
    D를 받는다
else:
    F를 받는다

훨씬 깔끔해졌죠?

이제 예시를 들어봅시다. 만약 점수가 95점인 학생이 있으면 if문의 조건을 충족하므로 A를 받게 되고 나머지 조건들은 싹 무시됩니다.

만약 점수가 63점이면 어떻게 될까요? if문의 조건문에서 False가 나와 elif문으로 넘어가고 여기서도 False가 나옵니다. 조건을 충족할 때까지 하나씩 내려가다가 점수가 60점 이상인 구간인 세 번째 elif문에서 True가 나와 D를 받게 됩니다.

마지막으로 점수가 27점이면 어떻게 되는지 봅시다. if를 거쳐 모든 elif에서 False가 나와 else의 수행 부분을 실행합니다. 그럼 F를 받게 되겠죠?

보시다시피 5개의 수행 부분이 있음에도 실제로 실행될 수 있는 곳은 단 하나입니다. 이것이 elif문의 핵심입니다.

🤖 제어문 꿀팁

❗ break문

while문의 조건 부분과 상관없이 반복문에서 나오고 싶으면, break문을 쓰면 됩니다.

i = 200

while True:
	# i가 25의 배수면 반복문을 끝냄
    if i % 25 == 0;
    	break
    i += 1
    
print(i)
200

❗ continue문

현재 진행되고 있는 수행 부분을 중단하고 바로 조건 부분을 확인하고 싶으면 continue문을 사용하면 됩니다.

i = 0

while i < 10:
    i += 1
    
    # i가 짝수면 print(i) 안 하고 바로 조건 부분으로 돌아감
    if i % 2 == 0
    	continue
    print(i)
1
3
5
7
9
11
13

지금까지 프로그래밍의 유능함을 보여주는 반복문 while문과 조건에 맞는 값을 산출하는 if문, 다양한 옵션을 설정 가능한 elif와 제어문에 활용할 수 있는 꿀팁까지 Python의 제어문에 대해 함께 배워봤습니다.

정말 많이 사용되는 명령문들인 만큼 관련된 구문을 정확히 익히고 이와 관련된 문제들을 열심히 풀어보는 것이 중요합니다.

* 이 자료는 CODEIT의 프로그래밍 기초 in Python 강의를 기반으로 작성되었습니다.
profile
There's Only One Thing To Do: Learn All We Can

0개의 댓글