본문 바로가기
Python/제어문

[Python] for문

by 코딩잡아먹는자바 2023. 7. 14.
728x90

<for문의 기본 구조>

for 변수 in 리스트(or 튜플 or 문자열):
    수행할 문장1
    수행할 문장2
    ...

 

1. 전형적인 for문

>>> test_list = ['one', 'two', 'three']
>>> for i in test_list:
...    print(i)
...
one
two
three

['one', 'two', 'three'] 리스트의 첫 번째 요소인 'one'이 먼저 i 변수에 대입된 후 print(i) 문장을 수행한다. 다음에 두 번째 요소 'two'가 i변수에 대입된 후 print(i) 문장을 수행하고 리스트의 마지막 요소까지 이것을 반복한다.

 

2. 다양한 for문의 사용

>>> a = [(1,2), (3,4), (5,6)]
>>> for(first, last) in a:
...    print(first + last)
...
3
7
11

위 코드는 a 리스트의 요솟값이 튜플이기 때문에 각각의 요소가 자동으로 (first, last) 변수에 대입된다.

 

3. for문의 응용

총 5명의 학생이 시험을 보았는데 시험 점수가 60점이 넘으면 합격이고 그렇지 않으면 불합격이다. 합격인지 불합격인지 결과를 보여주시오.

marks = [90, 25, 67, 45, 80]
>>> marks = [90, 25, 67, 45, 80]
>>> number = 0 # 학생들에게 붙여 줄 번호
>>> for mark in marks: # 점수 리스트 marks에서 차례로 점수를 꺼내어 mark라는 변수에 대입하고 for문 안의 문장들을 수행
...    number += 1
...    if mark >= 60:
...        print("%d번 학생은 합격입니다." %number)
...    else:
...        print("%d번 학생은 불합격입니다." %number)
...
1번 학생은 합격입니다.
2번 학생은 불합격입니다.
3번 학생은 합격입니다.
4번 학생은 불합격입니다.
5번 학생은 합격입니다.

 

<for문과 continue문>

for문 안의 문장을 수행하는 도중에 continue문을 만나면 for문의 처음으로 돌아가게 된다.

앞에서 for문 응용 예제를 그대로 사용해서 60점 이상인 사람에게는 축하 메세지를 보내고 나머지 사람에게는 아무 메세지도 전하지 않는 코드
>>> marks = [90, 25, 67, 45, 80]
>>> number = 0
>>> for mark in marks:
...    number += 1
...    if mark < 60:
...        continue
...    print(%d번 학생 축하합니다. 합격입니다." %number)
...
1번 학생 축하합니다. 합격입니다.
3번 학생 축하합니다. 합격입니다.
5번 학생 축하합니다. 합격입니다.

점수가 60점 이하인 학생일 경우에는 mark < 60이 참이 되어 continue문이 수행한다. continue문이 수행되기 때문에 축하 메세지를 출력하는 부분인 print문을 수행하지 않고 for문의 처음으로 돌아가게 된다.

 

<for문과 함께 자주 사용하는 range 함수>

for문은 숫자 리스트를 자동응로 만들어 주는 range 함수와 함께 사용하는 경우가 많다.

>>> a = range(10) # 0 부터 10 미만의 숫자를 포함하는 range 객체를 만들어 줌
>>> print(a)
...
range(0, 10) # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

 

range 함수의 예시

for와 range 함수를 사용하여 1부터 10까지 더하는 코드

>>> add = 0
>>> for i in range(1, 11): # (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
...    add += i
>>> print(add)
...
55

 

range를 활용한 앞에서 살펴본 '60점 이상이면 합격' 이라는 문장을 출력하는 예제

>>> marks = [90, 25, 67, 45, 80]
>>> for number in range(len(marks)):
...    if marks[number] < 60:
...        continue
...    print("%d번 학생 축하합니다. 합격입니다. %(number+1))
...
1번 학생 축하합니다. 합격입니다.
3번 학생 축하합니다. 합격입니다.
5번 학생 축하합니다. 합격입니다.

len 함수는 리스트 안의 요소 개수를 돌려주는 함수이다. 따라서 len(marks)는 5가 될 것이고 range(len(marks))는 range(5)가 될 것이다. range함수를 사용하였기 때문에 시작 번호는 0으로 시작할 것이고, marks[number]는 차례대로 90, 25, 67, 45, 80값을 갖게 된다. 여기서 number 변수에는 차례로 0부터 4까지의 숫자가 대입될 것이다. 학생 번호는 보통 0으로 시작하지 않기 때문에 출력했을 때 1부터 시작하기 위해 number에 +1을 해주었다.

 

for와 range를 사용한 구구단

>>> for i in range(2, 10): # 1번 for문
...    for j in range(1, 10): # 2번 for문
...        print(i*j, end=" ") # end=" " 는 다음 줄로 넘기지 않고 그 줄에서 계속해서 출력하기 위함
...    print('') # 두 번째 for문이 끝나면 결괏값을 다음 줄부터 출력하게 해줌
...
2 4 6 8 10 12 14 16 18 
3 6 9 12 15 18 21 24 27 
4 8 12 16 20 24 28 32 36 
5 10 15 20 25 30 35 40 45 
6 12 18 24 30 36 42 48 54 
7 14 21 28 35 42 49 56 63 
8 16 24 32 40 48 56 64 72 
9 18 27 36 45 54 63 72 81

위 코드를 보면 for문을 두 번 사용했다. 1번 for문에서 2부터 9까지의 숫자가 차례로 i에 대입된다. i가 처음 2일 때 2번 for문을 만나게 된다. 2번 for문에서 1부터 9까지의 숫자가 j에 대입되고 그 다음 문장 print(i*j)를 수행한다.

 

<리스트 내포 사용하기>

리스트 내포(List comprehension)는 리스트 안에 for문을 포함하는 것이다.

 

● 리스트 내포의 일반 문법

[표현식 for 항목 in 반복 가능 객체 if 조건]

● for문을 2개 이상 사용하는 것도 가능

[표현식 for 항목1 in 반복 가능 객체1 if 조건1
      for 항목2 in 반복 가능 객체2 if 조건2
      ...
      for 항목n in 반복 가능 객체n if 조건n]

 

예제(a 리스트의 각 항목에 3을 곱한 결과를 result 리스트에 담음)

>>> a = [1, 2, 3, 4]
>>> result = []
>>> for num in a:
...    result.append(num * 3)
...
>>> print(result)
...
[3, 6, 9, 12]

위 코드를 리스트 내포를 사용하면

>>> a = [1, 2, 3, 4]
>>> result = [num * 3 for num in a]
>>> print(result)
...
[3, 6, 9, 12]

[1, 2, 3, 4] 중에서 짝수에만 3을 곱하여 담고 싶으면

>>> a = [1, 2, 3, 4]
>>> result = [num * 3 for num in a if num % 2 == 0]
>>> print(result)
...
[6, 12]

 

구구단의 모든 결과를 리스트 내포를 사용하면

>>> result = [x * y for x in range(2, 10)
...           for y in range(1, 10)]
>>> print(result)
...
[2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]
728x90

'Python > 제어문' 카테고리의 다른 글

[Python] while문  (0) 2023.07.12
[Python] if문  (0) 2023.06.29