점프 투 파이썬 00장 들어가기 전에 00-1 머리말 00-2 저자소개 00-3 동영상 강의 00-4 소스 코드 00-5 책 구입 안내 00-6 주요변경이력 01장 파이썬이란 무엇인가? 01-1 파이썬이란? 01-2 파이썬의 특징 01-3 파이썬으로 무엇을 할 수 있을까? 01-4 파이썬 설치하기 01-5 파이썬 둘러보기 01-6 파이썬과 에디터 02장 파이썬 프로그래밍의 기초, 자료형 02-1 숫자형 02-2 문자열 자료형 02-3 리스트 자료형 02-4 튜플 자료형 02-5 딕셔너리 자료형 02-6 집합 자료형 02-7 불 자료형 02-8 자료형의 값을 저장하는 공간, 변수 02장 되새김 문제 03장 프로그램의 구조를 쌓는다! 제어문 03-1 if문 03-2 while문 03-3 for문 03장 되새김 문제 04장 파이썬의 입출력 04-1 함수 04-2 사용자 입출력 04-3 파일 읽고 쓰기 04-4 프로그램의 입출력 04장 되새김 문제 05장 파이썬 날개 달기 05-1 클래스 05-2 모듈 05-3 패키지 05-4 예외 처리 05-5 내장 함수 05-6 표준 라이브러리 05-7 외부 라이브러리 05장 되새김 문제 06장 파이썬 프로그래밍, 어떻게 시작해야 할까? 06-1 내가 프로그램을 만들 수 있을까? 06-2 3과 5의 배수를 모두 더하기 06-3 게시판 페이징하기 06-4 간단한 메모장 만들기 06-5 탭 문자를 공백 문자 4개로 바꾸기 06-6 하위 디렉터리 검색하기 07장 파이썬 날아오르기 07-1 파이썬과 유니코드 07-2 클로저와 데코레이터 07-3 이터레이터와 제너레이터 07-4 파이썬 타입 어노테이션 08장 정규표현식 08-1 정규 표현식 살펴보기 08-2 정규 표현식 시작하기 08-3 강력한 정규 표현식의 세계로 09장 부록 09-1 파이썬 코딩 면허 시험 20제 09-2 챗GPT와 함께 파이썬 공부하기 10장 정답 및 풀이 마치며.
    Published with WikiDocs
    1. 점프 투 파이썬
    2. 03장 프로그램의 구조를 쌓는다! 제어문
    3. 03-3 for문
    1. 도서 증정 이벤트 !!
    2. 위키독스

    03-3 for문

    [동영상 강의] : 점프 투 파이썬 03-3 for문

    파이썬의 직관적인 특징을 가장 잘 보여 주는 것이 바로 이 for 문이다. while 문과 비슷한 반복문인 for 문은 문장 구조가 한눈에 들어온다는 장점이 있다. for 문을 잘 사용하면 프로그래밍이 즐거워질 것이다.

    • for 문의 기본 구조
    • 예제를 통해 for 문 이해하기
      • 1. 전형적인 for 문
      • 2. 다양한 for 문의 사용
      • 3. for 문의 응용
    • for 문과 continue 문
    • for 문과 함께 자주 사용하는 range 함수
      • range 함수의 예시 살펴보기
      • for와 range를 이용한 구구단
    • 리스트 컴프리헨션 사용하기

    for 문의 기본 구조

    for 문의 기본 구조는 다음과 같다.

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

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

    예제를 통해 for 문 이해하기

    for 문은 예제를 통해서 살펴보는 것이 가장 알기 쉽다. 다음 예제를 직접 입력해 보자.

    1. 전형적인 for 문

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

    ['one', 'two', 'three'] 리스트의 첫 번째 요소인 'one'이 먼저 i 변수에 대입된 후 print(i) 문장을 수행한다. 다음에 두 번째 요소 'two'가 i 변수에 대입된 후 print(i) 문장을 수행하고 리스트의 마지막 요소까지 이것을 반복한다.

    2. 다양한 for 문의 사용

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

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

    3. for 문의 응용

    for 문의 쓰임새를 알기 위해 다음과 같은 문제를 생각해 보자.

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

    먼저 학생 5명의 시험 점수를 리스트로 표현해 보자.

    marks = [90, 25, 67, 45, 80]
    

    1번 학생은 90점이고 5번 학생은 80점이다.

    이런 점수를 차례로 검사해서 합격했는지, 불합격했는지 통보해 주는 프로그램을 만들어 보자. IDLE 에디터로 작성하자.

    # marks1.py
    marks = [90, 25, 67, 45, 80]   # 학생들의 시험 점수 리스트
    
    number = 0   # 학생에게 붙여 줄 번호
    for mark in marks:   # 90, 25, 67, 45, 80을 순서대로 mark에 대입
        number = number +1 
        if mark >= 60: 
            print("%d번 학생은 합격입니다." % number)
        else: 
            print("%d번 학생은 불합격입니다." % number)
    

    각각의 학생에게 번호를 붙여 주기 위해 number 변수를 사용하였다. 점수 리스트 marks에서 차례로 점수를 꺼내어 mark라는 변수에 대입하고 for 문 안의 문장들을 수행한다. 먼저 for 문이 한 번씩 수행될 때마다 number는 1씩 증가한다.

    이 프로그램을 실행하면 mark가 60 이상일 때 합격 메시지를 출력하고 60을 넘지 않을 때 불합격 메시지를 출력한다. 명령 프롬프트 창을 열어 실행해 보자.

    C:\doit>python marks1.py
    1번 학생은 합격입니다.
    2번 학생은 불합격입니다.
    3번 학생은 합격입니다.
    4번 학생은 불합격입니다.
    5번 학생은 합격입니다.
    

    for 문과 continue 문

    while 문에서 살펴본 continue 문을 for 문에서도 사용할 수 있다. 즉, for 문 안의 문장을 수행하는 도중 continue 문을 만나면 for 문의 처음으로 돌아가게 된다.

    앞에서 for 문 응용 예제를 그대로 사용해서 60점 이상인 사람에게는 축하 메시지를 보내고 나머지 사람에게는 아무런 메시지도 전하지 않는 프로그램을 IDLE 에디터로 작성해 보자.

    # 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 문의 처음으로 돌아가게 된다.

    C:\doit>python marks2.py
    1번 학생 축하합니다. 합격입니다.
    3번 학생 축하합니다. 합격입니다.
    5번 학생 축하합니다. 합격입니다.
    

    for 문과 함께 자주 사용하는 range 함수

    for 문은 숫자 리스트를 자동으로 만들어 주는 range 함수와 함께 사용하는 경우가 많다. 다음은 range 함수의 간단한 사용법이다.

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

    range(10)은 0부터 10 미만의 숫자를 포함하는 range 객체를 만들어 준다.

    시작 숫자와 끝 숫자를 지정하려면 range(시작_숫자, 끝_숫자) 형태를 사용하는데, 이때 끝 숫자는 포함되지 않는다.

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

    range 함수의 예시 살펴보기

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

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

    range(1, 11)은 숫자 1부터 10까지(1 이상 11 미만)의 숫자를 데이터로 가지는 객체이다. 따라서 위 예에서 i 변수에 숫자가 1부터 10까지 하나씩 차례로 대입되면서 add = add + i 문장을 반복적으로 수행하고 add는 최종적으로 55가 된다.

    또한 우리가 앞에서 살펴본 합격 축하 문장을 출력하는 예제도 range 함수를 사용해서 다음과 같이 바꿀 수 있다.

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

    len는 리스트 안의 요소 개수를 리턴하는 함수이다. 따라서 len(marks)는 5, range(len(marks))는 range(5)가 될 것이다. number 변수에는 차례로 0부터 4까지의 숫자가 대입되고 marks[number]는 차례대로 90, 25, 67, 45, 80 값을 가지게 된다. 결과는 marks2.py 예제와 동일하다.

    for와 range를 이용한 구구단

    for와 range 함수를 사용하면 소스 코드 단 4줄만으로 구구단을 출력할 수 있다. 들여쓰기에 주의하면서 입력해 보자.

    >>> for i in range(2,10):        # 1번 for문
    ...     for j in range(1, 10):   # 2번 for문
    ...         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
    

    위 예를 보면 for 문을 두 번 사용했다. 1번 for 문에서 2부터 9까지의 숫자(range(2, 10))가 차례대로 i에 대입된다. i가 처음 2일 때 2번 for 문을 만나게 된다. 2번 for 문에서 1부터 9까지의 숫자(range(1, 10))가 j에 대입되고 그다음 문장인 print(i*j, end=" ")를 수행한다. 따라서 i가 2일 때 2 * 1, 2 * 2, 2 * 3, … 2 * 9까지 차례대로 수행되며 그 값을 출력하게 된다. 그다음으로 i가 3일 때 역시 2일 때와 마찬가지로 수행될 것이고 i가 9일 때까지 계속 반복된다.

    print(i*j, end=" ")와 같이 print 함수에 end 파라미터를 설정한 이유는 해당 결괏값을 출력할 때 다음 줄로 넘기지 않고 그 줄에 계속 출력하기 위해서이다. 그다음에 이어지는 print('')는 2단, 3단 등을 구분하기 위해 사용했다. 두 번째 for 문이 끝나면 결괏값을 다음 줄부터 출력하게 하는 역할을 한다.

    • print 문의 end 매개변수에는 줄바꿈 문자(\n)가 기본값으로 설정되어 있다.
    • print 문은 04-2에서 보다 자세히 다룬다.

    리스트 컴프리헨션 사용하기

    리스트 안에 for 문을 포함하는 리스트 컴프리헨션(list comprehension)을 사용하면 좀 더 편리하고 직관적인 프로그램을 만들 수 있다. 다음 예제를 살펴보자.

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

    위 예제에서는 a 리스트의 각 항목에 3을 곱한 결과를 result 리스트에 담았다.

    리스트 컴프리헨션을 사용하면 다음과 같이 좀 더 간단하게 작성할 수 있다.

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

    만약 [1, 2, 3, 4] 중에서 짝수에만 3을 곱하여 담고 싶다면 리스트 컴프리헨션 안에 ‘if 조건문’을 사용하면 된다.

    >>> a = [1,2,3,4]
    >>> 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 문으로 바꾸어서 사용할 수 있는 경우도 많다.

    마지막 편집일시 : 2023년 11월 27일 12:21 오전
    댓글 80 피드백
    댓글 70개 더 보기...
    @경성님. if mark >= 60:에서 mark를 m으로 바꾸시면 정상수행될겁니다. - 일환, 2018년 6월 1일 11:11 오전
    안녕하세요 박응용 선생님, 이렇게 풍족한 개념들을 웹에도 올려주신것에 진심으로 감사드립니다. 파이썬 for문을 쓰다가 꽤 골치아픈 경우가 있어서 질문드려요. C나 자바같은 경우 기본형태가 for(초기식; 조건식 ; 증감식 등 기타 수행문) 인데 조건식이나 기타 수행문 부분에는 말 그대로 >,>=, <, <= 등을 포함한 조건문이나, && ||연산자도 쓸수 있잖아요? 기타 수행문 부분에는 굳이 조건식과 초기식에 있는 변수와 관련되지 않는 변수나 식을 쓸 수도 있고요. 근데 파이썬은 for 변수 in 리스트,튜플 / for 변수 in range(수 범위) 형태라 >,>=, <, <= 같은 조건식을 도저히 넣을 수가 없어서 이런 경우는 어떻게 해야하는지 너무 궁금합니다. 예를들어 ex) for (x = 0, num = 0 ; x < 20 && num < 10 ; x+=2, num++) [반복할 문장들] C나 Java는 위 조건식 부분과 기타 수행문부분으로 반복작업과 그에 대한 종료조건을 한 줄에 다 표현할 수 있고 콤마를 사용해 2개 이상의 변수에 대해서도 처리할 수 있는데 반해 파이썬은 그게 안 되는거 같습니다. 맞나요? 이런 for문의 형태를 보면서 정말 파이썬이 쉬운 언어가 맞는걸까..? 라는 생각이 들기까지 했어요.. C, Java계열언어는 수학처럼 딱 명료한 특징이라 "이것이 아니면 딱 저것" 같이 확실한 느낌이 있는반면 파이썬은 마치 (외)국어를 학습하는 느낌이랄까요, 직관적임이 파이썬의 강점이지만 진짜 사람이 쓰는 언어의 특징처럼 사용할 수 있는 경우의 수가 많아서 이 부분이 조금 힘듭니다..! 결론적으로 파이썬 for문에 조건을 넣으려면 대체 어떻게 해야하는지에 대한 질문입니다. 막 찾아보니 while로 바꿔야한다...for아래에 if문을 넣는 수밖에 없다고 하는데 정확히 감이 안잡힙니다. 박응용 선생님의 노고에 다시한번 감사의 말씀드립니다. - 코드연구파, 2018년 11월 3일 3:39 오후
    @코드연구파님, for문에 위처럼 조건식을 넣을수는 없지만 비슷하게 처리는 가능합니다. 다음 URL 참조해 보시구요. https://stackoverflow.com/questions/12986996/conditional-for-in-python 개인적으로 c, java의 for문과 동일한 형태의 문법이 파이썬에 없는게 파이썬의 단점이라기 보다는 언어의 디자인 방향이 달라서라고 생각합니다. 파이썬은 문법들이 대부분 직관적이거든요. 개인적으로 파이썬 코딩을 하면서 c나 java의 for문 조건식이 없어서 불편했던 적은 딱히 없는것 같습니다. 하지만 c, java에 익숙한 분들에게는 뭔가 부족한 모습일수는 있겠네요. 이런 주제는 파이썬 커뮤니티 같은곳에서 다루어도 좋을것 같습니다. 좋은의견 감사합니다. - 박응용, 2018년 11월 5일 10:02 오전
    그런 것 같네요 파이썬 문법에 하루 빨리 친해져야겠어요 자세한 답변 정말 감사드립니다! - 코드연구파, 2018년 11월 5일 9:41 오후
    리스트 내포 2번문제 정답을 봐도 해석이 안되요 .. vowels = 'aeiou' sentence = 'Life is too short, you need python' ''.join([a for a in sentence if a not in vowels]) 'Lf s t shrt, y nd pythn' vowel에 aeiou라는 문자열을 넣고 sentence에 Life is ... 문자열 넣는거까진 알겟는데 공백없는 붙인 ''이랑 ''.join 의미랑 () 괄호안에 []리스트 괄호 넣는거도 이유를 모르겟고 in sentence if a not in vowels 가 sentence안에 vowels이 없으면 이라는건 알겟는데 그앞에 a for a 가 의미하는바를 모르겟어요.. 그리고 리스트 내포가 아닌 그냥 for문으로 표현하면 어떻게 쓰나요?? - Jung Hyun, 2018년 11월 21일 11:28 오후
    @Jung Hyun님, 위 리스트내포 풀이를 풀어서 쓰면 다음과 같습니다. vowels = 'aeiou' sentence = 'Life is too short, you need python' result = [] for a in sentence: if a not in vowels: result.append(a) print(''.join(result)) ''.join(result)의 의미는 result 리스트의 항목을 연결해 주는 역할을 합니다. '' 대신 ','를 사용하면 쉼표가 추가되어 연결이됩니다. 여기서는 아무런 구분자 없이 ''.join(result) 를 사용했으므로 그냥 리스트의 내용들이 연결되어 문자열로 변환되게 됩니다. - 박응용, 2018년 11월 27일 11:03 오후
    for와 range를 이용한 구구단에서 ================================== >>> for in range(2,10): ... for j in range(1,10): ... File "<stdin>", line 1 for in range(2,10): ^ SyntaxError: invalid syntax >>> print(i*j, end=" ") Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'i' is not defined >>> print('') >>> =================================== 뭐가 잘못된 건지 잘 모르겠습니다... 분명 나와있는대로 코딩 했는데ㅠㅠ Python 3.8(64bit)사용중입니다. - Hyosung, 2019년 3월 30일 4:03 오후
    f1=open("file1.txt", 'r') Lines1=f1.readlines() g0=open("3-0.txt", 'w') g0.write(Lines1[0]) g0.write(Lines1[92]) g0.write(Lines1[93]) g0.write(Lines1[94]) g0.write(Lines1[95]) g0.write(Lines1[96]) g0.write(Lines1[97]) g0.write(Lines1[98]) g0.write(Lines1[99]) g0.write(Lines1[100]) 이렇게 쓴 다음에, gn=open("3-n.txt", 'w') gn=write(lines1[101*n]) gn=write(lines1[101*n+92]) .... 이런 식으로 반복되도록 간소화할 수는 없을까요? n은 7까지로 하고요. - 최윤성, 2019년 7월 29일 1:51 오후
    안녕하세요 책 구매해서 열심히 공부하고 있는 학생입니다! 다름이 아니라 for if문 문자열 코드 식을 작성하면서 궁금한 점이 있어 댓글 남깁니다~ 만약 주어진 리스트 내 텍스트를 for 구문을 이용해 소문자로 변환하지만, 특정 텍스트는 고유명사로 지정하고 그 형태를 유지한 상태로 출력하고자 한다면 어떻게 코드 식을 작성할 수 있는지 궁금합니다. 예를 들어, animals = ['Lion', 'Tiger', 'Dog', 'monkey']라는 리스트를 소문자로 출력하지만 animals_2 = ['Lion', 'Tiger'] 는 그 상태로 유지하려고 한다면 어떻게 for if 구문을 사용할 수 있는지 궁금합니다 +) for zoo in animals print(zoo.lower()) #는 할 수 있지만 조건 animals_2 = ['Lion', 'Tiger']에 있는 단어는 그대로 출력하고 싶은데 어떻게 식을 작성해야 하는지 모르겠습니다. 감사합니다!! - JHM, 2021년 4월 30일 8:25 오전
    @Hyosung님 #for for num in range(1, 10): print("num") number = int(input("숫자 입력")) for num in range(1, 10): print("%dx%d=%d"%(number, num, number*num)) sum = 0 for i in range(2, 101, 2): sum +=i print(sum) for i in range(1, 6): if i == 3: break print(i) for i in range(2, 10): for j in range(1, 10): print("%dx%d=%d"%(i, j, i*j)) - 이즈 포이즌, 2022년 6월 13일 2:05 오후
    ※ 댓글 작성은 로그인이 필요합니다. (또는 피드백을 이용해 주세요.)
    • 이전글 : 03-2 while문
    • 다음글 : 03장 되새김 문제
    TOP

    이 페이지에 대한 피드백을 남겨주세요

    ※ 피드백은 저자에게 e-메일로 전달됩니다.

    댓글을 신고합니다.

    해당 댓글을 신고하시겠습니까? 댓글 신고는 다음과 같은 경우에 사용해주세요:
    1. 스팸 또는 광고성 내용이 포함된 경우
    2. 욕설, 비방, 개인정보 유출 등 부적절한 내용이 포함된 경우
    3. 저작권을 침해하는 내용이 포함된 경우

    ※ 신고하신 내용은 관리자에게 전달되며, 확인 후 적절한 조치가 이루어집니다. 신고는 익명으로 처리되며, 신고자의 정보는 공개되지 않습니다.