1. 캣의 로봇(for)1.1 for문의 기본 구조1.2 for, else1.3 지능형 리스트(list comprehension)1.4 다중인자 리스트 순회1.5 enumerate1.6 계산하는 로봇2. 캣의 로봇(while)2.1 무한반복 while, break2.2 while, else3. break3.1 break 문4. continue, pass5. else6. 중첩 반복문
1. 캣의 로봇(for)

캣의 생선회사는 어느덧 위니브 월드 전체에서 가장 빠르게 성장하는 생선회사가 되었습니다. 대부분의 스타트업이 그렇듯이 성장세에 일만하다 보니 높은 연봉에도 직원들의 불만이 늘어가고 있었습니다.
"자율성과 창의적 생각이 보장되고, 개인이 성장하면서, 각자 하는 일에 대한 명료한 목적과 동기부여를 줄 수는 없을까냥?"
캣은 어느새 대표다운 생각을 하고 있었어요. 매주 아침 하는 회의에서 캣은 말했습니다.
"생산성을 극대화 하면서도, 직원들의 휴식시간을 늘려줄 수 있는 로봇을 만들어보는 것은 어떨까냥?"
하지만 이미 불만이 가득차 있는 직원들은 냉담한 반응이었습니다.
"누가 만드냥!? 대표가 만드냥!?"
캣은 더이상의 회의가 무의미하다는 생각에 회의를 종료했습니다. 그리고, 정말 혼자 만들기 시작했어요.
"밤을 새서라도 다음주까지 만들겠다냥!"
- 라이캣의 상태창!
캣은 가용한 모든 자원, 알고 있는 모든 지식을 투입하기 시작했어요. 아래 코드를 봅시다.
우선 직원들이 가장 힘들어하는 고등어 포장 로봇을 만들기 시작했어요.
for
라는 강력한 프로그래밍 문법을 사용하였습니다.위 코드를 실행시키면 아래와 같이 출력됩니다.
위 코드처럼 정해진 횟수를 반복하는 것을 for문이라고 합니다. 코드를 조금 더 살펴보죠.
x
라는 변수를 선언하여 튜플 (1,2,3,4,5)
의 길이만큼 for문 아래에 있는 문장을 반복하게 됩니다. 또, 변수 x 는 튜플 요소의 값을 하나씩 가지게 되죠. 조금 어렵죠? 더 자세한 설명은 다음 챕터에서 하도록 하겠습니다.
1.1 for문의 기본 구조
위에서 배운 for문의 기본 구조를 더 자세하게 정리하고 넘어가도록 하겠습니다. for문은 순서열을 순회하며 순서열의 끝에 도달하면 반복을 멈추게 됩니다. 또한 객체를 처음부터 끝까지 하나씩 추출하며 순회하기 때문에 그 사용법이 쉬워 가장 많이 사용되는 반복문 입니다.
다음 챕터에서 배울 while은 비교할 변수를 먼저 선언 해주어야 하기 때문에, 비교적 for를 더 많이 사용합니다. 하지만 각자의 용법이 있어, 어느 문법이 좋다고는 할 수 없습니다!
위 코드를 실행시키면 아래와 같이 출력됩니다.
위의 코드를 실행하면 변수 x에는 튜플(1, 2, 3)의 요소가 순서대로 출력됩니다. 위 예제에서 튜플의 길이는 3이므로 for문은 반복을 3번 수행합니다. 여기서 x는 다른 언어처럼 초기화 하지 않아도 작동합니다.
for 문의 범위로 사용되는 것은 시퀀스 자료형 자료 또는 반복 가능한 자료형이어야 합니다.
- 반복문 순서도(Flow Chart) - for 문

