파이썬 반복문(while)

윤태영·2023년 11월 15일
0
post-thumbnail

이미지 출처: https://wikidocs.net/192339

반복문인 while구문을 배워보겠습니다. for문과는 조금 다르고 if문과 비슷합니다. if, for, while 구문들만 알고 있어도 어느정도 프로세스가 있는 프로그램을 만들 수 있습니다.

while 흐름제어 실습

  • while 기본 사용법
  • Break, Continue
  • While - Else 구문 (while을 전부 반복하면 else 구문 마지막 실행)
  • 무한 반복 구문
  • 기본 패턴 실습

while 실습 📕

  • 파이썬의 while 문은 특정 조건이 참(True)인 동안 코드 블록을 반복적으로 실행하는 데 사용됩니다.
  • if문과 사용법이 같지만, 조건을 만족할 때까지 계속 반복한다는 차이가 있다.
while <expr>: 
	  <statement(s)> <- 작성하고 싶은 코드 작성

예1
n>0 보다 크면 계속해서 while문이 계속 반복되니까 5가 끈임없이 출력됩니다.

n = 5
while n > 0:
    print(n)
>>>
5
5
5
5
5
5
.
.

while문은 무한반복하거나 내가 원하는대로 작동하지 않을수 있기에 조건의 변화에 대해서 눈으로 또는 디버깅잘해야한다.

n = 5
while n > 0: 
    n = n - 1
    print(n)
>>>
4
3
2
1
0

예2
0개가된다는것은 그때서야 a가 False가 된다는 것이기에 그때 끝난다.

a = ['foo', 'bar', 'baz']
while a:
    print(a.pop())        
>>>
baz
bar
foo        

예3

  • if 중첩
  • break, continue
  1. 초기에 n은 5입니다.
  2. while n > 0: 조건을 만족하므로 루프가 시작됩니다.
  3. n을 1 감소시킵니다. (n은 이제 4)
  4. if n == 2: 조건을 확인합니다. 현재 n은 4이므로 조건이 거짓이며, break 문을 건너뛰고 다음 코드로 진행합니다.
  5. print(n)이 실행되어 현재의 n 값을 출력합니다. (출력: 4)
  6. 루프의 처음으로 돌아가 n을 다시 1 감소시킵니다. (n은 이제 3)
  7. 이제 n이 2가 아니므로 if 블록은 건너뛰어지고 다시 print(n)이 실행됩니다. (출력: 3)
  8. 이 과정이 n이 2가 될 때까지 계속됩니다.
  9. n이 2가 되면 break 문을 만나서 루프가 종료됩니다.
  10. 'Loop Ended.'가 출력됩니다.
n = 5
while n > 0:
    n -=1
    if n == 2:
        break
    print(n)
print('Loop Ended.')
>>>
4
3
Loop Ended.

예4
위와 같은 코드이지만 break 대신 continue가 쓰였습니다. 저희는 continue를 배웠기때문에 코드를 쉽게 이해 할 수 있습니다. m이 2가되는경우 pass하고 넘어갑니다.

m = 5
while m > 0:
    m -=1
    if m == 2:
        continue
    print(m)
print('Loop Ended.')
print()
>>>
4
3
1
0
Loop Ended.        

예5
while문은 break문과 많이 쓴다. 종료 조건을 break할때는 중간에 if문이 들어가는 경우가 많다. 쉽기 때문에 자세한 설명은 하지 않겠습니다.

i = 1
while i <= 10:
    print('i: ', i)
    if i == 6:
        break  
    i +=1         
>>>
i:  1
i:  2
i:  3
i:  4
i:  5
i:  6        

while - else 구문 📕

예6

  • 만약 if와 break이 없으면 0까지 출력되고 else out이 나온다. while문도 break가 없다면 for문과 같다.
  • else 구문에 for문이나 while문에서 처리하고 마지막에 한번 실행되야 하는 코딩을 넣어주면 깔끔하게 프로세스에 맞는 코딩흐름 제어 가능
n = 10
while n > 0:
    n-= 1
    print(n)
    if n == 5:
        break 
else:
    print('else out..')        
>>>
9
8
7
6
5
n = 10
while n >0:
    n-=1
    print(n)
else:
        print('else out')
print()        
>>>
9
8
7
6
5
4
3
2
1
0
else out

예7
이 코드는 리스트 a에서 값 'qux'를 찾는 것입니다. while 루프를 사용하여 리스트를 처음부터 끝까지 반복하면서 'qux'를 찾으면 루프를 종료하고, 찾지 못한 경우 else 블록이 실행되어 'qux' not found in list.를 출력합니다.

여기서 else 블록은 while 루프가 정상적으로 종료된 경우에만 실행됩니다. 즉, break 문을 만나지 않고 루프가 종료된 경우에 실행됩니다. 만약 break 문이 실행되어 루프가 중간에 종료된 경우 else 블록은 실행되지 않습니다. a에 'qux'가 존재하므로 else구문이 실행되지 않습니다.

a = ['foo', 'bar', 'baz', 'qux']
s = 'qux'
i=0
while i < len(a):
    if a[i] == s:
        break
    i +=1
else:
    print(s, 'not found in list.')   
>>>        

예8
리스트 a에서 항목을 하나씩 빼내어 출력하는 루프를 나타냅니다. while True는 무한 루프를 만들고, 루프 내부에서 if not a를 사용하여 리스트가 비어 있으면 break 문을 통해 루프를 종료합니다. 그렇지 않으면 a.pop()을 통해 리스트에서 마지막 항목을 빼내어 출력합니다.

a = ['foo', 'bar', 'baz']
while True:
    if not a:
        break
    print(a.pop())
>>>  
baz
bar
foo      

다음 시간에는 파이썬의함수 및 입력에 대해 알아보겠습니다.🙂

출처 : 인프런

    
profile
ice blue

0개의 댓글