Lesson 6
While 루프
1. While 루프
while
루프는 일부 조건이 False
평가 될 때까지 여러 번 반복됩니다. 조건은 루프 본문 앞에 주어지며 루프 본문을 실행할 때마다 검사됩니다. 일반적으로 while
루프는 루프 반복의 정확한 수를 미리 결정할 수 없을 때 사용됩니다.
가장 단순한 경우 while
루프의 구문은 다음과 같습니다.
while some condition: a block of statements
파이썬은 먼저 조건을 검사합니다. False이면 루프가 종료되고 while
루프 본문 뒤에 다음 명령문으로 제어가 전달됩니다. 조건이 참이면 루프 본문이 실행 된 다음 조건이 다시 검사됩니다. 조건이 참인 동안 계속됩니다. 조건이 False가되면 루프가 종료되고 제어가 루프 다음의 명령문으로 전달됩니다.
예를 들어, 다음 프로그램 조각은 1에서 10까지의 모든 정수의 제곱을 인쇄합니다. 여기서 " for ... in range(...)
"루프는 for ... in range(...)
루프로 바꿀 수 있습니다.
i = 1 while i <= 10: print(i ** 2) i += 1
이 예에서 루프 내의 변수 i
는 1에서 10까지 반복됩니다. 새 루프 반복마다 값이 변경되는 이러한 변수를 카운터라고합니다. 이 프래그먼트를 실행 한 후에는 i == 11
때 i <= 10
의 조건이 False이므로 처음으로 변수 i
의 값이 정의되고 11
과 같습니다.
다음은 while
루프를 사용하여 정수 n
의 자릿수를 결정하는 또 다른 예제입니다.
n = int(input()) length = 0 while n > 0: n //= 10 # 이것은 n = n // 10과 같습니다. length += 1 print(length) # 4
매 반복마다 10의 정수 나누기 ( n //= 10
)를 사용하여 숫자의 마지막 숫자를 자릅니다. 가변 length
우리는 몇 번이나 반복했는지 계산합니다.
파이썬에는이 문제를 해결하는 또 다른 쉬운 방법이 있습니다 :
.
2. 루프 제어 흐름 : else
루프의 끝에서 한 번 실행되는 루프 본문 다음에 else:
문을 작성할 수 있습니다.
i = 1 while i <= 10: print(i) i += 1 else: print('Loop ended, i =', i)
언뜻 보면이 문은 의미가없는 것처럼 보입니다. 왜냐하면 else:
문 본문은 루프가 끝난 후에 삽입 될 수 있기 때문입니다. 루프 뒤의 "else"문은 명령어 break
과 함께 사용될 때만 의미가 있습니다. 루프가 실행되는 동안 Python 인터프리터가 break
만나면 즉시 루프 실행을 중단하고 종료합니다. 이 경우 else:
브랜치는 실행되지 않습니다. 따라서 break
는 반복 실행 중간에 루프 실행을 중단하는 데 사용됩니다.
다음은 블랙 잭과 같은 예입니다. 숫자를 읽고 합계가 21이 될 때까지 합계하는 프로그램입니다. 모든 숫자의 합계가 모두 합계 인 경우에도 프로그램이 중지 될 수 있도록 입력 시퀀스가 0으로 끝납니다. 21 미만.
다양한 입력에 대해 어떻게 작동하는지 살펴 보겠습니다.
버전 1. 조건을 확인한 후 루프가 정상적으로 종료되므로 "else"분기가 실행됩니다.
total_sum = 0 a = int(input()) while a != 0: total_sum += a if total_sum >= 21: print('Total sum is', total_sum) break a = int(input()) else: print('Total sum is less than 21 and is equal to', total_sum, '.')
버전 2. 루프는 중단으로 break
되므로 "else"분기를 건너 뜁니다.
total_sum = 0 a = int(input()) while a != 0: total_sum += a if total_sum >= 21: print('Total sum is', total_sum) break a = int(input()) else: print('Total sum is less than 21 and is equal to', total_sum, '.')
"Else"브랜치는 "for"루프와 함께 사용할 수도 있습니다. 프로그램이 5 개의 정수를 읽었을 때 첫 번째 음의 정수를 만나면 바로 멈추는 예제를 보겠습니다.
버전 1. 루프가 정상적으로 종료되므로 "else"분기가 실행됩니다.
for i in range(5): a = int(input()) if a < 0: print('Met a negative number', a) break else: print('No negative numbers met')
버전 2. 루프가 중단되므로 "else"분기가 실행되지 않습니다.
for i in range(5): a = int(input()) if a < 0: print('Met a negative number', a) break else: print('No negative numbers met')
3. 루프 제어 흐름 : 계속
루프 실행을 제어하는 데 사용되는 또 다른 명령어가 continue
됩니다. 파이썬 인터프리터가 루프 반복의 중간에 continue
되면, 나머지 모든 명령어를 건너 뛰고 다음 반복으로 진행한다.
for num in range(2, 10): if num % 2 == 0: print("Found an even number", num) continue print("Found a number", num)
break
와 continue
가 여러 개의 중첩 된 루프 안에 있으면 가장 안쪽의 루프 만 영향을줍니다. 그것을 보여주기 위해 다소 어리석은 예제를 살펴 보겠습니다.
for i in range(3): for j in range(5): if j > i: # for 2 행에서만 휴식합니다. break print(i, j)
지침을 사용하지 않고 아이디어를 구현할 수 있다면 break
하고 continue
하라는 것이 좋습니다. break
의 나쁜 사용 의 전형적인 예가있다 :이 코드는 정수의 자릿수를 센다.
n = int(input()) length = 0 while True: length += 1 n //= 10 if n == 0: break print('Length is', length)
이 루프를 의미있는 루프 조건으로 다시 작성하는 것이 더 명확하고 읽기 쉽습니다.
n = int(input()) length = 0 while n != 0: length += 1 n //= 10 print('Length is', length)
4. 복수 과제
파이썬에서는 하나의 대입 문으로 여러 변수의 값을 변경할 수 있습니다. 어디 보자 :
a, b = 0, 1
위의 코드에서 설명한 효과는 다음과 같이 작성할 수 있습니다.
a = 0 b = 1
두 버전의 차이점은 여러 개의 할당이 두 변수의 값을 동시에 변경한다는 것입니다.
다중 할당은 두 변수의 값을 교환해야 할 때 유용합니다. 다중 할당을 지원하지 않는 이전 프로그래밍 언어에서는 보조 변수를 사용하여이를 수행 할 수 있습니다.
a = 1 b = 2 tmp = a a = b b = tmp print(a, b) # 2 1
파이썬에서는 같은 줄을 하나의 줄에 쓸 수 있습니다 :
a = 1 b = 2 a, b = b, a print(a, b) # 2 1
"="의 왼쪽에는 쉼표로 구분 된 변수 이름 목록이 있어야합니다. 오른쪽은 쉼표로 구분 된 임의의 표현식이 될 수 있습니다. 왼쪽과 오른쪽 목록은 동일한 길이 여야합니다.