Stargazer

[Python] 모두가 쉬운 파이썬 - 제어문 본문

프로그래밍/Python

[Python] 모두가 쉬운 파이썬 - 제어문

COM2IT 2021. 1. 11. 23:53
반응형

안녕하세요? COM2IT 입니다.

 

오늘은 제어문에 대해 배워 보겠습니다.

(IDLE을 열어서 직접 실습이 가능합니다)

 


제어문이란?

 

제어문 조건문, 반복문, 분기문 3가지로 나눌 수 있습니다.

 

조건문은 조건에 따라서 실행하는 코드를 다르게 합니다.

 

예를 들면, "내가 배고프면 밥을 먹고, 그렇지 않으면 간식을 먹어라." 라는 문장은 조건문이라고 볼 수 있습니다.

"배고프면"이라는 조건에 따라, 만족하면 '밥먹기'를 실행하고, 만족하지 않으면 '간식 먹기'를 실행합니다.

 

반복문은 어떤 조건을 만족하면 반복합니다.

 

예를 들면, "내가 1.5L 물통을 채우고 있다. 1.5L가 다 찼으면 가지고 나가고, 그렇지 않으면 계속 채운다."라는 문장이 있을 때, "물을 채울 때 까지 반복한다" 는 반복문에 해당 할 수 있습니다.

 

분기문은 코드 중간에 조건에 따라 코드 흐름을 바꿀 때 사용합니다.

 

위에 예시 처럼 "내가 1.5L 물통을 채우고 있다. 1.5L가 다 찼으면 가지고 나가고, 그렇지 않으면 계속 채운다."라는 문장이 있을 때, "1.5L가 다 찼으면" 이라는 조건을 만족하면 "물을 채우는 행위"에서 벗어날 수 있습니다. 이때 벗어나게 하는 명령이 분기문입니다. (계속해라 또는 벗어나라)

 

 

이걸 한번 코드로 변환 해 보겠습니다.

 

1
2
3
4
5
6
아래를 무한 반복하라
    물통을 채운다
    만약 물통 물이 찼는가?
        반복을 그만하라
    아니라면    
        돌아가서 계속하라
cs

 

이걸 파이썬 문법에 맞춰 작성하면 다음과 같습니다.

 

1
2
3
4
5
6
while True:
    물통채우기()
    if 물의 양 >= 1.5 :
        break
    else
        continue
cs

 

이렇게 사람이 논리를 쉽게 파악할 수 있게 문법에 맞게 대략적으로 짠 코드를 pseudo code(의사 코드)라고 합니다.

위와 같은 코드를 짤 때, 코드의 흐름의 변경이 필요함을 느낍니다.

이럴때 필요한 게 바로 제어문입니다.

 

이제 제어문에 대해 하나하나 배워 보도록 하겠습니다.

 


조건문

 

조건문은 if, elif, else 로 표현할 수 있습니다.

if는 "만약 조건이 만족한다면" 이라는 뜻이고

elif는 "이전 조건은 만족하지 않고, 이번 조건은 맞다면'이라는 뜻이고(else if)

else는 "위 조건이 모두 만족하지 않다면" 이라는 뜻입니다.

 

if문의 기본구조

 

if 조건문: 
	명령어
    
elif 조건문:
	명령어
    
else:
	명령어
   

예약어 + 조건문 + :(클론) 의 구조로 되어 있고

if문 내의 명령들은 tab으로 들여쓰기 되어있습니다.

이전에 말씀드렸지만 들여쓰길 하지 않으면 어디 부터 어디까지가 해당 구문에 해당하는지 알 수 없기 때문에 오류를 발생하므로, 꼭 if문을 사용할때는 들여쓰기를 확인하시길 바랍니다.

 

조건문의 형태는 크게 4가지가 있습니다.

 

  1.  단일 if문
  2.  if~else문
  3.  if~elif문
  4.  if, elif, else 문

예시를 보도록 하죠.

 

1.단일 if 문

1
2
3
4
5
6
7
8
9
10
11
>>> a = 1
>>> if a == 2:
    print("a is 2")
 
    
