이번 차례는 반복문이다
흔히 말하는 for와 while문을 설명해보자
사실 while문을 잘 안 쓰는지라 설명이 빈약할 수 있다
그럼 for문으로 넘어가 보자
1. 범위
파이썬에서 for문을 쓰는 가장 기본적인 방법은 아래와 같다
for 변수 in 범위:
아니, 이거만 기억하면 사실 for문은 다 쓸 수 있을 거라 생각한다
예시 코드들을 보며 설명해보자
for i in range(10): print(i) |
ary = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] for i in ary: print(i) |
결괏값
>
0
1
2
3
4
5
6
7
8
9
첫 번째 방법은 range를 사용하여 i를 출력하는 방법이다
기본적으로 range에 숫자를 땅 하고 하나만 넣으면
0부터 그 숫자 미만까지 반복하기 때문에
0~9까지가 출력된다
두 번째 방법은 그냥 아예 ary값을 범위로 넣어주는 것이다
그럼 자연스레 i는 0부터 9까지 출력이 된다
그리고 두 번째 방법을 생각하면 이런 코드도 가능하지 않은가?라는 생각도 할 수 있게 된다
도레미파솔라시도 | word = input() for i in range() print(i, end=" ") |
결괏값
>
도 레 미 파 솔 라 시 도
그렇다 for문은 냅다 문자열을 넣어줘도 자동으로 ary로 판별한 방식으로 하나하나 i에 넣어준다
그러면 결국 도부터 다음 도까지 차례대로 i에 들어가서 print을 해줄 수 있게 된다
이 외 변수를 2개를 for문을 돌리는 방법 emurate를 사용하는 방법 등이 있는데
사실 거기까지 갈 필요도 없다 생각하고 나도 사실 잘 모른다
여태 300문제 가까이 풀면서 for에 변수 2개를 집어넣어 돌린 적은 단 한 번도 없다
그리고 이 for문을 쓸 때 항상 주의하는 게 있다
"for문은 3중 이상으로 쓰지 않기"
가 내 신념이다
상상해보자
아래와 같은 코드를 보자
for i in range(10): for ii in range(10): for iii in range(10): print(i+ii+iii) |
상상해보자 이 코드는 몇 번 돌아갈 것인가?
10*10*10 만큼 돌아간다
n의 세제곱만큼 돌아간다는 것이다
물론 컴퓨터 입장에 서는 별 거 아닐 수도 있다
하지만 이게 10이 아니라 100이 된다면?
더 나아가 100이 아니라 1000이 된다면?
상상하기도 싫다 컴퓨터는 아마 죽여달라 하고 프리징을 내거나 그냥 블루스크린을 내뿜지 않을까 한다
물론 쓴 적은 있다 하지만 그걸 쓰기 위해 어느 정도의 범위의 알고리즘 문제인지를 파악하고 마지못해 쓴 경우이다
하여튼.. 쓰지 말자 난 정말 안 쓰려고 노력하고 여태 문제 풀면서 3중 for문을 쓴 건 드물다
for문은 이 정도로 하고 while로 넘어가 보자
while
사실 이걸 쓰면서도 아직 while이 좀 익숙하지가 않다
이분 탐색을 익힐 때 좀 많이 써서 그런지 막 새롭다는 느낌은 아니지만
그래도 잘못하면 무한루프로 빠지기 때문에 쓰기 좀 꺼려지는 함수이다
하지만 반대로 이걸 잘 쓴다면 엄청난 편리함을 주지 않을까 한다
while문은 기본적으로 종료 조건이 명확해야 한다
아니면 멍청한 이 컴퓨터는 냅다 뒤질 때까지 그냥 while문만 돌리는 경우가 생기기 때문이다
보통의 예제 코드는 이러하다
10 | goal = int(input()) tmp = 0 while tmp !=goal: tmp+=1 if tmp == 9: print("almost reached!") |
결괏값
>
almost reahced!
사실 출력된 값은 중요한 게 아니다
이게 어떻게 돌아갔는지가 중요하다
while의 조건문이 False면 기본적으로 while문은 종료된다
고로 while문의 종료식을 짤 때는 잘 생각해야 한다
tmp !=goal:
는 그 예를 나타낸다
무심코 while tmp == goal:
했다가는 그냥 돌아가기 도전에 거짓이 떠버려서
while문이 돌아가지 않는 불참사를 겪게 되는 것이다
사실 이해할 때 한번 틀어서 이해하면 쉽다
while 문의 조건이 거짓일 때 종료된다!라고 생각하면 되는데
이게 맘처럼 쉽지 않다
그래서 난 생각하기가 귀찮고 또한 종료 조건도 명확하게 걸기 위해 이런 식으로도 쓴다
10 | goal = int(input()) tmp = 0 while 1: if tmp == 10: break tmp += 1 if tmp == 9: print("almost reached!") |
while의 조건에 냅다 그냥 1을 박고
종료를 그냥 내부에서 값을 보고 break을 걸어 코드를 멈추게 한다
사실 이 방법이 코드를 읽을 때 더 편하지 않을까 한다
길어지면 모르겠으나 여하튼 알고리즘 풀면서(이분탐색 문제제외)while문 들어가는 건 다 이렇게 쓴 기억이 난다
좋은 습관은 아니니 이렇게 하지 말고 다들
이 글을 참고해서 while문을 익히도록 하자..
'프로그래밍 > 파이썬' 카테고리의 다른 글
[파이썬] 17362 수학은 체육과목 입니다 문제풀이 + 해설 사진 (0) | 2022.05.16 |
---|---|
[파이썬] [알고리즘] 조건문 (0) | 2022.03.09 |
[파이썬] [알고리즘] 출력에 대하여 (0) | 2022.03.06 |
[파이썬] [알고리즘] input에 대해서 (0) | 2022.03.05 |
[파이썬] vscode 에서 input.txt output.txt 로 입력값 결과값 넣기 (0) | 2022.03.04 |