Python For문 / While문

노광오·2020년 6월 4일
0

Python

목록 보기
8/13

For문

for문은 리스트, 튜플, 문자열 등의 자료형의 요소들이 처음부터 마지막까지 차례대로 변수에 대입되어 수행할 명령들이 반복적으로 수행되는 것입니다.

for문의 기본 구조

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

range 함수

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

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

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

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

List comprehension 사용하기

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

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

이것을 리스트 내포를 사용하면 다음과 같이 간단히 해결할 수 있다.

만약 [1,2,3,4] 중에서 짝수에만 3을 곱하여 담고 싶다면 다음과 같이 리스트 내포 안에 "if 조건"을 사용할 수 있다.

"if 조건" 부분은 앞의 예제에서 볼 수 있듯이 생략할 수 있다.

Break

for 구문에서는 리스트가 가지고 있는 요소의 수 만큼 for 구문에 속해있는 코드를 실행합니다.
이걸 iteration 이라고 합니다. 만일 리스트가 5개의 요소를 가지고 있으면 5 iterations 이라고 합니다.
즉 5번 반복한다는 뜻이죠. 그래서 for loops를 한국어로 for 반복구문 이라고 하기도 합니다.
그런데 가끔은 중간에 도중하차(?) 하고 싶을때가 있습니다. 굳이 끝까지 for 구문을 진행할 필요 없이 중간에서 멈추고 싶을때는 break 문을 사용하면 됩니다. For 구문에서 break 문이 실행되면 다음 interation으로 넘어가지 않고 for 구문에서 빠져 나오게 됩니다.

Continue

만일 break처럼 for 구문에서 완전히 빠져 나오고 싶지는 않지만 다음 요소, 즉 다음 interation으로 넘어가고 싶을때는 continue 문을 사용하면 됩니다.

Nested For Loops

if 구문과 마찬가지로 for 구문도 nesting이 가능합니다.

While 문

while문은 조건문이 참인 동안에 while문 아래의 문장이 반복해서 수행된다.
반복해서 문장을 수행해야 할 경우 while문을 사용한다. 그래서 while문을 반복문이라고도 부른다.

while문 기본 구조

  • "열 번 찍어 안 넘어가는 나무 없다"는 속담을 파이썬 프로그램으로 만든다면 다음과 같이 될 것이다.

위 예에서 while문의 조건문은 treeHit < 10이다. 즉 treeHit가 10보다 작은 동안에 while문 안의 문장을 계속 수행한다.
whlie문 안의 문장을 보면 제일 먼저 treeHit = treeHit + 1로 treeHit 값이 계속 1씩 증가한다. 그리고 나무를 treeHit번만큼 찍었음을 알리는 문장을 출력하고 treeHit가 10이 되면 "나무 넘어갑니다."라는 문장을 출력한다.
그러고 나면 treeHit < 10조건문이 거짓이 되므로 while문을 빠져나가게 된다.

다음은 while문이 반복되는 과정을 순서대로 정리한 표이다.

Break

while문은 조건문이 참인 동안 계속해서 while문 안의 내용을 반복적으로 수행한다. 하지만 강제로 while문을 빠져나가고 싶을 때가 있다.
커피 자판기를 예로 들면 자판기 안에 커피가 충분히 있을 때에는 동전을 넣으면 커피가 나온다. 그런데 자판기가 제대로 작동하려면 커피가 얼마나 남았는지 항상 검사해야 한다.
만약 커피가 떨어졌다면 판매를 중단하고 "판매 중지" 문구를 사용자에게 보여주어야 한다.
이렇게 판매를 강제로 멈추게 하는 것이 바로 break문이다.

다음 예는 커피 자판기 이야기를 파이썬 프로그램으로 표현해 본 것이다.

money가 300으로 고정되어 있으므로 while money: 에서 조건문인 money는 0이 아니기 때문에 항상 참이다. 따라서 무한히 반복되는 무한 루프를 돌게 된다. 그리고 while문의 내용을 한 번 수행할 때마다 coffee = coffee - 1에 의해서 coffee의 개수가 1개씩 줄어든다. 만약 coffee가 0이 되면 if coffee == 0: 문장에서 coffee == 0:이 참이 되므로 if문 다음 문장 "커피가 다 떨어졌습니다. 판매를 중지합니다."가 수행되고 break문이 호출되어 while문을 빠져나가게 된다.

  • 만약 코드에 break문을 사용하지 않았는데 무한 루프에 걸렸을 경우에는 ctrl + c 를 누르면 무한루프에서 탈출할 수 있다.

continue

while문 안의 문장을 수행할 때 입력 조건을 검사해서 조건에 맞지 않으면 while문을 빠져나간다. 그런데 프로그래밍을 하다 보면 while문을 빠져나가지 않고 while문의 맨 처음(조건문)으로 다시 돌아가게 만들고 싶은 경우가 생기게 된다. 이때 사용하는 것이 바로 continue문이다.

1부터 10까지의 숫자 중에서 홀수만 출력하는 것을 while문을 사용해서 작성한다고 생각해보자. 어떤 방법이 좋을까?

위 예는 1부터 10까지의 숫자 중 홀수만 출력하는 예이다. a가 10보다 작은 동안 a는 1만큼씩 계속 증가한다. if a % 2 == 0 (a를 2로 나누었을 때 나머지가 0인 경우)이 참이 되는 경우는 a가 짝수일 때이다. 즉 a가 짝수이면 continue 문장을 수행한다. 이 continue문은 while문의 맨 처음(조건문: a<10)으로 돌아가게 하는 명령어이다. 따라서 위 예에서 a가 짝수이면 print(a)는 수행되지 않을 것이다.

0개의 댓글