ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 문장구조 요약정리2(for)
    파이썬 2017. 11. 18. 23:56


    for문

    while문과 비슷한 반복문인 for문은 매우 유용하고 문장 구조가 한눈에 쏙 들어온다는 장점이 있다. for문을 잘 사용하면 프로그래밍이 때때로 즐거워질 것이다.


    for 변수 in 리스트(또는 튜플, 문자열): 수행할 문장1 수행할 문장2 ...



    리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입되어 "수행할 문장1", "수행할 문장2" 등이 수행된다.


    >>> test_list = ['one', 'two', 'three'] >>> for i in test_list: ... print(i) ... one two three




    다양한 for문의 사용


    >>> a = [(1,2), (3,4), (5,6)] >>> for (first, last) in a: ... print(first + last) ... 3 7 11


    위의 예는 a 리스트의 요소값이 튜플이기 때문에 각각의 요소들이 자동으로 (first, last)라는 변수에 대입된다.

    (※ 이 예는 02장에서 살펴보았던 튜플을 이용한 변수값 대입 방법과 매우 비슷한 경우이다. >>> (first, last) = (1, 2))


    for문의 응용

    "총 5명의 학생이 시험을 보았는데 시험 점수가 60점이 넘으면 합격이고 그렇지 않으면 불합격이다. 합격인지 불합격인지 결과를 보여주시오."

    # marks1.py

    marks = [90, 25, 67, 45, 80] number = 0 for mark in marks: number = number +1 if mark >= 60: print("%d번 학생은 합격입니다." % number) else: print("%d번 학생은 불합격입니다." % number)


    for문과 continue

    # marks2.py marks = [90, 25, 67, 45, 80] number = 0 for mark in marks: number = number +1 if mark < 60: continue print("%d번 학생 축하합니다. 합격입니다. " % number)


    점수가 60점 이하인 학생일 경우에는 mark < 60이 참이 되어 continue문이 수행된다. 따라서 축하 메시지를 출력하는 부분인 print문을 수행하지 않고 for문의 처음으로 돌아가게 된다.


    for와 함께 자주 사용하는 range함수

    >>> a = range(10) >>> a range(0, 10)

    >>> a = range(1, 11) >>> a range(1, 11)


    ange 함수의 예시 살펴보기

    for와 range 함수를 이용하면 1부터 10까지 더하는 것을 다음과 같이 쉽게 구현할 수 있다.

    range(1, 11)은 숫자 1부터 10까지(1 이상 11 미만)의 숫자를 데이터로 갖는 객체이다. 


    >>> sum = 0 >>> for i in range(1, 11): ... sum = sum + i ... >>> print(sum)

    55


     len 함수는 리스트 내 요소의 개수를 돌려주는 함수이다. 따라서 len(marks)는 5가 될 것이고 range(len(marks))는 range(5)가 될 것이다. 


    #marks3.py marks = [90, 25, 67, 45, 80] for number in range(len(marks)): if marks[number] < 60: continue print("%d번 학생 축하합니다. 합격입니다." % (number+1))




    for와 range를 이용한 구구단


    >>> for i in range(2,10): ... for j in range(1, 10): ... print(i*j, end=" ") ... print('') ... 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81


    앞의 예제에서 print(i*j, end=" ")와 같이 입력 인수 end를 넣어 준 이유는 해당 결과값을 출력할 때 다음줄로 넘기지 않고 그 줄에 계속해서 출력하기 위해서이다. 그 다음에 이어지는 print(' ')는 2단, 3단 등을 구분하기 위해 두 번째 for문이 끝나면 결과값을 다음 줄부터 출력하게 해주는 문장이다.


    리스트 안에 for문 포함하기


    >>> a = [1,2,3,4] >>> result = [] >>> for num in a: ... result.append(num*3) ... >>> print(result) [3, 6, 9, 12]



    리스트 안에 for문을 포함하는 리스트 내포(List comprehension)를 이용하면 좀 더 편리하고 직관적인 프로그램을 만들 수 있다. 다음의 예제를 보자.



    >>> result = [num * 3 for num in a] >>> print(result) [3, 6, 9, 12]


    만약 짝수에만 3을 곱하여 담고 싶다면 다음과 같이 "if 조건"을 사용할 수 있다.

    >>> result = [num * 3 for num in a if num % 2 == 0]
    >>> print(result)
    [6, 12]


    리스트 내포의 일반적인 문법은 다음과 같다. "if 조건" 부분은 앞의 예제에서 볼 수 있듯이 생략할 수 있다.

    [표현식 for 항목 in 반복가능객체 if 조건]
    

    조금 복잡하지만 for문을 2개 이상 사용하는 것도 가능하다. for문을 여러 개 사용할 때의 문법은 다음과 같다.

    [표현식 for 항목1 in 반복가능객체1 if 조건1
            for 항목2 in 반복가능객체2 if 조건2
            ...
            for 항목n in 반복가능객체n if 조건n]
    

    만약 구구단의 모든 결과를 리스트에 담고 싶다면 리스트 내포를 이용하여 아래와 같이 간단하게 구현할 수도 있다.

    >>> result = [x*y for x in range(2,10)
    ...               for y in range(1,10)]
    >>> print(result)
    [2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16,
    20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42
    , 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72,
    9, 18, 27, 36, 45, 54, 63, 72, 81]
    

    지금껏 우리는 프로그램의 흐름을 제어하는 if문, while문, for문에 대해서 알아보았다. 아마도 여러분은 while문과 for문을 보면서 2가지가 아주 비슷하다는 느낌을 받았을 것이다. 실제로 for문을 사용한 부분을 while문으로 바꿀 수 있는 경우도 많고, while문을 for문으로 바꾸어서 사용할 수 있는 경우도 많다.