본문 바로가기

Python

2.제어문 Iteration (If문, while문, for문)

Iteration, 반복문이라고 불리우는 If문, while문, for문은 파이썬을 배울 때 가장 중요한 문법이라고 나는 생각한다. If문은 말그대로 '만약에 내가 ~~한다면? ~~할 것이다.' 라는 의미로 생각하면 좋을 거 같고, while문은 '~~하는 동안에는 1을 실행하고, 하지않을 때는 2를 실행한다.' 라고 생각하면 좋을거같다. 마지막으로 for문은 숫자를 지정해 그 횟수만큼 반복시키는 제어문이라고 생각한다. 지금은 대략적으로 설명한 것 이지만 더욱 더 깊이 설명해보겠다.


어떠한 상황에 걸렸을 때, 주어진 조건에서 해당하는 상황이 나올시, 그 상황에 맞춰서 사용하는 걸 If문이라고 한다. 예를 들어, 내가 키가 150cm미만이면 롤러코스터 탑승 불가, 그 이상은 탑승 가능 같은 상황 혹은 우리가 실생활에서 타고다니는 대중교통도 나이에 따라 요금이 달라지는 것도 다 If문을 사용하는 것이라고 할 수 있다.

Age = 17
if age >19: #19세 미만일 경우
	print('학생입니다.')
else: #19세 미만을 제외한 모든 나이
	print('성인입니다.')
    
>> '학생입니다.' #age가 19세 미만으로, '학생입니다.'출력

If 문의 기본 구조 - If문의 조건문이 참이면 if 조건문 밑에 문장을 수행하고, 조건문이 거짓이면 else 조건문 밑에 문장을 수행한다. 허나 if 조건문 혹은 이전 조건문이 거짓이고, 현재의 elif 조건문이 참이라면, elif 조건문의 문장을 수행한다. elif 조건문을 사용하는 이유는 우리가 실생활을 살면서 여러가지 상황이 나오기 때문이다. 실생활을 예로 들면, 교통카드를 사용할 때, 노약자 및 어린이도 포함이다. if문과 else문으로만 하는 것은 멍청한 짓이다. 어찌어찌 코드를 길게 작성하면 될 거 같기는 한데, 그런 짓은 세상 바보 같은 짓이라고 생각한다. 이럴 때, elif문을 사용해서 좀 더 정확하고 편리하게 결과를 구할 수 있다. else문 혹은 elif문은 if문 없이는 절대 사용할 수 없다. 그리고 조건문을 작성후 콜론':'을 무조건 작성해줘야되고, 다음 줄로 넘어간 뒤, tab 혹은 스페이스바 4개를 사용하고 수행할 문장을 적어줘야된다. 이것을 '들여쓰기(indentation)'이라고 불리우는데, if문 뿐만 아니라, while문 및 for문에도 적용된다. 개인적으로 tab키가 훨씬 편리하고 좋다. 

if 조건문:
	수행할 문장1
    	수행할 문장2
elif 조건문:#else if를 뜻함
	수행할 문장3
    	수행할 문장4
else:
	수행할 문장 A
    	수행할 문장 B

비교연산자 - 비교 연산자는 우리가 수학시간에 흔히들 쓰던 부등호와 같은 존재이다. 조건문에 조건을 부여할 때 많이 사용한다.

age = int(input('나이를 입력하세요.')) #나이를 입력
if age < 8: #8세 미만인 경우 참, 거짓일 경우 밑에 elif문으로
	print('어린이입니다.')
elif 8 <= age <= 20: #8세 이상, 20세이하인경우 참, 아닌 경우 밑에 elif문으로
	print('청소년입니다.')
elif 20 < age <= 60: #20세 초과 및 60세 이하인 경우 참
	print('성인입니다.')
else: #위에 모든 조건문이 모두 거짓일 경우
	print('노인입니다.')

비교연산자 말고 다른 종류의 연산자가 있다. and, or , not , in, not in 이라는 다섯 가지의 종류가 있는데, 뜻은 영어단어 뜻 그대로이다. 예시를 들자면

1 in [1,2,3] #1이 [1,2,3]안에 있는가?
>>True #참

4 not in [1,2,3] #4이 [1,2,3]안에 있지않는가?
>>True #참

a = [1,2,3]
if 1 in a and 4 not in a: #1이 a 리스트안에 있고, 4가 a 리스트에 없을때
>> True #참

