일반인을 위한 파이썬 지침서/10까지 세어보기

While 회돌이

+/-

우리의 첫번째 제어 구조를 제시하련다. 평상적으로 컴퓨터는 첫 번째 라인에서 시작하여 아래로 내려간다. 제어 구조는 어떤 서술문이 실행되면 서술문이 실행되거나 결정되는 순서를 바꾼다. 여기에 while 제어 구조를 사용하는 프로그램을 위한 소스가 있다.

a = 0
while a < 10:
        a = a + 1
        print a

그리고 여기에 정말로 흥미진진한 출력이 있다.

1
2
3
4
5
6
7
8
9
10

(여러분의 컴퓨터를 5달러짜리 계산기로 바꾸어도 더 나쁠것 같지 않다고 여러분은 생각하겠지?)자 이 프로그램은 무엇을 하는가? 먼저 a = 0이라는 라인을 보고서 0을 만든다. 그리고 while a < 10:라는 라인을 보고서 컴퓨터는 a < 10인가를 점검한다. a는 0이라는 서술문을 컴퓨터가 처음으로 보았으므로 그것은 10 이하이다. 다른 말로 하면 a 가 10 이하인 동안에만 컴퓨터는 들여쓰기된 서술문들을 실행할 것이다.

여기에 while을 사용하는 또 다른 예제가 있다.

a = 1
s = 0
print 'Enter Numbers to add to the sum.'
print 'Enter 0 to quit.'
while a != 0 :
        print 'Current Sum:',s
        a = input('Number? ')
        s = s + a
print 'Total Sum =',s

처음으로 내가 이 프로그램을 실행했으므로 파이썬은 다음과 같은 것을 내 뱉는다.

  File "sum.py", line 3
    while a != 0 
                ^
SyntaxError: invalid syntax

나는 while문의 뒤에 :를 놓는것을 깜빡했다. 에러 메시지는 그 문제에 대해 불평을 하는 것이며 파이썬이 생각하기에 문제가 어디인지를 윗꺽쇠^"로 지적하는 것이다. 이 문제를 해결한 후에 내가 프로그램을 실행한 바를 여기에 보이면

Enter Numbers to add to the sum.
Enter 0 to quit.
Current Sum: 0
Number? 200
Current Sum: 200
Number? -15.25
Current Sum: 184.75
Number? -151.85
Current Sum: 32.9
Number? 10.00
Current Sum: 42.9
Number? 0
Total Sum = 42.9

표현식 "print 'Total Sum =',s "이 마지막에 한번 만 실행됨을 주목하라. while 서술문은 탭쓰기된 ( 들여쓰기된) 라인에만 영향을 미친다. != 은 같지 않다는 것을 의미한다 그래서 while a != 0 : 가 뜻하는 것은 a 가 0이 될 때까지 이후의 탭쓰기된 서술문들을 실행하라는 의미이다.

이제 우리는 while 루프를 다룬다, 영원히 실행되는 프로그램을 갖는 것은 가능하다. 이것을 하는 쉬운 방법은 프로그램을 다음과 같이 작성하는 것이다:

while 1 == 1:
     print "Help, I'm stuck in a loop."

이 프로그램은 우주가 열로 멸망하거나 여러분이 멈출때까지 "Help, I'm stuck in a loop."을 출력할 것이다. 여러분이 멈추는 방법은 Control (또는 Ctrl) 키와 `c' (문자)를 동시에 누르는 것이다. 이것으로 그 프로그램은 죽을 것이다. (주의: 때로는 여러분은 Control C 를 누른후에 엔터를 쳐야만 할 것이다.)

예제

+/-
# Fibonnaci.py

# This program calulates the fibonnaci sequence
a = 0
b = 1
count = 0
max_count = 20
while count < max_count:
    count = count + 1
    #we need to keep track of a since we change it
    old_a = a
    a = b
    b = old_a + b
    #Notice that the , at the end of a print statement keeps it
    # from switching to a new line
    print old_a,
print

출력

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

# Waits until a password has been entered.  Use control-C to break out with out
# the password

password = "foobar"

#note that != means not equal
while password != "unicorn":
    password = raw_input("Password:")
print "Welcome in"

샘플 실행

Password:auo
Password:y22
Password:password
Password:open seaseme
Password:unicorn
Welcome in