1. String(문자열)을 범위로 지정한 예시
2. List(리스트)를 범위로 지정한 예시
3. Dictionary(사전)을 범위로 지정한 예시
위의 예제에서 Dictionary(사전)형 자료의 경우에는 key(키)만을 가져오게 됩니다.
key(키)에 해당하는 value(값) 또한 가져오고 싶다면 아래와 같이 튜플 언패킹을 사용할 수 있습니다.
위 코드를 실행시키면 아래와 같이 출력됩니다.
for문에서 가장 많이 사용되는 range에 대해 알아봅시다. range는 특정 범위를 생성하기 위해 사용할 수 있습니다.
range는 2.x에서는 선언하는 즉시 list가 되었으나 3.x으로 넘어오면서 range는 list로 변환해주어야 list가 됩니다. 이는 2.x에서 썼었던 xrange와 같은 함수입니다.
range 함수는 연속하는 수열을 만듭니다.
range(시작_값, 종료_값, 연속하는_두_수의_차)
형식으로 선언되며 아래 예제를 보며 자세히 설명해 드리도록 하겠습니다.range(start, stop, step)으로 주요 표현합니다. 어디서 많이 보았던 형식이죠? 바로 슬라이싱에서 보았던 형식입니다.
시작 값 : 0, 종료 값 : 5, 연속하는 두 수의 차 : 1
시작값 0과 멈춤값 5 사이의 연속하는 두 수의 차 1을 가지고 있는 요소들이 생성되었습니다. 생성된 range의 마지막 요소가 멈춤값보다 한 단계 작다는 사실에 주의하세요.
시작 값 : 0, 종료 값 : 10, 연속하는 두 수의 차 : 2
시작 값 0과 종료 값 10 사이의 연속하는 두 수의 차 2를 가지고 있는 요소들이 생성되었습니다.
생성된 range의 마지막 요소가 종료 값보다 한 단계 작다는 사실에 주의하세요. range()함수의 마지막 매개변수인 연속하는 두 수의 차는 생략할 수 있습니다. 생략할 시 연속하는 두수의 차는 1입니다.
시작 값 : 0, 종료 값 : 5, 연속하는 두수의 차 : 생략
위 코드를 실행시키면 아래와 같이 출력됩니다.
마지막 매개변수인 연속하는 두 수의 차를 생략하고 range()함수를 호출하였습니다. 이 경우 range()함수의 마지막 매개변수인 연속하는 두 수의 차는 1이 됩니다.
시작 값 : 생략, 종료 값 : 5, 연속하는 두 수의 차 : 생략
또한 range() 함수는 종료 값만을 입력하여 호출할 수 있습니다. 종료 값만 입력했을 시에는 시작값은 0이 되며 두 수의 차는 1이 됩니다.
시작 값 : 10, 종료 값 : 5, 연속하는 두 수의 차 : -1
연속하는 두 수의 차를 마이너스로 둘 수도 있습니다. 이 경우 시작 값과 종료 값 보다 크게 주셔야 한다는 점도 기억해주세요.
좀 더 알아볼까요? 얕은물에서 할 내용은 아니니 가볍게 읽고 넘어가주세요. for 문에 사용될 수 있는 시퀀스형 자료는 문자열, 리스트, 튜플이 있습니다. 이 자료형은 메서드로 __iter__와 __next__를 가지고 있으며 이 두개의 메서드로 순회가 가능하게 합니다.
이는 아래와 같이 iter()함수와 next()함수로도 실행을 할 수 있습니다.
위 결과값은 아래와 같습니다.
1.2 for, else
위 코드를 실행시키면 아래와 같이 출력됩니다.
위 코드를 실행시키면 아래와 같이 출력됩니다.위 코드를 실행시키면 아래와 같이 출력됩니다.
if문 뿐만 아니라 for에서도 else를 사용할 수 있습니다. else는 루프가 정상 종료되었을 때, 처음부터 자료형이 비어있었을 때 실행됩니다. break문을 만나면 else 문을 실행하지 않고 빠져나옵니다.
1.3 지능형 리스트(list comprehension)
얕은물에서는 가볍게 이런 것이 있다는 것만 알고 넘어가도록 하겠습니다. 가장 많이 사용되는 list 생성 기법입니다. 'list comprehension'은 한국어로 표현할 때 리스트 표현식, 지능형 리스트로 번역이 되곤 합니다.
위 코드를 실행시키면 아래와 같이 출력됩니다.
1.4 다중인자 리스트 순회
위 코드를 실행시키면 아래와 같이 출력됩니다.
위 코드를 실행시키면 아래와 같이 출력됩니다.
1.5 enumerate
enumerate는 순서를 매길 때 사용합니다. 각각의 스킬들을 습득한 순서대로 출력하고 싶어요. 그럼 어떻게 출력을 해줄 수 있을까요? enumerate는 별도의 변수를 선언하지 않고 이것이 가능하게 해줍니다.
위 코드를 실행시키면 아래와 같이 출력됩니다.
1.6 계산하는 로봇
캣은 로봇을 이용해서 '고등어 포장' 보다 조금 더 어려운 '카운터 보기'를 맡기기로 했어요. 손님께 생선 몇 개를 구매하실 건지 여쭤보고 그 갯수에 맞는 금액을 출력할 수 있는 로봇을 만들었어요.
위 코드를 실행시키면 아래와 같이 출력됩니다.
고등어를 몇 개 구매할 건지 input() 명령어를 통해 손님께 여쭤보고, 그 갯수에 가격을 곱해서 출력을 해주도록 만들었습니다.
2. 캣의 로봇(while)
금방 배웠던 for문을 이용해서 로봇을 만들면 정해진 숫자에서 종료되기 때문에, 생선이 더 있거나 손님이 더 있어도 로봇이 꺼지기 때문에 로봇을 다시 시작해줘야 한다는 단점이 있었어요.
그래서 캣은 while문을 활용하여 영업이 종료되거나 생선이 다 팔릴 때까지 작동을 하는 로봇을 만들기로 했습니다.
우선 간단하게 while 문을 살펴보도록 해요.
while문은 조건이 참인 동안에 명령을 반복해서 수행합니다. 반복할 명령은 들여쓰기로 구분되며 조건이 거짓이면 들여쓰기로 구분되어 있는 반복 구문을 탈출합니다.
위의 예제에서 9를 출력하고 마지막 a+=1이 연산(할당연산)되면 a=10이 되어 조건이 거짓이 되므로 루프를 탈출 합니다. 다음 a의 값이 10이 된다는 것 잊지 마세요.
- 반복문 순서도(Flow Chart) - while 문

