프로그래머가 아닌 이들을 위한 파이썬 3 자습서/For 루프

위키책, 위키책

그리고 여기 이번장을 위해 작성해야 하는 예제입니다:

onetoten = range(1, 11)
for count in onetoten:
    print(count)

그리고 언제나-똑같은 결과:

1
2
3
4
5
6
7
8
9
10

결과물은 대단히 친숙하지만, 프로그램 코드는 낯설게 보입니다. 첫 줄에서는 range함수를 사용하였습니다. range 함수는 두 개의 인수를 사용합니다 - range(시작, 끝). 시작은 생산할 첫 번째 수입니다. 은 마지막 숫자보다 1 정도 더 큰 수입니다. 이 프로그램은 더 짧게 작성할 수 있다는 것에 유의하세요:

for count in range(1, 11):
    print(count)

범위(range) 함수는 반복자(iterable)를 반환합니다. 이것은 list함수와 함께 리스트로 변환할 수 있습니다. 이것은 range명령이 어떤 일을 하는지 보여주는 몇 가지 예입니다:

>>> range(1, 10)
range(1, 10)
>>> list(range(1, 10))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(-32, -20))
[-32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21]
>>> list(range(5,21))
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
>>> list(range(5))
[0, 1, 2, 3, 4]
>>> list(range(21, 5))
[]

다음 줄 for count in onetoten:for 제어 구조를 사용합니다. for 제어 구조는 다음과 같이 보입니다 - for 변수 in 리스트:. 리스트는 리스트의 첫 번째 요소부터 시작해서 마지막 요소까지 거쳐갑니다. for가 리스트의 각 요소를 진행하여 그것을 각기 변수에 집어넣습니다. 그것은 변수for 루프가 진행될 때마다 각각 연속적으로 사용하게 만들어줍니다. 여기에 입증할 또 다른 예제가 있습니다 (입력할 필요는 없습니다) :

demolist = ['life', 42, 'the universe', 6, 'and', 7, 'everything']
for item in demolist:
    print("현재의 항목은:",item)

출력:

현재의 항목은: life
현재의 항목은: 42
현재의 항목은: the universe
현재의 항목은: 6
현재의 항목은: and
현재의 항목은: 7
현재의 항목은: everything

Notice how the for loop goes through and sets item to each element in the list. So, what is for good for? The first use is to go through all the elements of a list and do something with each of them. Here's a quick way to add up all the elements:

list = [2, 4, 6, 8]
sum = 0
for num in list:
    sum = sum + num

print("합계:", sum)

수수한 존재감의 출력:

합계: 20

아니면 당신은 리스트에서 중복된 요소가 있는지 찾아내는 프로그램을 작성할 수 있다:

list = [4, 5, 7, 8, 9, 1, 0, 7, 10]
list.sort()
prev = None
for item in list:
    if prev == item:
        print("중복된", prev, "이 발견되었습니다")
    prev = item

그리고 좋은 판단을 위하여:

중복된 7 이 발견되었습니다

좋다, 그래서 잘 작동했는가? 여기에 당신의 이해를 돕기 위한 특별한 디버깅 버전이 있다(당신이 타이핑할 필요는 없다):

l = [4, 5, 7, 8, 9, 1, 0, 7, 10]
print("l = [4, 5, 7, 8, 9, 1, 0, 7, 10]", "\t\tl:", l)
l.sort()
print("l.sort()", "\t\tl:", l)
prev = l[0]
print("prev = l[0]", "\t\tprev:", prev)
del l[0]
print("del l[0]", "\t\tl:", l)
for item in l:
    if prev == item:
        print("중복된", prev, "이 발견되었습니다")
    print("if prev == item:", "\t\tprev:", prev, "\titem:", item)
    prev = item
    print("prev = item", "\t\tprev:", prev, "\titem:", item)

그 결과:

l = [4, 5, 7, 8, 9, 1, 0, 7, 10]        l: [4, 5, 7, 8, 9, 1, 0, 7, 10]
l.sort()        l: [0, 1, 4, 5, 7, 7, 8, 9, 10]
prev = l[0]         prev: 0
del l[0]        l: [1, 4, 5, 7, 7, 8, 9, 10]
if prev == item:        prev: 0     item: 1
prev = item         prev: 1     item: 1
if prev == item:        prev: 1     item: 4
prev = item         prev: 4     item: 4
if prev == item:        prev: 4     item: 5
prev = item         prev: 5     item: 5
if prev == item:        prev: 5     item: 7
prev = item         prev: 7     item: 7
중복된 7 이 발견되었습니다
if prev == item:        prev: 7     item: 7
prev = item         prev: 7     item: 7
if prev == item:        prev: 7     item: 8
prev = item         prev: 8     item: 8
if prev == item:        prev: 8     item: 9
prev = item         prev: 9     item: 9
if prev == item:        prev: 9     item: 10
prev = item         prev: 10    item: 10

코드 속에 print 구문을 많이 넣은 이유는 당신이 매 줄 무슨 일이 일어나는지 보도록 하기 위해서이다. (그런데, 프로그램이 왜 작동하지 않는지 알아낼 수 없다면, 무슨 일이 일어나고 있는지 알고 싶은 곳에 많은 print 구문을 넣는 것을 시도해야 한다) 처음에 프로그램은 구닥다리 리스트와 시작한다. 그 다음 프로그램은 리스트를 정렬한다. 이를 통해 중복값이 바로 옆에 위치하도록 하는 것이다. 프로그램은 그 다음 prev(ious) 변수를 초기화한다. 다음 리스트의 첫 요소는 삭제되는데 이를 통해 첫 번째 항목이 중복이라고 잘못 생각하지 않는다. 다음 for 루프로 간다. 리스트의 각 항목은 이전의 값과 같은지 볼 수 있도록 확인된다. 만약 중복된 것을 찾으면, prev의 값은 다음 번 for 루프가 실행되도록 하기 위해 prev 이전 항목이 현재로 바뀌게 된다. 충분히 알겠지만, 7이 중복된 것으로 발견되었다. (\t이 탭(tab)을 출력하기 위해 사용된 점에 주목하시오.)

for 루프를 사용하는 다른 방법은 일정한 횟수의 작업을 하는 것이다. 여기에 피보나치 수열을 처음부터 9개를 출력하는 코드가 있다:

a = 1
b = 1
for c in range(1, 10):
    print(a, end=" ")
    n = a + b
    a = b
    b = n

놀라운 결과:

1 1 2 3 5 8 13 21 34

for 루프로 할 수 있는 모든 것은 while 루프로도 할 수 있으나 for 루프는 리스트의 모든 요소를 거치거나 일정한 횟수의 작업을 반복할 때 더 쉬운 방법을 제공한다.

리스트 부울 표현식

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