CHAPTER 08 for 루프와 while 루프

유동헌·2021년 9월 4일
0

열혈파이썬_기초편

목록 보기
8/14

01 for 루프에 대한 복습

02 True가 될 때까지 반복하는 while 루프

def main():
    count = 0
    while count <= 5:
        print(count, end=" ")
        count = count + 1
main()

# 출력
0 1 2 3 4 5

📌 위 예제의 while 루프를 보면, 일단 count에 0이 저장된 상태에서 while 루프를 실행하게 되는데, 이때 while의 조건 count ≤ 5가 True이므로 다음과 같이 while에 속한 문장들이 실행된다.

count = count + 1의 조건을 확인하기 위해 계속 실행이 된다.

03 for 루프와 while 루프의 비교

for 루프와 while 루프는 코드의 반복 실행에 사용된다는 공통점이 있다. 그러나 이 둘 사이에는 차이점도 있다. for 루프는 반복 횟수를 지정하는 한 편, while 루프는 반복의 조건을 지정한다는 확실한 차이점이 있다.

for 루프 → while 루프

def main():
    i = 1
    sum = 0
    while i < 11:
        sum = sum + i
        i = i + 1
    print(sum)
    
main()

# 출력
55

언제 while을 사용??

1부터 더해 나가다가 몇을 더했을 때 처음으로 100을 넘기게 되나요?

# 1부터 더해 나가다가 몇을 더했을 때 처음으로 100을 넘기게 되나요?

def main():
    i = 1
    sum = 0
    while sum <= 100:
        sum = sum + i
        i   = i + 1
    print(sum)
    
main()

# 출력
105

연습문제

다음 수식의 빈칸에 들어갈 수를 찾는 코드를 작성해보자. 단 빈칸에 들어갈 수 있는 수는 1부터 시작해서 1씩 증가시켜서 찾기로 하자.

3 X [ ] / 2 = 63

빈칸에 들어갈 수를 찾는 코든느 다음과 같은 방식으로 작성하기로 하자.

num = 0 # num의 값이 위 수식의 빈칸에 넣어 볼 값이다.
        # 필요하면 변수도 선언하고
        # 위 위치에서 while 루프를 작성한다

num     # while 루프 탈출 후 num에는 빈칸에 들어갈 수 42가 저장이 되어 있어야 한다 
42

다양한 결과가 존재할 수 있는데, 위에서 보이듯이 최종적으로 num에 저장된 값이 42면 인정

04 break

def main():
    i = 0
    while i < 100:
        i = i + 1
        print(i, end=" ")
        if i == 20:
            break
main()

그럼 이번에는 1부터 더해가다 몇을 더했을 때 처음 100을 넘기는지 계산하는 코드를 while 루프와 break를 기반으로 작성해 보겠다.

def main():
    i = 1
    sum = 0
    while True:
        sum = sum + i
        if sum > 100:
            print(i, "더했을 때 합", sum, end=" ")
            break
        i = i + 1
        
main()

05 continue

break는 빠져나가지만 continue는 빠져나가지 않는다

i = 0
while i < 10:
    i = i + 1
    if i % 3 == 0:
        continue
    print(i, end=" ")

06 이중 for 루프

for 루프 안에 for 루프가 존재할 때, 이를 가리켜 이중 for 루프라고 한다. 그럼 일단 코드를 통해서 이중 for 루프의 흐름을 분석해보자.

for i in [1,2]:
    for j in ['a', 'b', 'c']:
        print(j * i, end=" ")
        
# 1번, 2번!!!!!!!!!!!!!!!!!!

# 출력
a b c aa bb cc

분석의 시작은 바깥쪽 for 루프에서 시작한다. 바깥쪽 for 루프에 의해서 그 안쪽에 위치한 for 루프가 반복 실행되는 구조이다. 즉 변수 i가 1일 때 다음의 형태로 안쪽 루프가 실행이 된다.

 for j in ['a', 'b', 'c']:
		 print(j * 1, end=" ")

그리고 이어서 변수 i가 2가 되어 다음의 형태로 안쪽 for 루프가 실행이 된다.

for j in ['a', 'b', 'c']:
		print(j * 2, end=" ") # 그래서 2번씩 출력이 되었다

결론적으로 안쪽에 있는 for 루프를 반복 실행하는 구조가 이중 for 루프이다. 그럼 이중 for 루프가 필요한 예를 하나 보이겠다. 다음은 리스트 안에 담겨 있는 문자열들 안에 문자 r이 몇 번 등장하는지 세어보는 예제이다.

>>> sr = ["father", "mother", "brother"]
>>> cnt = 0
>>> for s in sr:
...     for c in s:
...             if c == "r":
...                     cnt += 1
...
>>> cnt
4

위의 예에서 바깥쪽 for 루프는 변수 s에 다음 순서대로 문자열을 담는다.

["father", "mother", "brother"]

따라서 안쪽 for 루프는 총 3회 반복 실행되는데, 처음 안쪽 for 루프가 실행될 떄의 상황은 다음과 같다.

# 처음 

for c in 'father':
		if c == 'r':
				cnt += 1

# 두 번째

for c in 'mother':
		if c == 'r':
				cnt += 1

# 세 번째

for c in 'brother':
		if c == 'r':
				cnt += 1
profile
지뢰찾기 개발자

0개의 댓글