2.1 무한반복 while, break
그럼 이제 생선이 다 팔리면 로봇이 종료되도록 만들어볼까요? 현재 고등어는 5개가 남았고, 고등어가 0개가 된다면 다 팔았다는 말과 함께 while문을 종료하고 싶어요.
위 코드를 실행시키면 아래와 같이 출력됩니다.
while 문의 조건을 부분에 bool형인 True가 오게 하면 반복문은 무한 반복되게 됩니다. 무한 반복이 일어나면 프로그램이나 서비스가 죽는 사태가 발생되기 때문에 조건을 탈출할 수 있는 구문을 중간에 입력하거나 메모리 공간을 확보할 쉬는 시간을 주어야 합니다. 여기서는 break 문으로 조건을 탈출하도록 설계하였습니다.
2.2 while, else
위 예시와 똑같은 문장을 else문으로도 만들어 볼 수 있어요. 여기서 주석 처리된 부분을 풀어보시고 주석이 될 때와 되지 않을 때를 비교해보세요.
위 코드를 실행시키면 아래와 같이 출력됩니다.
else문은 다양하게 활용(특히 if문에서)됩니다. while문에서 else는 루프가 정상 종료되었을 때와 처음부터 while의 조건문이 False일 경우 실행됩니다. 위 두번째 예제에서 a==5인 경우 break문을 만나면 else 문을 실행하지 않고 빠져나옵니다.
3. break
break는 흐름을 끊어 중단할 때 사용합니다. 특정 코드를 반복하고자 for, while 문을 이용하여 반복문(loop)을 만들었다면 break 문을 사용하여 반복문을 중단할 수 있습니다. 여기서 주의하셔야 할 점은 이 break 구문은 바로 위의 for나 while문만 탈출한다는 것입니다!
반복문(loop) 순회 중에 break 문을 만나면 반복문의 내부 블록을 벗어나게 됩니다. 그러나 예제 1번과 같이 어떠한 장치 없이 break를 넣으면 반복문이 반복하지 않으므로 예제 2번과 같이 주로 조건 안에 넣어 실행합니다.
- 순서도(Flow Chart) - while, break 문

- 순서도(Flow Chart) - for , break 문

3.1 break 문
위 코드를 실행시키면 아래와 같이 출력됩니다.
반복문이 실행되다 시간이 지나 현재 시간과 종료 시간이 같아지는 경우 영업을 종료한다는 메시지를 출력 후 break 문을 통하여 반복문을 빠져나갑니다.
반복문을 빠져나가자 반복문이 중단되어 더 이상 실행되지 않으므로 시간이 지나가지 않습니다.
앞서 말씀드린 것처럼, 중첩 반복문에서 바로 위에 반복문만 탈출하는 경우를 살펴보도록 하겠습니다. 아래의 경우 각 단의
i X 5
까지만 실행이 됩니다.4. continue, pass
continue의 사전적 의미를 살펴보면 '계속하다'라는 뜻이 있습니다. 파이썬에서 continue문은 반복문이 실행하는 코드 블록의 나머지 부분을 실행하지 않고 다음 반복으로 건너가게 흐름을 조정합니다.
pass의 사전적 의미는 '지나치다'라는 뜻이며, 파이썬에서 pass문은 단순히 실행할 코드가 없다는 것을 의미하며 아무런 동작을 하지 않고 다음 코드를 실행합니다.
continue와 pass는 구분해서 사용을 해야 하니 차이점을 잘 정리해 두세요.
반복문 순회 도중 continue문을 만날 시 continue문은 이후의 나머지 반복문 내부 코드 블록을 실행하지 않고 다음 아이템을 선택하여 반복문의 내부 코드 블록 시작 부분으로 이동합니다.
break와 마찬가지로 예제1과 같이 조건이 없이 continue를 사용하는 것은 큰 의미가 없으므로 주로 예제2처럼 조건문을 달아 사용합니다.
- 순서도(Flow Chart) - while, continue 문

