1. 제어문

 

학생이 아침마다 등교하는 것은 반복적인 일에 해당하고, 날짜에 따라 주말이나 공휴일은 학교를 가지 않는 것은 조건에 따라 이루어지는 일에 해당한다. 컴퓨터의 프로그램 역시 흐름에 따라 특정 조건에 따라 실행하거나 특정 부분을 반복적으로 실행하도록 이루어진다. 그것이 제어문이다. Python에서는 if, for, while문 등의 제어문이 있다.

 

2. if

 

 

1) 단순 if문

 

if문은 어떤 조건에 따라 코드를 다르게 수행하는 조건문이다. 다음과 같은 문장이 조건문의 예시다. “키가 140cm 보다 크면 탑승 가능합니다. 키가 140cm 보다 작으면 탑승 불가합니다.” 흔히 놀이공원에서 많이 볼 수 있는 문장이다.

 

Python에서는 위와 같은 문장을 if라는 단어로 조건문을 표현할 수 있다. if문을 이용해 앞에서 예로 든 문장을 Python으로 표현하면 다음과 같다.

 

 

첫 문장이 실행되면 height라는 변수가 150이라는 값을 가지게 된다. 두 번째 문장이 실행될 때 if문의 조건에 해당하는 'height > 140'에 대해 참/거짓을 판단한다. height 변수는 140보다 크기 때문에 조건식은 참이 된다. if문의 조건식이 참이므로 'print("Available")'이라는 문장이 실행되어 'Available'이 출력된다.

 

참고로 C/C++과 같은 프로그래밍 언어에서는 수행되는 코드 블록을 { }로 표현하지만, Python에서는 들여쓰기를 통해 코드 블록을 표현한다.

 

2) elif가 포함된 if문

 

단순 if문을 사용하면 if문 뒤의 조건식의 참/거짓에 따라 하나의 코드 블록을 실행하게 된다. 그러나 실행할 경우가 2개 보다 많을 때는 elif를 통해 표현할 수 있다. “학점이 4.3이라면 A+, 그렇지 않고 학점이 4.0이라면 A0, 그렇지 않고 학점이 3.7이라면 A-, 그렇지 않으면 A는 아니다.”

 

이 문장을 elif로 표현을 하면 다음과 같이 코드를 작성할 수 있다.

 

 

위 코드 첫 문장에서 grade라는 변수가 4.0이라는 값을 가지게 된다. 두 번째 문장에서 'grade == 4.3'에 대해 참/거짓을 판단한다. grade 변수는 4.3이 아니므로 조건식은 거짓이다. 그러므로 아래 elif 조건식으로 이동해 ‘grade == 4.0’에 대한 참/거짓을 판별한다. 이 조건식은 참이므로 'print("A0")'라는 문장이 실행되어 'A0'이 출력된다.

 

3) 중첩 if문

 

if문은 단순히 하나만 사용할 수 있는 것이 아니라 중첩해서 여러 개 사용할 수 있다. if문 뒤의 조건식의 참/거짓에 따라 참이 되면 다음 붙어있는 if문의 조건식을 판별할 수 있다는 것이다.

 

 

위 코드의 첫 문장에서 dust라는 변수가 110이라는 값을 가지게 된다. 두 번째 문장이 실행될 때 'dust > 80'에 대해 참/거짓을 판단한다. dust변수는 80보다 크므로 조건식이 참을 만족한다. 그러므로 다음 if문으로 이동해 ‘dust < 150’이라는 조건식으로 이동해 ‘dust < 150’에 대한 참/거짓을 판별한다. 이 조건식도 참이므로 'print("나쁨")'라는 문장이 실행된다. 그래서 '나쁨'이 출력된다.

 

3. while문

 

 

1) 단순 while문

 

while문은 특정 조건을 만족하는 동안 작업을 수행하는 반복문이다. 다음과 같이 1부터 10까지의 합을 구한 값을 화면에 출력하는 간단한 예시가 있다.

 

 

먼저 num이라는 변수가 초기 값으로 1, hap이라는 변수가 초기 값으로 0을 갖는다. while문의 조건문인 ‘num <= 10’이 있는데, num10보다 작거나 같으므로 해당 조건을 만족한다. 조건문이 참이므로 while문의 문장을 순서대로 실행한다. , ‘hap = hap + num’이라는 문장이 실행되고 'num = num + 1'이라는 문장이 실행된다. 그러면 num이 가지는 값은 0에서 1로 바뀌게 된다.

 

while문에 속한 모든 문장이 수행되면, 다시 while문의 조건문으로 이동해서 조건식을 다시 판단한다. 이번에도 num이라는 변수는 10보다는 작거나 같은 값이므로 while문에 있는 문장을 수행하게 된다. 이렇게 num라는 변수의 값이 10일 때까지 while 문 내부의 문장을 순서대로 수행한다. num11이 되면 더 이상 조건식을 만족하지 않기 때문에 while문을 실행하지 않고 빠져나오게 된다. 마지막으로 while문 내에서 구해진 값 hap이 출력되어 45라는 값을 가진 것을 확인할 수 있다.

 

2) 무한 루프

 

while문으로 어떤 작업을 수행하다가 특정 조건을 만족할 때 반복문 자체를 빠져나와야 할 때가 있다. 예를 들어, 자판기의 제품이 하나씩 팔리다가 모두 팔리게 되면 판매를 중단해야 하는 경우가 이에 해당한다.

 

