2015. 11. 15. 02:24ㆍ왕초보를 위한 빠르게 훑어보는 파이썬
안녕하세요.
어느덧 빠르게 훑어보는 파이썬 5번째 강좌입니다.
이번에는 "반복문"에 대해서 알려드릴건데요,
먼저 반복문이란 무엇인지, 간략히 개념정리하고 바로 예제를 살펴보면서 감잡아 볼게요.
반복문 정의
반복문이 뭐에요?
말 그대로, "반복작업을 하는 구문"이라는 뜻이에요.
예를 하나 들어볼게요.
저는 고등학교때 "두발검사" 라는 것을 했었어요.
학생부 선생님이 등교하는 학생들 머리를 일일이 살펴보고 규정에 맞지 않는 머리스타일을 한 학생을 잡아냈었죠. --;
이때 이 학생부 선생님이 하는 일이 "반복작업"이에요.
학생1머리 보고, 머리검사하고,
학생2머리 보고, 머리검사하고,
학생3머리 보고, 머리검사하고,
.....
머리검사하고 부분이 반복작업인 것이죠.
이것을 프로그래밍으로 옮겨볼까요?
첫번째 학생에 대해서..
if 첫번째 학생 머리스타일이 규정에 어긋나는가? :
학생에게 주의를 준다.
오늘 방과후 머리를 자르고, 내일 검사받으러 오라고 한다.
else :
아무일도 하지 않는다.
두번째 학생에 대해서..
if 두번째 학생 머리스타일이 규정에 어긋나는가? :
학생에게 주의를 준다.
오늘 방과후 머리를 자르고, 내일 검사받으러 오라고 한다.
else :
아무일도 하지 않는다.
...(반복)
위 박스를 보면, 녹색 박스의 작업은 동일하죠.
작업의 대상인 학생만 다르다는 것을 알 수 있습니다. 학생이 1000명이라면, if~else 문을 1000번 써야하는데, 너무 비효율적이라는 생각 들지 않나요?
프로그래밍에서는 비효율적인 것을 굉장히 싫어합니다.
그래서!! 반복문 이라는 것을 만들게 된거에요.
"반복문" 은 동일하게 작업할 내용을 딱 한번만 작성을 하고, 작업의 대상이 바뀔 수 있도록 문법을 지원합니다.
자 다음내용에서 반복문 문법에 대해 살펴볼게요.
반복문 문법
python 반복문에는 2가지 종류가 있어요.
1) for 반복문
2) while 반복문
먼저 for 반복문 부터 알아보겠습니다.
아래는 for 반복문 sample 이에요.
결과는 아래와 같이 나옵니다.
보시면, student1~student3 까지 학생들에 대해서 print 함수를 실행하여, 총 3번의 함수 출력결과가 나온 것을 알수 있죠.
결국, for반복문의 문법을 분석해보면 아래와 같습니다.
<for 반복문 >
for 원소를 저장할 변수 in 원소그룹 :
각 원소에 대해서 취할 동작 #1
각 원소에 대해서 취할 동작 #2
각 원소에 대해서 취할 동작 #3
각 원소에 대해서 취할 동작 #4
반복작업의 원소들이 포함되어 있는 원소그룹과, 그 하나하나의 원소(자료)을 저장할 변수, 그리고 하나의 원소에 대해서 취할 동작을 명시해주면 for반복문이 완성이 됩니다.
이때 for 반복문의 시작과 끝은 어디일까요? 다시 마래서 반복적으로 실행되는 부분은 어떤문장일까요?
들여쓰기가 동일한 #1~#3 까지의 문장입니다. #4 부분은 반복문하고 전혀 상관없는 부분이에요. 이전 조건문 강좌에서 들여쓰기의 의미에 대해서 설명해드렸는데요. 반복문에서도 반복문의 시작과 끝이 어디인지,구간을 정의할 때 들여쓰기를 사용합니다.
반복문에 대해서 아직 아리송 하신가요?
위에 한글로 적어놓은 for 반복문의 내부 동작을 뜯어보면, 아래와 같아요.
1. 원소그룹의 첫번째 원소를 변수에 저장한다.
(=> "student1" 을 student 변수에 저장한다.)
2. 원소에 대해서 취할 동작을 수행한다.
(=> print 함수를 수행한다. 이때 student 변수에는 "student1" 문자 자료형 자료가 저장되어 있어서 student1 라고 출력됨)
3. 원소그룹의 두번째 원소를 변수에 저장한다.
(=> "student2" 을 student 변수에 저장한다.)
4. 원소에 대해서 취할 동작을 수행한다.
(=> print 함수를 수행한다. 이때 student 변수에는 "student2" 문자 자료형 자료가 저장되어 있어서 student2 라고 출력됨)
5. 원소그룹의 두번째 원소를 변수에 저장한다.
(=> "student3" 을 student 변수에 저장한다.)
6. 원소에 대해서 취할 동작을 수행한다.
(=> print 함수를 수행한다. 이때 student 변수에는 "student3" 문자 자료형 자료가 저장되어 있어서 student3 라고 출력됨)
이젠 이해되시죠??? ^^ 이해 안되시면, 위에 내용을 찬찬히 의미를 이해하면서 몇번 더 읽어보세요.
자 다음으로 for반복문에서 알아야 할 부분이 한가지 더 있습니다.
문법에 보면, 원소그룹이라고 적어놓은 부분이 있습니다. 이 부분에는 어떤 것을 위치시키면 될까요?
아무거나 위치시키면 다 반복작업을 하는걸까요?
아닙니다. 원소그룹에 위치시킬 수 있는 자료형은 정해져있어요.
어떤 자료형을 위치시킬 수 있는지 알고 싶으면,,,,,,,,,,,,,,,,,,,,,,,,,,,어떻게 해야할까요?
원소그룹에 이것저것 넣어보면 되겠죠? 직접 넣어보고 프로그램이 잘 돌아가는지 확인해보면 되요.
이것 역시 절대 암기하지 마세요. 의미를 찬찬히 생각해보면 자연스럽게 어떤 자료형은 왜 입력할 수 없는지 이해하실 수 있어요.
일단 알고 있는 자료형 이것저것 막 넣어보겠습니다.
결과를 예상하면서 결과가 맞는지 보세요.
1) 문자 자료형
"abcdef"이 원소 그룹이 되고, 각각의 한글자가 원소가 됩니다.
반복문 수행 시, 각 원소가 item 변수에 저장이 되는 것을 볼 수 있습니다.
2) 숫자 자료형
'int' object is not iterable 이라는 에러가 발생했네요. 숫자 자료형은 반복문의 원소 그룹으로 사용할 수 없습니다.
'int' object는 숫자를 의미하고요, iterable 은 "반복문으로 사용가능한"이라는 의미입니다.
근데 is not 이니까 숫자는 반복문으로 사용할 수 없다. 라는 뜻이 되겠네요.
그냥 그런가보다 하고 넘기시고요, 숫자는 반복문에 사용할수 없다만 기억하세요.
3) 불리안 자료형
숫자형과 동일한 에러가 발생했죠?
'int' 만 'bool' 으로 바뀌었습니다.
역시, 내용은 동일하고요,
불리안 자료형은 반복문으로 사용할 수 없습니다.
4) 리스트 자료형
["1"~"4"] 가 원소 그룹이 되고,
각각의 값이 원소가 됩니다.
반복문으로 사용가능
5) 집합 자료형
{"1"~"4"} 가 원소 그룹이 되고,
각각의 값이 원소가 됩니다.
반복문으로 사용가능
6) 튜플 자료형
("1"~"4") 가 원소 그룹이 되고,
각각의 값이 원소가 됩니다.
반복문으로 사용가능
7) 사전 자료형
사전형의 키 값인 "key1", "key2" 가 원소 그룹이 되고,
각각의 값이 원소가 됩니다.
반복문으로 사용가능
사전형은 조금 특이하네요
결과를 보니, 아래와 같네요.
성공 : 문자형, 리스트형, 집합형, 튜플형, 사전형
실패 : 숫자형, 불리안형
숫자형, 불리안형 빼고는 모두 반복문의 원소그룹으로 사용할 수 있습니다.
원소그룹에서 각 반복문 수행시 하나의 원소를 추출하는 방법은 자료형에 따라 약간씩 차이가 있지만,
일단은 숫자형, 불리안형만 반복문으로 사용하지 못한다 라는 것을 알아두시기 바랍니다.
사실 생각해보면, 당연한거 같기도 합니다.
숫자 3이 그룹은 아니잖아요? 여기서 어떻게 원소를 하나씩 추출할 수 있을까요? 그냥 딱봐도 반복문으로 사용못할것 같습니다. 불리안도 마찬가지에요. True 라는 값 역시 그룹은 아니죠. 여기서 원소를 추출한다는건 말이 안됩니다.
python은 정말 컴퓨터 프로그래밍 언어이지만, 최대한 사람도 이해하기 쉽게 설계가 되어 있습니다. 우리가 상식적으로 생각하는 수준으로 구현이 되어 있어서 이해도 쉽고, 배우기가 쉽다고 하는 것이죠.
for반복문 끝!!!
자 다음은 while 반복문 입니다.
먼저 문법구조부터 살펴보면서 설명드릴게요
while 조건문 :
동작 수행
역시,,,, 엄청 간단하죠?
while 반복문은 조건문이 참이면 동작 수행 부분을 계속 수행합니다. 수행 도중에 조건문이 거짓이 되면 while 문이 종료됩니다.
예제를 한번 볼까요?
예제의 실행결과의 과정을 상세하게 아래 설명드릴게요.
처음에 count 변수의 값을 1로 저장해놓고, while 반복문으로 넘어갑니다.
조건문( count<10 )의 결과가 참(True) 이죠? 1은 10보다 작으니까요.
참이면, while 반복문 내부동작을 수행합니다.
먼저 print 함수를 이용해서 count 변수의 값을 출력하고요,
count = count + 1 구문으로 count 의 값을 1에서 2로 1증가 시킵니다.
while 문 내부 동작은 어디서부터 어디까지 실행해야할지 어떻게 알 수 있죠? 앞 강좌(조건문)에서 알려드렸듯이, 들여쓰기가 같은 부분이 연속되는 구간이 while반복문의 내부입니다. 소스를 보면 print함수 부분하고 count 1증가하는 부분이 들여쓰기가 똑같죠? 따라서 2개 문장이 while반복문의 내부이고, 2개문장만 수행을 하게 됩니다.
while 문 내부 동작이 완료되었으니, 다시 while 조건문 검사를 하게 됩니다. 반복문이니깐요. 반복을 하는것이죠
이전에 count 값을 1 증가시켰기때문에, 이번 조건문은 2<10 이 되겠죠? 역시 참(True)입니다. 그래서 또 while내부 동작을 쭉 수행하게 됩니다.
이렇게 수행을 하다가, 어느덧 count 값이 10 이 되면, 조건문이 10<10 이 되어 거짓(False)이 됩니다.
그러면 더이상 while반복문을 수행하지 않고, while 반복문 밖으로 빠져나와 다음 프로그램 문장을 실행하게 됩니다.
그래서 count가 1~9일때만 실행이 된거에요.
만약에 아래와 같이 실행하면 어떻게 될까요?
결과는.....
while의 조건문이 항상 True(참)이기 때문에, print함수가 계속~~~~~ 실행이 됩니다.
별다른 액션을 취하지 않는 이상 멈추지 않고 계속 실행됩니다. 이런걸 보고 무한루프에 빠졌다 라고 말하죠
프로그램이 무한 루프에 빠지면, 다른 동작을 아무것도 하지 못하게 됩니다. (Ctrl+C를 눌러서 강제로 프로그램을 종료시켜야만 합니다) 프로그래밍을 하실때 이런 부분은 유의하셔서 무한루프에 빠지지 않도록 "잘" 프로그래밍 하셔야 되요. 프로그래밍 하시면 생각보다 꽤 자주 겪게 될 문제이고, 다른 사람과 얘기할때도 자주 말하게 되는 부분이니 참고로 기억해두세요.
여기까지가 반복문이었습니다. 수고하셨습니다.
이장을 마치며....
수고했다고 그러더니, 할말이 남은거에요?
네^^. 이게 눈으로 보면, "오호, 그렇군, 별거 없네, 쉽네, 껌이네" 이렇지만, 막상 직접 프로그래밍을 해보면 잘 안됩니다.
이것이 바로 언어의 특징이죠. 눈으로 보면 이해가 되지만, 막상 써먹으려면 잘 안되요. 그래서 머리로 이해한 것을
손으로 직접 계속 사용해봐야 정말 내 것이 되고, 다양하게 응용하실 수 있습니다.
그런 차원에서 mini project 를 권장해드리고자, "숙제" 형식으로 문제를 하나 드릴게요.
제가 지금까지 알려드린 것이, 변수, 자료형, 조건문, 반복문 인데요, 이정도면 이제 슬슬 이것저것 만들어보실 수 있어요.
이쯤되면 프로그래밍 공부할 때 항상 나오는 숙제 있어요. 바로 "구구단 출력하기" 입니다.
아래와 같은 결과가 나올 수 있도록 프로그래밍 해보세요.
Hint #1)
숫자형을 문자형과 같이 print 함수로 호출할때에는 "+" 를 이용해서 출력하면 되고요,
숫자형은 문자형과 같이 출력할때에는 숫자형->문자형으로 변환을 해줘야만 합니다.
print함수 부분만 알려드릴게요. 아래와 같이 str(숫자형) 이렇게 하면 숫자형이 문자형으로 전환됩니다.
print(str(숫자형)+"문자형")
Hint #2)
반복문안에 동작 수행되는 부분에 또 반복문을 사용할 수 있어요.
for 반복문1 :
반복문1 에서 수행되는 문장 #1
for 반복문2 :
반복문2 에서 수행되는 문장 #1
반복문2 에서 수행되는 문장 #2
반복문1 에서 수행되는 문장 #2
반복문1 에서 수행되는 문장 #3
참고로, while반복문도 내부에 while반복문을 사용할 수 있습니다.
화이팅!
'왕초보를 위한 빠르게 훑어보는 파이썬' 카테고리의 다른 글
6.너와 나의 약속 (Python 함수) (3) | 2015.11.15 |
---|---|
4.이럴땐 이렇게, 저럴땐 저렇게 (Python 조건문) (1) | 2015.11.11 |
3.내 물건 좀 보관해줄래? (Python 변수) (7) | 2015.10.23 |
2.Python 첫 만남 (0) | 2015.10.22 |
1.프로그램이 뭐지? (3) | 2015.10.18 |