>>> if a == 1:
    print"a is 1")
 
    
is 1
>>> 
cs

위를 보면 a=1 이기 때문에 첫번째 if문에서는 실행이 안되고, 두번째 if문에서 실행이 된 모습입니다.


2. if~else 문

1
2
3
4
5
6
7
8
9
>>> a = 1
>>> if a==3:
    print("a is 3")
else:
    print("a is not 3")
 
    
is not 3
>>> 
cs

if문이 만족하지 않을때는 else 구문을 실행시킵니니다.

 

3. if~elif 문

1
2
3
4
5
6
7
8
9
>>> a =1
>>> if a== 1:
    print("a is 1")
elif a==2:
    print("a is 2")
 
    
is 1
>>> 

cs

다른 조건식을 쓰고 싶다면 elif를 사용합니다.

 

4. if~elif~else 문

1
2
3
4
5
6
7
8
9
10
11
12
>>> a =1
>>> if a == 1:
    print("a is 1")
elif a == 2:
    print("a is 2")
elif a == 3:
    print("a is 3")
else:
    print("a is not in [1,2,3]")
 
    
is 1
cs

if, elif, else 문을 조합한 예제입니다.

 

각각의 차이를 설명하겠습니다.

 

우선 단일 if문 2개와 if~elif문의 차이가 무엇일까요?

if문으로 2번 비교하는거랑 if, elif를 써서 비교하는 건 경우에 따른 비교횟수에서 차이가 발생합니다.

 

일단 if문을 2번쓰게되면 컴퓨터는 어떤 경우에도 2개를 다 실행해야합니다.

반대로 if elif문은 if문에서 조건식이 만족하면 그 뒤에 있는 elif 문의 조건식은 조사하지 않습니다.

따라서 위 예제들로 따지면 단일 if문은 2번 비교 실행을 했고, if elif 에서는 if문에서 이미 조건식이 충족하므로 a==2 를 비교하는 명령을 실행하지 않고 만족한 조건문을 실행 후 탈출합니다.

 

그리고 if elif문과 if else의 차이는  만족하는 조건이 없을때 차이가 발생합니다.

if elif문 같은 경우는 조건문에서 실행하는 것이 없는 반면, if else는 조건 만족하지 않으면 else문에 있는 명령들을 실행합니다.

 

 


반복문

 

반복문은 특정 구문을 조건이 만족하는 동안 반복해서 실행시키는 구문입니다.

반복문의 종류는 while과 for문이 있습니다.

 

  1. while문
  2. for문

기본구조는 다음과 같습니다.

while 조건식:
	명령어

for 변수 in 반복 가능한 자료형(리스트, 튜플, 문자열 등):
	명령어

while문은 조건식이 만족하면 명령을 반복하고,

for문은 반복가능한 자료형에서 하나씩 값을 가지고 와서 지정한 변수에 저장하고, 반복가능한 자료형이 모두 소진될때 까지 반복합니다.

 

제가 0부터 9까지 출력하는 프로그램을 만든다고 가정해봅시다.

각 구문을 이용해서 구한 예제를 봅시다.

 

while문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> a = 0
>>> while a < 10:
    print("a is " + str(a))
    a+=1
 
    
is 0
is 1
is 2
is 3
is 4
is 5
is 6
is 7
is 8
is 9
>>> 
cs

 

for문

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> for x in range(0,10):
    print("x is " + str(x))
 
    
is 0
is 1
is 2
is 3
is 4
is 5
is 6
is 7
is 8
is 9
>>> 
cs

 

여기서 range 함수는 규칙있는 리스트를 만드는 함수입니다.

range([처음], 끝, [증감]) 으로 사용하고, 범위는 처음 ≤ x < 끝 입니다.

[처음] 부분이 비워져 있으면 0부터 시작하고, [증감] 부분이 비워져 있으면 1로 초기화 됩니다.

 

 


분기문

 

분기문은 코드의 흐름을 제어하기 위해 사용하는 구문을 말합니다.