먼저 프로그램을 계속해서 실행하게 하려면 while문의 조건이 항상 참이 되도록 만들어 계속 실행하게 하면 된다. 그러면 while문의 문장을 실행하고 다시 조건을 판단할 때 계속 참이 되므로 while문 내의 코드가 무한히 실행되는 것이다.

 

이처럼 무한히 실행되는 반복문을 무한 루프라고 한다. 다음 코드처럼 간단히 작성할 수 있다.

 

 

이 코드를 실행하면 계속해서 '1‘이 출력된다.

 

3) break가 포함된 while문

 

Python의 반복문(while문 또는 for)이 무한 루프 상태에 빠지지 않기 위해 break를 사용하면 된다. 위에서 예시로 제시한 판매와 관한 것을 코드로 작성해서 break를 넣게 되면 break를 만나는 순간 해당 위치에서 반복문을 빠져나오게 된다.

 

 

먼저 stocks 변수가 3을 갖고, while 문의 조건식을 판단한다. 조건식은 True이기 때문에 언제든 참으로 판단한다. 만약 while문 내에 break가 없다면 무한 루프에 빠지게 된다. 참고로 조건식에 0이 아닌 다른 숫자가 있으면 모두 참으로 판단한다.

 

일단 while문의 조건이 참이므로 while문의 코드가 실행된다. 따라서 먼저 ‘stocks > 0’이라는 조건식의 판별이 이루어진다. 이는 참이므로 화면에 '3 left'라고 출력된다. 그 다음 stocks 변수는 3에서 1을 뺀 2를 갖게 된다. 이렇게 stocks0보다 큰, 1일 때 까지 if문의 참에 대한 내용을 수행한다. stocks0이 되면 ‘sold out’을 출력하고 break를 만나게 된다.

 

위에서 설명한 것처럼 breakwhile문을 빠져나가게 하므로 더 이상 코드가 실행되지 않는다.

 

4) continue가 포함된 while문

 

while문과 같은 반복문에서 break를 사용하면 반복문 전체를 빠져나오게 된다. 그런데 반복문 전체가 아니라 해당 조건만 건너뛰고 싶을 때가 있다. 홀수는 세지 않고 짝수만 세는 경우와 같은 것을 의미한다. 이럴 때는 continue를 사용하면 된다.

 

 

우선 odd라는 변수는 1을 갖는다. while문의 ‘odd < 11’ 조건을 만족하니 odd 값이 1 증가한다. 그리고 ‘odd % 2 ! = 0’의 참/거짓을 판별한다. 이 문장은 ‘odd의 나머지가 0이 아니다를 의미한다. , ‘odd는 홀수다라는 것이다. 홀수가 아니므로 if문을 실행하지 않고 ‘print(odd)’가 실행되어 2가 출력된다.

 

그 다음 다시 while문 처음으로 이동해 odd1을 증가해 odd3이 된다. 이번에 if문은 참을 만족하므로 continue라는 것을 만나게 된다. 그러면 그 이후의 문장인 ‘print(odd)’를 실행하지 않고 while문을 빠져나가는 것이 아니라 다시 while문 처음으로 이동하게 된다. 이런 방식으로 odd11이 작을 때 까지 while문을 실행한다. 그러면 결과로 11보다 작은 짝수가 모두 출력된 것을 확인할 수 있다.

 

4. for

 

 

1) 단순 for문

 

Python에서는 while문 말고도 for문도 반복문으로 사용할 수 있다. while문은 특정 조건을 만족하면 수행한다. 그런데 for문은 반복 횟수가 미리 정해진 것에서 while문과 차이를 가진다. while문에서 사용한 것처럼 1부터 10까지의 합을 출력하는 예시다.

 

 

range를 이용하면 정수 범위를 간단히 표현할 수 있다. range(11)0부터 10까지의 정수 범위를 의미한다. num이라는 변수가 0부터 10까지의 값을 가지면서 hapnum을 더하게 된다. while문과 같이 결과는 동일하게 출력된다. 위와 같이 프로그래밍을 하면서 for문과 while문의 결과가 같을 경우 둘 중 사용하기 편한 것을 사용하면 된다.

 

2) 중첩 for문

 

for문 역시 중첩해서 사용할 수 있고, 중첩의 제한은 없다. 중첩 for문의 대표적인 예시가 구구단 출력이다. 다음은 range를 이용해서 구구단을 출력한 것이다.

 

 

우선 변수 x2부터 9까지, 변수 y1부터 9까지를 가진다. x는 곱하는 수, y는 곱해지는 수라는 의미다. for문이 실행되면 i2부터 9까지, j1부터 9까지 순차적으로 가지게 된다. 2단부터 9단까지 Ij가 곱해진 결과가 한 줄씩 출력된다.

 

위처럼 range의 시작과 끝을 정하려면 range(시작 숫자, 끝 숫자)로 하면 되고 끝 숫자는 포함되지 않는다.

 

5. 복합문

 

for문에서는 전체 구구단을 출력했다면, 복합문에서는 조건에 적합할 때만 출력되도록 한다.

 

 

변수 num이 1로 설정되고 while문이 True이므로 항상 실행한다. 그 다음 num 값을 input을 통해 입력받는다. 만약 num이 1부터 9사이의 숫자를 받으면 해당하는 구구단을 출력하고 continue를 만나 다시 num을 입력받는다. 다른 숫자를 입력받으면 'quit'를 출력하고 break를 만나서 종료된다. 

 

출력을 해보면 다음과 같다.

3을 입력받으면 3단 출력, 5를 입력받으면 5단 출력, 10을 입력받으면 'quit'를 출력하고 종료한다.

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기