프로그래머가 아닌 이들을 위한 파이썬 3 자습서/10까지 세기

위키책, 위키책
둘러보기로 가기 검색하러 가기

While 루프[+/-]

우리의 첫 번째 제어 구조를 소개한다. 일반적으로 컴퓨터는 첫 번째 줄부터 줄줄이 아래로 읽어 나간다. 제어 구조는 구문이 실행되거나 특정 구문이 실행되는지 여부를 결정하는 순서를 변경한다. 아래는 while 제어 구조를 사용하는 프로그램의 소스이다:

a = 0            # 우선, set the initial value of the variable a to 0(zero).
while a < 10:    # While the value of the variable a is less than 10 do the following:
    a = a + 1    # Increase the value of the variable a by 1, as in: a = a + 1! 
    print(a)     # Print to screen what the present value of the variable a is.
                 # REPEAT! until the value of the variable a is equal to 9!? See note. 
                 
                 # 주의:
                 # 매 반복마다, 즉 'while 구문 블록'에서의 루프에서.
                 # 변수의 값은 1씩 증가한다.
                 # 예를 들어, a = 1 그 다음 a = 2 그 다음 a = 3 등등 a = 9 일 때 까지...
                 # 이 코드가 1씩 a에 더하는 것을 종료하면 (now a = 10),  
                 # 결과를 출력한다, 그리고 'while 구문 블록'에서 빠져나간다. 
                 #              --
                 # While a < 10: |
                 #     a = a + 1 |<--[while 구문 블록]
                 #     print (a) |
                 #              --

그리고 정말로 흥분되는 결과가 나왔다:

1
2
3
4
5
6
7
8
9
10

(그리고 당신은 당신 컴퓨터가 5천원짜리 계산기로 바뀌는 것보다는 나쁘지 않다고 생각했겠군요?)

결국 이 프로그램은 무엇을 하는가? 우선 첫 줄 a = 0에서 a 변수의 값을 0으로 설정하였다. 다음 줄 while a < 10:을 보면 컴퓨터는 a < 10인지 여부를 확인한다. 처음에는 컴퓨터가 이전의 구문, a의 값이 0인 것을 확인했기 때문에, 이 값은 10보다 작다. 달리 말하면, a의 값이 10보다 작은 동안에는, 컴퓨터는 이 들여쓰기된 구문 내에서만 실행된다. 이것은 결국 a의 값이 10과 같게 되면 (계속 1을 a에 더하고 더하다 보면) 조건 while a < 10은 더 이상 참(True)이 아니게 된다. 이 지점에 도달하면, 프로그램은 들여쓰기된 곳에서의 작동을 중지한다.

항상 콜론(Colon) ":" 을 while구문이 있는 줄의 마지막에 넣어야 한다는 것을 기억해야 한다!

while구문이 사용된 다른 예가 있다:

a = 1
s = 0
print('합계에 더할 숫자를 입력하십시오.')
print('종료하려면 0 입력합니다.')
while a != 0:                           
    print('현재의 합계:', s)            
    a = float(input('숫자? '))        
    s = s + a                            
print('총 합계 =', s)
합계에 더할 숫자를 입력하십시오.
종료하려면 0 입력합니다.
현재의 합계: 0
숫자? 200
현재의 합계: 200.0
숫자? -15.25
현재의 합계: 184.75
숫자? -151.85
현재의 합계: 32.9
숫자? 10.00
현재의 합계: 42.9
숫자? 0
총 합계 = 42.9

print '총 합계 =', s 가 어떻게 마지막에서만 실행되었는지를 주목하자. while 구문은 오직 들여쓰기된 줄에만 영향을 미친다. != 은 같지 않다는 뜻이고 따라서 while a != 0: 구문은 a가 0이 아니면 아래에 들여쓰기된 구문을 실행한다는 뜻이다.

a가 부동소수점수이고, 모든 부동소수점수가 정확한 값을 표현하지는 못하므로, !=을 사용하는 것은 간혹 작동하지 않는다는 점을 유의하여야 한다. 인터렉티브 모드에서 124 - 228.2 + 104.2 을 타이핑해서 확인해보라.

무한 루프 즉 끝나지 않는 루프[+/-]

Now that we have while loops, it is possible to have programs that run forever. An easy way to do this is to write a program like this:

while 1 == 1:
   print("도와주세요, 루프에 갇혔어요.")

"==" 연산은 연산자의 양측단이 동등한 값을 갇는지 시험하는 표현식으로, "<"가 "보다 적은" 이라고 쓰이는 의미와 비슷하다(당신은 다음 장에서 비교 연산자의 완벽한 리스트를 얻을 수 있다).

프로그램은 우주가 폭발해 멸망해버리거나 당신이 멈출 때까지 도와주세요, 루프에 갇혔어요.를 출력할 것이다. 왜냐하면 1은 언제나 1이기 때문이다. 이것을 멈추려면 Control (Ctrl)버튼과 C (글자)버튼을 동시에 눌러야 한다. 이것은 프로그램을 없앤다. (주의: 간혹 Control-C를 누른 후 엔터키를 입력해야 한다.) 어떤 시스템에서는, 멈춰지지 않아서, 프로세스를 없애야 한다 - 그러므로 되도록 피하자!

Examples[+/-]

피보나치 수열[+/-]

Fibonacci-method1.py

# 이 프로그램은 피보나치 수열(Fibonacci sequence)을 계산합니다.
a = 0
b = 1
count = 0
max_count = 20

while count < max_count:
    count = count + 1
    print(a, end=" ")  # print 함수의 인수로 end=" " 을 사용하면
                       # 새 줄을 만드는 것을 방지합니다.
    old_a = a    # 우리가 바꾼 a 값을 추적하기 위하여 필요합니다.
    a = b
    b = old_a + b
print()  # 새 빈 줄을 만듭니다.

Output:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

print 의 인수로 추가 인수 end=" "을 사용하였기 때문에 한 줄로 출력된 것을 기억하세요.

Fibonacci-method2.py

# 간단하고 더 빠른 방법으로 피보나치 수열(Fibonacci sequence)을 계산합니다.
a = 0
b = 1
count = 0
max_count = 10

while count < max_count:
    count = count + 1
    print(a, b, end=" ")  # Notice the magic end=" "
    a = a + b    
    b = a + b
print()  # 새 (빈) 줄을 만듭니다.

Output:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

비밀번호 입력[+/-]

Password.py

# 비밀번호를 입력할 때까지 대기한다.
# Control-C 를 입력하면 비밀번호 입력 없이 나갑니다.

# password 변수는 while에서 묻는 값가 같아서는 안됩니다.
# 그래야 while 루프가 적어도 한 번은 반복됩니다.
password = str()

# != 는 같지 않다는 뜻입니다.
while password != "unicorn":
    password = input("비밀번호: ")
print("잘 왔어요.")

실행의 예제:

비밀번호: auo
비밀번호: y22
비밀번호: password
비밀번호: open sesame
비밀번호: unicorn
잘 왔어요.

실습[+/-]

사용자의 아이디와 비밀번호를 물어보는 프로그램을 작성하시오. 그리고 사용자가 "lock"이라고 입력하면, 잠금을 해제하기 위해 아이디와 비밀번호를 입력하게 하시오. 틀:Solution

틀:Navigation 스크립트 오류: "TScope" 모듈이 없습니다.