While loop - Learn Python 3 - Snakify

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 == 11i <= 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 우리는 몇 번이나 반복했는지 계산합니다.

파이썬에는이 문제를 해결하는 또 다른 쉬운 방법이 있습니다 : length = len(str(i)) .

Advertising by Google, may be based on your interests

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')

Advertising by Google, may be based on your interests

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)

breakcontinue 가 여러 개의 중첩 된 루프 안에 있으면 가장 안쪽의 루프 만 영향을줍니다. 그것을 보여주기 위해 다소 어리석은 예제를 살펴 보겠습니다.

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)
Advertising by Google, may be based on your interests

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

"="의 왼쪽에는 쉼표로 구분 된 변수 이름 목록이 있어야합니다. 오른쪽은 쉼표로 구분 된 임의의 표현식이 될 수 있습니다. 왼쪽과 오른쪽 목록은 동일한 길이 여야합니다.

Advertising by Google, may be based on your interests