if 2 in a or 4 in a: # 2가 a에 있거나 4가 a에 있을때
>> True

조건문에서 아무일도 일어나지않게 실행하려면 pass라는 명령어를 적용 시키면 아무일도 일어나지않는다. 쓸모없어보이지만 알아두면 좋다.

#주머니 속에 종이, 돈, 휴대폰 등이 있을때 만약 돈이 있다면 그냥 결과값 미출력, 없다면 카드를 꺼내라 출력
pokcet = ['paper','money','cellphone']
if 'money' in pocket: # 'money'가 pocket안에 있을때
	pass
else:
	print('카드를 꺼내라')

while문이란 반복해서 문장을 수행해야할 경우 사용하는 반복문이다. 조건문이 참인 동안에는 while문의 수행할 문장들이 계속 반복된다.

while 조건문:
	수행할 문장1
    	수행할 문장2
    	수행할 문장3

예를 들면 목숨이 5개에서 매번 문장을 수행할 때 마다, 1씩 뺀다. 그래서 목숨이 0개가 되는 순간 while문은 False임으로 반복문을 멈추고, life가 0 일때, '플레이어가 사망하였습니다.'를 출력시킨다.

life = 5 #목숨 개수 5개
while life > 0: #life가 0 초과하면, 반복
	life -= 1 #life -1
	print('현재 목숨 {0}개 있습니다.'.format(life))#출력
 
	if life == 0: #life가 0일시
		print('플레이어가 사망하였습니다.') #출력
        
>>현재 목숨 4개 있습니다.
>>현재 목숨 3개 있습니다.
>>현재 목숨 2개 있습니다.
>>현재 목숨 1개 있습니다.
>>현재 목숨 0개 있습니다.
>>플레이어가 사망하였습니다.

허나 while문을 무한반복을 시킬 수 있는데 그건 바로 조건식에 참을 기입하여 무한적으로 반복시킬 수 있다. 이걸 무한루프라고 불리우는데, while 0: 혹은 while True: 일시, 무한적으로 반복된다. 이러한 상황에서 while문을 강제로 나가려면, break문을 사용하여 while문을 탈출할 수 있다.

#자판기 프로그래밍
drink = 10 #현재 자판기내에 음료수가 10개가 있다.
while True: #무한루프 생성
	money = int(input('돈을 넣어주세요.')) #입력문 생성
	if money == 1000: #돈이 1000원일시
    		print('사이다가 하나 나옵니다. 잠시만 기다려주세요.') #문장 출력
		drink -= 1 # drink - 1 = drink와 같은 의미이다.
	elif money > 1000: #돈이 1000원보다 클 경우
		print('거스름던 %d를 주고, 사이다를 드립니다.'%(money - 1000)) #출력
		drink -= 1
	else: #돈이 1000원보다 적을 경우
		print('잔액이 부족합니다. 1000원을 넣어주세요.') #출력, 허나 음료 개수는 줄지않음(안팔렸으니깐)
	if not drink: #음료수 재고가 다 떨어졌을 경우
    		print('음료수가 다 떨어졌습니다. 판매를 종료합니다.')
		break #break문을 사용해, 무한루프 탈출

조건식의 조건에 맞지 않을 경우, 맨 처음으로 돌아가는 방법도 있다. continue문을 사용해서 맨 처음으로 다시 돌아가는 원리이다.

num = 0
while num < 10: #숫자가 10보다 작은 경우
	num += 1 # 숫자가 1씩 증가
	if num % 2 == 0: #만약 숫자가 2로 나눌 수 있다면 (짝수 인 경우)
		continue
	print(num) #홀수 숫자만 출력

>1
3
5
7
9

for문은 아마 파이썬을 사용하면서 제일 많이 사용하게 될 것이다. for문도 while문과 같이 반복문으로 사용되지만 변수 및 리스트(또는 튜플, 문자열)을 사용하여 반복 시킨다. 

for 변수 in 리스트 (또는 튜플, 문자열):
	수행할 문장1
	수행할 문장2

전형적인 for문은 이런식이다. a라는 리스트를 반복시키는 것인데,  i라는 변수에 순서대로 대입을 시켜, 하나씩 출력해주는 원리이다. 

a = [1,2,3]
for i in a:
    print(i)
print() #줄바꿈, 이게 없을 시 출력할때 123 이런식으로 나옴
>>1
2
3

 

