C4-1.for문으로 5의 배수가 아닌 수를 출력하라!
200~800 사이의 범위에서 수열을 만들고
수열이 5의 배수가 아닐 때마다만 print("%d" %i, end=" ")로 정수 나열하고 한 칸씩 띄운다.
그때마다 count를 세고
count가 30이 될 때마다 print()로 엔터를 친다.
근데 여기서 if count%10==0:의 위치가 중요하더라
if만 앞으로 보냈을 뿐인데.. 왜 20번마다 엔터를 한 번씩 더 칠까?
if가 뒤에 있는 거랑 앞에 있는 거랑 무슨 차이일까?
count=0
for i in range(200, 801):
if i%5!=0:
print("%d" %i, end=" ")
count=count+1
if count%10==0:
print()
이렇게 쓰면 if 밑에 if가 들어가니까.. 뭔가 맨 윗줄에 있는 count=0의 영향을 안 받는 것 같고
count=0
for i in range(200, 801):
if i%5!=0:
print("%d" %i, end=" ")
count=count+1
if count%10==0:
print()
이건 맨 윗 줄의 count=0의 영향을 받는 것 같다.
실험을 해보자
for로 명령이 반복될 때마다 count가 0으로 리셋되면서 매 횟수마다 count+1을 하니까 count는 언제나 1이 되는 것이다. 그러니까 if count%10==0: print()이 작동할 여지가 없다. 그러니까 count를 for 밑으로 내리면 안 된다. 그러면 count를 쓰는 이유가 없어진다.
그럼 다시 문제는 원점으로 돌아간다. 다시 따져보자 if가 if 밑에 있는 거랑, for 바로 밑에 있는 거랑 무슨 차이가 있는 걸까? 이건 함수니까 함수대로 해봐야겠다.
i count(if아래) count(for아래)
200 X 0 0
201 1(동작 안 함) 1
202 2(동작 안 함) 2
203 3(동작 안 함) 3
204 4(동작 안 함) 4
205 X 4
206 5(동작 안 함) 5
207 6(동작 안 함) 6
208 7(동작 안 함) 7
209 8(동작 안 함) 8
210 X 8
211 9(동작 안 함) 9
212 10(엔터) 10(엔터)
213 11(동작 안 함) 11
214 12(동작 안 함) 12
215 X 12
216 13(동작 안 함) 13
217 14(동작 안 함) 14
218 15(동작 안 함) 15
219 16(동작 안 함) 16
220 X 16
221 17(동작 안 함) 17
222 18(동작 안 함) 18
223 19(동작 안 함) 19
224 20(동작 안 함) 20
225 X 20
아니 근데.. if가 for 밑에 있어서 첫if랑 두번째 if랑 동위에 있다 하더라도.. count는 201부터 들어간다.
Solution!
: 하위if를 하지 않을 경우 첫번째 if가 작동되지 않음에 따라 count가 한 번 제자리 걸음을 하는 순간이 있는데.. 4 8 12 16 20의 템포로 흘러가는데 그렇다보니까.. 10마다 엔터를 치게 만드면 4 8 12 16 20....의 경우 20번에 한 번씩 엔터를 두번 치게 되는 것이다. 그렇다면 만일 4마다 엔터를 치게 만들면 매 행마다 엔터를 두번 치려나?
그렇니까 이러한 현상의 원인은 결국 5의 배수가 아닐 경우 if가 작동하지 않고, 그런 상황에서 하위if를 걸치 않으면 count가 제자리걸음을 하는 순번이 발생하는데 그런 순번들ㅈ ㅜㅇ 10의 배수인 순번에서는 10이 두번 나오니까 엔터를 두 번 치게 되면서 이런 문제가 발생하는 것이다. 따라서 이러한 문제를 해결하기 위해서는 하위 if를 이용해서 count가 제자리 걸음하지 않게, 그러니까 i가 5의 배수가 아닐 경우에는 if count%4==0: print()도 작동하지 않도록 해야한다.
그럼 혹시 count=count+1을 for와 첫if 사이에 두면 어떨까?
그럴 경우에는 첫if에 상관없이 별도의 count에 따라 10마다 엔터를 칠 것이고 좀 개판이 되지 않을까?
다만 내가 의도했던 대로 10마다 엔터를 치는 게 아니라
8마다 엔터를 치게 된다. 5의 배수가 아닌 순번이 두 번 발생하니까.
(와 그나저나 하위 if 띄어쓰기 좀 틀렸다고 곧 바로 에러가 나냐)
C4-2.for문으로 길이 환산표를 만들어라
C4-3.for문으로 별표(*)트리를 만들어라!
C4-4.C4-3의 트리 모양을 변경하라!
C4-5.for문으로 홀수의 개수를 카운트하라!
C4-6.for문으로 무게 단위 환산표를 만들어라
'파이썬 독학일지' 카테고리의 다른 글
Solved: 소스트리 클론 오류 종료 꺼짐(SourceTree clone error shut off) - 문자열이 문제다.(Because String size) (0) | 2021.08.04 |
---|---|
Git 설치 및 소스트리(sourcetree) 설치 후기 그리고 github에 계정 만들기(와 깃 설치도 완전 빡쎈데?) (0) | 2021.08.04 |
파이썬 독학일지-4.2.5온도 환산표 만들기(주피터 노트북/인트로덕션 투 파이썬) (0) | 2021.07.31 |
파이썬 독학일지-4.2.4 for문에서 문자열 다루기(주피터 노트북/인트로덕션 투 파이썬) (0) | 2021.07.31 |
파이썬 독학일지-4.2.3 5의 배수 합계 구하기(주피터 노트북/인트로덕션 투 파이썬) (0) | 2021.07.31 |
댓글