분기문의 종류는 break, continue 가 있습니다.

 

  1. break 문
  2. continue 문

break문은 반복문에서 탈출하는 명령이고

continue문은 반복문의 조건식 검사부로 이동하는 명령입니다.

 

예시를 보겠습니다.

 

break문

(1부터 계속 출력하는데 10 이상이 되면 탈출합니다)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
>>> a = 1
>>> while True:
    if a >= 10:
        print("a is more than 10")
        break;
    print("a is " ,a)
    a+=1
 
    
is  1
is  2
is  3
is  4
is  5
is  6
is  7
is  8
is  9
is more than 10
>>> 
cs

 

continue문

(0~99 까지의 숫자들 중 홀수들의 합을 구하는 예제입니다.)

조건문에서 2로 나누었을때, 나머지가 0이면 다음 수로 넘어갑니다.

그리고 조건문을 만족하지 않으면, a+=x 가 실행됩니다.

1
2
3
4
5
6
7
8
9
10
>>> a = 0
>>> for x in range(0,100):
    if x % 2 == 0:
        continue
    a += x
 
    
>>> a
2500
>>> 
cs

실전 코딩

이제 내용을 응용하여 프로그램을 만들어 보겠습니다.

숫자를 입력받으면 그게 소수인지 아닌지 확인하는 프로그램을 만들어보겠습니다.

여기서 소수는 자신과 1만을 약수로 갖는 수를 말합니다.

 

우선 소수의 정의에 따라서 변수 a에 숫자를 받았을때,

a가 소수인지 알려면 a의 약수가 1과 a밖에 없는지를 파악해야합니다.

그러려면 1부터 a까지 사이의 수들로 하나씩 a를 나누어서 나누어떨어지는지 확인하면 될겁니다.

만약 나누어 떨어진다면 이 수는 소수가 아니고, 만약 나누어 떨어지는 수가 없다면 이 수는 소수가 되는 겁니다.

 

먼저 수도 코드로 로직을 짜보겠습니다.

 

숫자를 입력받고, 변수 a에 대입한다.

for 2부터 변수 a 까지 숫자 하나씩 x에 대입한다: 
 	if x 가 a 라면:
    	a는 소수임을 출력한다.
        break
        
	elif a를 x로 나누었을때 나누어 떨어진다면:
    	a는 소수가 아님을 출력한다
    	break
   

 

이걸 이제 파이썬 코드로 바꿔 보겠습니다.

 

1
2
3
4
5
6
7
8
9
= input("please input number(2~ )"
 
 for x in range(2int(a)+1):
    if x == a:
        print("a is primary")
        break
    elif int(a) % x == 0:
        print"a is not primary")
        break
cs

 

여기서 input 함수는 인자로 출력할 문구를 줍니다.

설명 문구로 입력받아야할 값을 입력 받도록합니다.

문구 설명으로 2이상으로 입력하라고 했는데, 소수를 구하는 것이 목적이기 때문에 2 이상의 자연수를 입력받도록 했습니다.

줄:3 은 2부터 a 까지 x에 대입해서 a를 나누기 위해 반복문을 사용한 것입니다. 그리고 input함수는 문자열 형태로 받기 때문에 int() 함수로 숫자형(정수형)으로 바꾼 뒤에 range함수에 사용했습니다.

줄:4 'x가 a 라면'이라는 뜻은 x가 2부터 a 까지 모두 a로 나누었는데 따로 탈출하지 않고, 끝까지 다 돌았다는 뜻이므로

이 수는 소수라는 뜻입니다. 그래서 소수라고 출력하고 탈출합니다.

줄:7 에서 여기서도 나머지 연산을 하기 위해 정수형으로 변환뒤에 사용합니다.

a를 x로 나누어서 나머지가 0이라면, a는 약수가 존재한다는 의미이므로, 소수가 아님을 출력하고 반복문을 탈출합니다.

 

 

이렇게 제어문에 대해서 알아보았습니다.

다음시간에는 클래스와 메소드에 대해서 알아보겠습니다.

반응형
Comments