for문을 사용할때, range라는 함수도 있다. 숫자 리스트를 자동적으로 생성시키는 매우 편리한 함수이다. 그리고 while문에서 사용 했듯이, continue문도 사용할 수 있는데, continue문을 사용할시, while문과 같이 처음부터 조건식에 실행하는 역할이다.

marks = [90, 25, 67, 45, 80] #시험점수결과 리스트형
number = 0

for mark in marks: #mark라는 변수를 사용해, 리스트 반복
    number += 1 #number는 반복될때마다 1씩 증가
    if mark <60: #점수가 60점이 안나올경우
        continue #continue
    print('%d번 학생 축하합니다. 합격입니다.'%number) #1,3,5번 학생들은 점수가 60점이 넘음으로
    #1,3,5번 학생 축하합니다. 합격입니다. 출력
for i in range(0,3,1): #[0,1,2]라는 리스트를 생성시켜, for문에 적용
	print(i) #0,1,2 차례대로 출력
print() #줄바꿈
>> 0
1
2

for문으로 구구단을 만들 수 있다. 그러면 for문을 2번을 사용하는 것인데, i를 반복시켜 i에 2,3,4,5,6,7,8,9를 대입시킨다. 매번 i에 대입이 될때마다, j는 1부터 9까지 계속 대입이 된다. 그러므로 2가 i에 한번 적용되는 경우, j는 2,3,4,5,6,7,8,9를 적용시켜 i * j라 하였을 때, 우리가 흔히들 알고 있는 구구단이 생성이 되는 것이다.

for i in range(2,10):
    for j in range(1,10):
        print('{0:<2} * {1:<2} = {2:<2}'.format(i,j,i*j),end=' ')
    print()
>>
2  * 1  = 2  2  * 2  = 4  2  * 3  = 6  2  * 4  = 8  2  * 5  = 10 2  * 6  = 12 
2  * 7  = 14 2  * 8  = 16 2  * 9  = 18 

3  * 1  = 3  3  * 2  = 6  3  * 3  = 9  3  * 4  = 12 3  * 5  = 15 3  * 6  = 18 
3  * 7  = 21 3  * 8  = 24 3  * 9  = 27 

4  * 1  = 4  4  * 2  = 8  4  * 3  = 12 4  * 4  = 16 4  * 5  = 20 4  * 6  = 24 
4  * 7  = 28 4  * 8  = 32 4  * 9  = 36 

5  * 1  = 5  5  * 2  = 10 5  * 3  = 15 5  * 4  = 20 5  * 5  = 25 5  * 6  = 30 
5  * 7  = 35 5  * 8  = 40 5  * 9  = 45 

6  * 1  = 6  6  * 2  = 12 6  * 3  = 18 6  * 4  = 24 6  * 5  = 30 6  * 6  = 36 
6  * 7  = 42 6  * 8  = 48 6  * 9  = 54 

7  * 1  = 7  7  * 2  = 14 7  * 3  = 21 7  * 4  = 28 7  * 5  = 35 7  * 6  = 42 
7  * 7  = 49 7  * 8  = 56 7  * 9  = 63 

8  * 1  = 8  8  * 2  = 16 8  * 3  = 24 8  * 4  = 32 8  * 5  = 40 8  * 6  = 48 
8  * 7  = 56 8  * 8  = 64 8  * 9  = 72 

9  * 1  = 9  9  * 2  = 18 9  * 3  = 27 9  * 4  = 36 9  * 5  = 45 9  * 6  = 54 
9  * 7  = 63 9  * 8  = 72 9  * 9  = 81

리스트 안에 for문을 포함시켜 리스트 내포(List comprehension)을 사용할 수 있다.

a = [1,2,3,4]
result = []#빈리스트 생성
for num in a:
	result.append(num*3) #result라는 빈 리스트 안에 num 곱하기 3한 수를 요소로 넣는다

print(result)
>>[3,6,9,12] #출력

#위 식을 더 간단히 하려면,
result = [num * 3 for num in a] #리스트 안에 for문을 넣어, a 라는 리스트를 반복시켜 3을 곱하는 것이다.
print(result)

#if조건도 가능하다.
result = [num * 3 for num in a if num % 2 == 0] #num이 짝수일 경우 적용시킨뒤, 곱하기 3

[표현식 for 항목 in 반복 가능 객체 if 조건] 과 같은 문법이다.