본문 바로가기

코딩 이야기/프로그래밍 언어 이야기

짱 쉬운 파이썬 강좌 #6 for문

반응형

서론

 

오랜만에 짱 쉬운 파이썬 강좌를 올리게 되었다. 지금 생각해보니 if문보다 for문을 먼저 올렸어야 했는데, 실수했다. 그래서 지금이라도 for문을 올리도록 하겠다.

 

https://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Python-logo-notext.svg/600px-Python-logo-notext.svg.png

for문? 반복문?

 

for문은 반복문의 한 종류로 같은 명령을 여러번 수행해야 될 때, 사용한다고 생각하면 편하다. 나중에 기초 알고리즘의 대표격인 브루트포스를 공부하게 된다면, 지금 for문을 더욱 집중해서 봐야할 것이다.

 

사용법

 

파이썬의 for문은 다른 언어의 for문과 형태가 많이 다르므로, 좀 주의 깊게 보도록 하자.

 

for i in range(5):
	print(i)

 

이 코드의 결과를 예상해보자. 아마 0 1 2 3 4라고 생각한 사람이 있을 것이고, 1 2 3 4 5라고 생각한 사람이 있을 것이다.

물론 답은 0 1 2 3 4 이다. 그렇다면 왜 파이썬은 1이 아닌 0부터 카운트 할까?

 

음... 그건 나는 잘 모르겠다. 0부터 카운트하면 메모리 주소 계산이 편해져서라고는 하는데, 정확한 이유는 모르겠다.

아무튼 for문은 range() 안에 있는 숫자 만큼 for문 안에 있는 명령을 실행한다고 보면 된다.

 

그럼 for 옆에 있는 i는 뭘까?

i는 0부터 range()안에 숫자 -1 까지 카운트되는 숫자이다. 그래서 print(i)를 했을때 0 1 2 3 4가 출력된 것이다.

 

그럼 저 for문을 2씩 카운트하거나, 아님 숫자가 올라가는게 아니라 내려가는 for문은 없을까? 당연히 있다.

 

for i in range(0, 5, 2):
    print(i)

이렇게 입력을 해주면 된다. 코드 해석을 하자면, 0부터 5까지 2씩 카운트하는 코드이다.

그러면 출력은 0 2 4가 출력될 것이다. 숫자가 감소하려면 이렇게 코드를 짜야한다.

 

for i in range(5, 0, -1):
    print(i)

이 코드는 5부터 0까지 -1씩 카운트하는 코드이다.

그러면 출력은 5 4 3 2 1이 될 것이다.

 

이제 for문을 활용해보도록 하자.

 

list1 = [1,2,6,7]

for i in range(len(list1)):
    print(list1[i])

이렇게 코드를 짜면, list1이라는 리스트의 요소를 하나씩 빼와서 출력할 수 있다.

이것을 또 다르게 변형 할 수 있다.

list1 = [1,2,6,7]

for i in list1:
    print(i)

그냥 for문의 i에 list1 요소를 바로 대입시켜버릴 수 도 있다. 물론 위에 코드와 별차이는 없다.

 

그러면 for문을 마친다음에 i라는 변수는 무엇을 할당하고 있을까?

for i in range(0,5,1):
	print(i)
    
print(i)

그냥 마지막에 가지고 있던 값을 그대로 가지고 있다.

출력값은 이렇다.

0
1
2
3
4
4

 

 

좀 실생활에서 응용을 시켜보자면.

score = [30, 70, 80, 90, 50]
count = 1
for i in score:
    if i > 50:
        print(count,"번째 학생 합격")
    else:
    	print(count, "번째 학생 탈락")
    count += 1

 

 

score라는 리스트 안에 요소가 50을 초과하면 합격이고 50 이하이면 탈락시키는 코드이다. count를 넣어준 뒤, for이 돌때 마다 1씩 증가시키면서 몇 번째인지 표기한다.

 

만약 아예 탈락은 명단에서 빼버리고 싶다면?

score = [30, 70, 80, 90, 50]
count = 1
for i in score:
    if i > 50:
        print(count,"번째 학생 합격")
    else:
    	continue
    count += 1

continue를 집어 넣으면 맨 아랫줄 count+=1에 도달하지도 못하고 다시 for문 윗줄로 돌아버리기 때문에, 합격한 학생들만 1 2 3번으로 출력된다.

 

 

for문을 활용한 별찍기 문제가 백준 사이트에 있는데, 그 중 하나를 예시로 풀어보도록 하겠다.

 

www.acmicpc.net/problem/2439

 

2439번: 별 찍기 - 2

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

www.acmicpc.net

 

이 문제는 풀 때 공백을 먼저 출력하고 그 다음 별을 출력하는 방식으로 입력받은 줄 수 만큼 별을 출력하면 된다.

 

n = int(input())

for i in range(1,n+1):
    print(" " * int(n-i) + "*" * int(i))

첫 줄에 n으로 몇 줄로 출력할 지를 입력 받고

 

아래줄 for문에서 1부터 n+1까지 i에 할당해주며, 공백은 n-i 만큼 출력해주고 별은 i만큼 출력해주면 된다.

문자열 곱하기와 for문을 활용한 문제였다.

 

끝맺는 말

 

역시 남에게 무언가를 설명하는 일은 상당히 어렵다. 물론 이 글을 보고 이해하시는 분은 더 대단하시고. 어제 수능이 있는 날이였는데, 코로나로 힘든 와중에도 힘들게 공부하며, 수능을 치신 수험생분들께 박수를 보냅니다. 2년뒤의 나의 모습이기도 하지만.

반응형