- 순서도(Flow Chart) - for, continue 문

위 코드를 실행시키면 아래와 같이 출력됩니다.
1개도 구매하지 않았을 경우 if의 조건이 참(True)이 되어 continue문을 실행합니다.
따라서 나머지 코드블록인 구매개수와 가격을 출력해주는 print문을 실행하지않고 다시 for 반복문의 내부 코드블록 시작부분으로 돌아갑니다.
여기서 continue라고 되어 있는 부분을 pass로 바꾸면 수험번호 1005번의 58점도 출력하는 것을 볼 수 있습니다. 반복 중간에 continue를 만나면 다음 반복으로 넘어가지만 pass를 만나면 그 라인만 지나치고 아래 문장을 그대로 실행합니다.
위 코드를 실행시키면 아래와 같이 출력됩니다.
5. else
앞서 살펴본 것처럼 Python에서는 while, for 문에서도 else문을 사용할 수 있습니다. 여기서의 else는 if에서의 else처럼 '그렇지 않으면'이라는 의미 보다는 '그런 다음'이라는 의미가 더 강하기 때문에 than으로 쓰여야 된다는 논의가 있기도 했습니다.
- else문 순서도(Flow Chart) - while문

- else문 순서도(Flow Chart) -for문

반복문이 break 등에 의해 중단없이 정상적으로 반복이 종료된 후 특정 코드를 실행하게 해야할 때 while~else, for~else를 사용할 수 있습니다.
위 코드를 실행시키면 아래와 같이 출력됩니다.
위 코드를 실행시키면 아래와 같이 출력됩니다.
위 코드에서 1번 예제처럼 break문 없이 정상 종료되었을 때에는 else문이 실행됩니다. 그러나 2번 예제처럼 break문이 있을 경우에는 else문을 실행하지 않게 됩니다.
if문에서 else는 '그렇지 않으면'이라는 의미로 조건이 거짓일 때 쓰입니다.
위 코드를 실행시키면 아래와 같이 출력됩니다.
try~except~else문에서 else는 예외가 발생하지 않을 때 쓰입니다.
위 코드를 실행시키면 아래와 같이 출력됩니다.
6. 중첩 반복문
반복문 내부에 또 다른 반복문이 있을 경우, 중첩되었다고 얘기합니다. 중첩 반복문이란 반복문 안에 반복문이 들어가 중첩된 것을 얘기합니다. 중첩 반복문에서는 종료되는 값을 항상 확인하세요.
위 코드를 실행시키면 아래와 같이 출력됩니다.
구구단은 2단부터 시작하기에 변수 i를 2로 설정해줍니다. 9단을 수행한 후 종료할 수 있도록 10미만이라는 조건을 설정해주었습니다. i는 구구단의 단을, k는 순차적으로 반복될 곱의 수이며 while문을 하나 더 이용하여 반복될 곱의 수를 1씩 순차적으로 더해주었습니다.
여기서 중요한 것은 종료되는 값입니다. k가 10이 된 상태로 안에 반복문이 종료되기 때문에 3단을 하기 위해서는 다시 k를 1로 초기화 시켜주어야 합니다.
for문과 range 함수를 이용하면 좀 더 간단하게 구구단을 출력할 수 있습니다.
위 코드를 실행시키면 아래와 같이 출력됩니다.
for문을 중첩 사용하면 좀 더 간결하고 직관적인 코드를 작성할 수 있습니다.
첫 번째 for문에서 range 함수를 이용하여 2단부터 10단까지 차례로 i에 대입됩니다. 두 번째 for문에서 곱해지는 수를 k에 넣고 구구단을 출력하고 있습니다.
while과 달리 k의 값이 for문 안에서 자동으로 초기화가 되기 때문에 while문처럼 k=1을 두 번째 for문 위에 넣을 필요는 없습니다.