ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6. 파이썬 문법 반복문 (for/while)
    파이썬(Python) 강의 2019. 2. 10. 10:22

    이번 포스트 부터는 파이썬 자료형에서 잠시 벗어나 파이썬 문법을 설명하도록 하겠다. 프로그램이란 자료형 + 반복문 + 조건문으로 구성된다. 아무리 복잡하고 어려워 보이는 프로그램도 까보면 다 자료형, 반복문, 조건문으로 구성되어있다. 이 포스트에서는 반복문과 조건문 중에서도 반복문을 알아보고 다음 포스트에서는 조건문을 알아보도록 하겠다.


    들어가기전에

    이 포스트는 여러분이 파이썬을 설치했고 각자 원하는 IDE를 이용해 파이썬을 개발한다고 가정한다. 대화형(Interactive) 터미널을 사용해도 상관 없다. 혹시 파이썬을 설치하지 않았다면  1.파이썬 설치 및 개발환경 설정 이 포스트에서 파이썬과 파이썬 개발환경을 먼저 셋업하길 바란다. 앞서 말했듯이 반드시 실습 해 보길 바라고 30분 이상 소요하지 말라. 

    예상 소요 시간 30분

    목표

    • 반복문(loop)이란?
      • Boolean형과 조건(condition)
    • for문
    • while문
    • break

    반복문(loop)이란?

     반복문이 무엇일 것 같은가? 딱 이름만 봐도 무언가를 반복 할 것 같은 느낌이 온다. 그렇다면 무엇을 반복하는가? 반복문은 어떤 득정 코드 블락을 조건이 맞을 때 가지 반복한다. 반복문의 구성을 보자.

    • 반복문 키워드 : for 또는 while을 통해 앞으로 반복문이 나올 것이라는 것을 알려준다.
    • 조건 - 이 반복문이 언제 그만 돌아야 하는가? 어떤 조건에서 반복문은 계속 실행 될 것인가? 예를들면 x < 30보다 작은 동안은 계속 반복하라! 라고 지정 할 수 있다.
    • 코드블락(code block) - 코드의 어디서부터 어디까지 반복 할 것인가? 

    Boolean형과 조건(condition)

    파이썬이나 어느 다른 프로그래밍 언어에서나 조건이라는 것은 어떤 조건에 따라 참 또는 거짓이 되는 문장을 의미한다.
    cond = 3 > 5
    print(cond) False
    3이 5보다 큰가? 그렇지 않다. 그러므로 cond에는 False라는 Boolean형이 들어간다. Boolean형에는 두가지 값이 존재한다 True 또는 False. True의 경우를 보자.

    cond = 3 < 5
    print(cond) True

    3을 5보다 작기 때문에 True가 리턴된다. 
    num = 10
    print(num > 10)
    print(num <= 10) False True
    위처럼 변수를 이용해서 조건을 만들 수도 있다.
    str = "abc"
    print("abc" == str) True

    파이썬 자료형인 문자열 끼리도 조건을 확인 하는 것이 가능하다. '=='는 왼쪽과 오른쪽의 값이 같은가? 하고 묻는 것이다. 이러한 조건은 조건문과 반복문에서 사용된다. 두번째 요소인 코드블락에 대해서는 for문의 예제로 설명하도록 하겠다.

    for 문

    for i in range(1, 10):
    print(i)

    첫번째 줄을 보자. 첫번째 줄에는 for라는 반복문 키워드와 반복의 조건이 나와있다. for - ~하는 동안은 이라고 해석하면 된다. 자 그렇다면 i in range(1, 10)이란? i가 1~10 범위(range)에 있는(in)이라는 뜻이다. 다시말해 i가 범위 1보다 크거나 같고 10보다 작은 동안~ 아래의 코드 블락을 실행시켜라, 이다. 아래의 코드블락이란 여기서 print(i)이다. 실행시켜보자.

    1
    2
    3
    4
    5
    6
    7
    8
    9

    1에서 9까지 출력된 것을 확인 할 수 있다. 어라? 이상하지 않은가? 우리는 i를 출력하기만 했지 i의 값을 바꾼 적은 없는데 왜 i의 값이 계속 증가하는가? 그렇다 다른 언어들과 다르게 파이썬 반복문에서는 range키워드를 이용해 for문을 사용하는 경우 i의 값이 반복문의 끝에서 1씩 증가한다. 그래서 마지막에 9였던 i가 10으로 증가하고 10은 10보다 작지 않기 때문에 반복문이 실행을 멈추는 것이다. ,이번엔 다른 예를 들어보자.

    for i in range(1, 10):
    print(i)
    print("Print Me!")

    위의 예를 실행하면 어떻게 되는가?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    Print Me!

    마지막에 Print Me!가 출력된다. 왜 Print Me!는 같이 반복되지 않을까? Print Me를 같이 반복 할 수 있을까?

    for i in range(1, 10):
    print(i)
    print("Print Me!")

    위를 실행시키면 다음과 같은 결과가 나온다.

    1
    Print Me!
    2
    Print Me!
    3
    Print Me!
    4
    Print Me!
    5
    Print Me!
    6
    Print Me!
    7
    Print Me!
    8
    Print Me!
    9
    Print Me!

    두 코드의 차이가 무엇인가? 바로 인덴션(Indention : 안으로 들여쓰기) 이다.

    <인덴션 차이>

    위에서 실행 해 본 두 코드의 차이접을 보자. 첫번 째 코드는 print("Print Me!")가  for이 시작하는 위치와 같은 위치에서 시작한다. 따라서 for문은 이를 자신의 코드블락이라고 인지하지 못한다. for는 자기보다 tab또는 스페이스바로 한 칸 들어가 있는 부분만 자신의 "코드블락"으로 인지한다. 그렇다면 print(i)의 인덴션을 지키지 않으면 어떻게 될까?

    for i in range(1, 10):
    print(i)

    print(i) ^ IndentationError: expected an indented block

    들여쓰기가 잘못됐음을 나타내는 IndentationError가 나는 것을 알 수 있다.

    파이썬 자료형 리스트에서 리스트 안에 있는 것을 차례대로 가져와 반복하고 싶다면 어떻게 했었던가?

    for fruit in ["apple", "banana", "orange", "mange"]:
    print(fruit) apple banana orange mange

    그렇다 이렇게 for x in 리스트 를 해주면 x안에 리스트의 아이템이 하나씩 들어가는 것을 확인 할 수 있었다. 

    while 문

     반복을 하는 방법으로 for문 대신 while문을 사용 할 수 있다. while문도 for문과 마찬가지로 1) 반복을 위한 조건 2) 반복 할 코드 블락을 주어야 한다. 아래의 예를 보자.

    while True:
    print("while statement") while statement while statement while statement while statement while statement ... (무한히 반복)

    위의 반복문을 실행하면 무한히 while statement를 반복하는 것을 알 수 있다.

    반복문을 위한 조건은 항상 참 또는 거짓의 형태여야 한다. 이는 for문도 마찬가지이지만 다른 프로그램언어에 비해 파이썬이 for문을 더 사용하기 쉽게 해 놓아 참 거짓의 형태로 조건이 잘 드러나지 않을 때가 있다. 아무튼 True가 씌여있는 반복을 위한 조건에 반드시 True/False자체가 들어갈 필요는 없다. 다시 말해서, True/False를 리턴하는 "조건"이 들어가면 된다.

    x = 3;
    while x < 6:
    print(x)
    x = x + 1 3 4 5

    위를 보면 맨 처음 x에는 3이 들어있다. 그리고 3은 6보다 작으로 다음 줄에서 while은 아, 반복문으로 들어가도 되겠구나라고 판단해 반복문 내부로 들어간다. 그리고 print(x)후 x에 x+1을 저장한다. x엔 뭐가 있었나? 3이 있었다. 그러면 3+1을 다시 x에 저장했으니 x엔 뭐가 들어있는가? 4가 들어있다.반복문이므로 다시 while x < 6이 있는 부분으로 올라가고 x를 다시 검사한다. 아래의 그림을 보고 전체 실행 순서를 이해하자.

    그렇다면 처음부터 조건이 맞지 않는다면 어떻게 되는가?

    x = 8;
    while x < 6:
    print(x)
    x = x + 1

    아무것도 실행되지 않음을 확인 할 수 있다. 조건이 맞지않으니 조건문의 내부로 들어가지조차 않는 것이다. 그렇다면 조건문 내부에서 마음대로 빠져나올 수 있는 방법이 있을까?

    break

    for문과 while문에서 break를 사용하면 조건이 맞지 않더라도 반복문을 빠져 나올 수 있다. 다음의 예를 보자.

    x = 3;
    while x < 6:
    print(x)
    x = x + 1
    break
    3

    위의 예제를 했을 때의 결과와 어떻게 다른가? 위의 비슷한 예제에서는 3, 4, 5까지 실행 되었지만 이 예제에서는 3만 달랑 실행되고 끝나버렸다. 바로 break문 때문이다. 그렇다면 break문은 언제 자주 쓰는가? 검색에서 자주 쓴다. 

    fruitList = ["apple", "banana", "orange", "mango"]

    for fruit in fruitList:
    if fruit == "orange":
    print(" I found " + fruit)
    break
    print(fruit)
    apple banana I found orange

    예를들어 우리는 fruit이 오렌지이면 뭔가 다른 일을 수행 후(여기서는 print) 반복문을 빠져나가고싶다. 이런 패턴은 검색 알고리즘에서 많이 나타나는데, 리스트를 돌며 원하는 값이 있는지 찾는데 자주 사용된다.

    fruitList = ["apple", "banana", "orange", "mango"]
    userInput = input("Put your favorite fruit : ")
    for fruit in fruitList:
    if fruit == userInput:
    print(" I found " + userInput)
    break
    Put your favorite fruit : mango I found mango

    위의 코드를 실행시키면 Put your favorite fruit :라는 문장이 뜨며 여러분의 입력을 기다릴 것이다. 나는 mango를 넣었지만 여러분은 다른 것을 넣어 확인 해 면 된다.

     이번 포스트를 통해 파이썬 문법인 반복문을 구성하는 요소들과 반복문을 사용하는 방법, 또 반복문을 빠져나가는 방법에 대해 알아보았다. 다음 시간에는 파이썬의 아주 중요한 또다른 문법인 조건문에 대해 알아

    댓글

f.software engineer @ All Right Reserved