IT_Python

[파이썬기초] 반복문. while. break/continue/무한루프

soyounism 2021. 12. 14. 10:15
  • 반복문의 이해 및 활용 (while)
  • 조건문 : 특정 조건에 따라서, 실행 할지말지
  • 반복문 : 특정 조건을 만족하는 동안에 계속 같은 코드를 반복적으로 수행

loop (반복문)

  • 반복적인 작업을 가능하게 해주는 도구
  • 특정 조건을 만족하는 경우 수행할 수 있음 (while)
  • 리스트, 문자열, 튜플 등 컬렉션 타입의 아이템을 하나씩 순회하면서 사용 가능 (for)
  • 코드 작업에서, 가장 많이 사용하는 구문 중 하나
  • 주의할점: while을 사용할 경우, 반복을 멈추게 하는 장치가 필요
    • 그렇지 않으면 셀이 무한히 수행되며, jupyter notebook의 재부팅이 필요

 

while 키워드

  • if와 비슷. if는 조건이 ture인 경우, 수행하고 끝.
    • while 뒤의 조건이 True일 경우, while 코드 블록을 계속 수행
    • while 코드 블록
      • if와 마찬가지로 while문 아래의 들여쓰기로 작성 된 부분을 의미
    • 조건이 False가 되면 블록 수행을 멈추고 이후 코드를 실행

 

while 키워드 이용하여 리스트의 아이템 출력하기

#if로하면 한번실행하고 끝

a = [1, 10, 9, 24]

i = 0 # 인덱스 0으로 시작하는 이유.인덱스의 시작이 0이니까
if i < len(a): #len(a):4 a의 길이
  print(a[i])
  i+=1


print('end')

결과:

1

end

 

#while로

a = [1, 10, 9, 24]

i = 0 # 인덱스 0으로 시작하는 이유.인덱스의 시작이 0이니까
while i < len(a):
  print(a[i], '지금 인덱스i=', i)
  i+= 1

print('end')

#무한루프 발생하지 않도록 코딩!

결과:

1 지금 인덱스i= 0

10 지금 인덱스i= 1

9 지금 인덱스i= 2

24 지금 인덱스i= 3

end

 

 

while 키워드 이용하여 리스트의 아이템 출력하기

  • 조건문과 함께 사용하기
a = [1, 10, 9, 24, 25, 26]

i = 0 # 인덱스
while i < len(a): #a리스트 길이 6보다 작은 인덱스i일때 반복(어짜피 인덱스가 0~5까지라서 다나옴)
    if a[i] > 20: # 해당 인덱스의 값이 20보다 큰 경우만 출력하기
        print(a[i])
    i+=1
        #i+=1  #if 블록에 들어가면x
        #이건 항상 수행되어야되는데, if 안에 들어가버리면 if조건이 참일때만 수행됨
        # if안에 들어가면, a[i]:0 >20 ->거짓
        # 아래 두줄이 실행되지 않고 다시 while로 넘어감
        # -> i는 다시 0

#인덱스 증가시키는 행위는 조건과 관계없기때문에, 조건과 같은 레벨에서 
#인덱스 0:1, 1:10, 2:9 는 출력x

결과:

24

25

26

 

#코딩의 대부분 이렇게 사용된다.중요중요!

a = [1, 10, 9, 24, 25, 26]

i = 0 # 인덱스
while i < len(a): #어짜피 다들어감 당연히 길이보다 인덱스가 (0부터시작)-1이니까
    #if a[i] % 2 ==1: # 2로 나눈 나머지는 1. 홀수인 경우만 출력하기 
    if a[i] %2: #이걸로해도 마찬가지. 0,1밖에없으니.
        print('홀수네', a[i])  #인덱스에 해당하는 값을 출력
    else: #나머지 값이 0인게 else되나보네..-if절 false 참고
        print('2로 나눴으',a[i] / 2) #짝수인 경우에는 2로 나눈값을 출력
    i += 1

결과:

홀수네 1

2로 나눴으 5.0

홀수네 9

2로 나눴으 12.0

홀수네 25

2로 나눴으 13.0

 

무한루프

  • while의 경우 종료가 되지 않도록 코드를 작성하면 블록에서 빠져나올 수 없음

 

break

  • loop를 중단할 때 사용
  • 보통 조건문 안에서 수행되며, 조건을 만족하는 경우 loop를 탈출하기 위해 사용
  • loop를 중단 하는 경우, while 이후의 코드를 수행
a = [1, 10, 9, 24, 25, 7]

i = 0
while i < len(a): #len(a):6
    if a[i] > 20: #리스트 값중에서 20보다 큰수가 나오면, 
        break     #if 그만!->마지막 7이 안나오겟져
        
    print(a[i]) #<-while의 print. 해당 값 출력
    i += 1  #while은 보통 마지막에 i+=1로 하는 듯. 출력먼저하고 i에 1씩더해서 반복
    
print('구문과 상관없음')

결과:

1

10

9

구문과 상관없음

 

continue

  • break 처럼 반복을 중단하여 빠져나오지 않고, 다시 while조건으로 점프함
  • 특정한 경우에는 코드를 수행하지 않고 다음으로 건너 뛰기 위해 사용
a = 7
while a > 0:
    a -= 1
    print(a)

결과

6

5

4

3

2

1

0

 

#아까 break는 중단이라서, 리스트 마지막 숫자가 조건을 만족하지만 출력x

a = 7
while a > 0: #a가 0보다 크면
    a -= 1   #-씩 빼서 반복하는데
    if a == 5: #만약 5면 5를 건너뛰고
        continue  #계속해. 
    print(a)

결과:

6

4

3

2

1

0

 

 

break : 자체 루프를 끝낼 때

continue : 특정 상황에서 건너뛸 때

 

실습. 1 - 5까지 더하기

n=1
s=0 #합을 가진 변수 필요

while n<=5: #n은 1이고, 5까지 더할꺼니까. 1~5 맞춰놓고
  s+=n #1. s=s+n 합을 담는 곳. 첫번째는 s:0 + n:1 = s=1
  n+=1 #2. 그리고 n=n+1 하나씩 늘려가
  print('한번돌때마다출력:', '1.s는', s,'2.n는',n)

print('while문 끝---------')
print('최종s:', s)

결과:

한번돌때마다출력: 1.s는 1 2.n는 2

한번돌때마다출력: 1.s는 3 2.n는 3

한번돌때마다출력: 1.s는 6 2.n는 4

한번돌때마다출력: 1.s는 10 2.n는 5

한번돌때마다출력: 1.s는 15 2.n는 6

while문 끝---------

최종s: 15