파이썬의 for문 구조가 자바 for문의 구조와 조금 달라서 정리를 해보려고 한다.
1. for문의 기본 구조
for 변수 in 리스트(또는 튜플, 문자열):
수행할_문장1
수행할_문장2
...
자바의 향상된 for문과 비슷하다.
리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지 차례대로 변수에 대입해 '수행할_문장1', '수행할_문장2' 등이 수행된다.
2. 예제
- 전형적인 for문
test_list = ['one', 'two', 'three']
for i in text_list:
print(i)
# 수행 결과
# one
# two
# three
리스트의 첫 요소인 one이 먼저 i 변수에 대입된 후 print(i) 문장을 수행한다.
다음에 두 번째 요소 two가 i 변수에 대입된 후 print(i) 문장을 수행하고 리스트의 마지막 요소까지 이것을 반복한다.
- 다양한 for문의 사용
a = [(1, 2), (3, 4), (5, 6)]
for(first, last) in a:
print(first + last)
# 실행 결과
# 3
# 7
# 11
위 예는 a 리스트의 요소값이 튜플이기 때문에 각각의 요소가 자동으로 (first, last) 변수에 대입된다.
- for문의 응용
총 5명의 학생이 시험을 보았는데 시험 점수가 60점 이상이면 합격이고 그렇지 않으면 불합격이다.
합격인지 불합격인지 결과를 보여주시오. 라는 문제가 있다고 해보자.
먼저 학생 5명의 시험 점수를 리스트를 표현하면 아래와 같다.
marks = [90, 25, 67, 45, 80]
1번 학생은 90점이고 5번 학생은 80점이다.
이 점수들을 차례로 검사해서 합격했는지, 불합격했는지 통보해주는 프로그램을 만들어보자.
# marks1.py
marks = [90, 25, 67, 45, 80] # 학생들의 시험 점수 리스트
number = 0 # 학생들에게 붙여줄 번호
for mark in marks: # 90, 25, 67, 45, 80을 순서대로 mark에 대입
number = number + 1
if mark >= 60:
print("%d번 학생은 합격입니다." % number)
else:
print("%d번 학생은 불합격입니다." % number)
각각의 학생에게 번호를 붙여주기 위해 number 변수를 사용하였다.
점수 리스트 marks에서 차례로 점수를 꺼내어 mark라는 변수에 대입하고 for문 안의 문장들을 수행한다.
먼저 for문이 한 번씩 수행될 때마다 number는 1씩 증가한다.
이 프로그램을 실행하면 mark가 60 이상일 때 합격 메시지를 출력하고 60을 넘지 않을 때 불합격 메시지를 출력한다.
continue문은 자바와 같아서 생략한다.
3. range 함수
- 사용법
for문은 숫자 리스트를 자동으로 만들어주는 range 함수와 함께 사용하는 경우가 많다.
다음은 range 함수의 간단한 사용법이다.
>>> a = range(10)
>>> a
range(0, 10)
range(10)은 0부터 10 미만의 숫자를 포함하는 range 객체를 만들어 준다.
시작 숫자와 끝 숫자를 지정하려면 range(시작숫자, 끝숫자) 형태를 사용하는데, 이때 끝 숫자는 포함되지 않는다.
- 예시
add = 0
for i in range(1, 11):
add = add + i
print(add)
# 실행 결과
# 55
# marks3.py
marks = [90, 25, 67, 45, 80]
for number in range(len(marks)):
if marks[number] < 60:
continue
print("%d번 학생 축하합니다. 합격입니다." % (number+1))
len은 리스트 안의 요소 개수를 리턴하는 함수이다.
👉 len(marks)는 5, range(len(marks))는 range(5)가 될 것이다.
number 변수에는 차례대로 0부터 4까지의 숫자가 대입되고
marks[number]는 차례대로 90, 25, 67, 45, 80 값을 가지게 된다.
- for문, range를 이용한 구구단
for와 range 함수를 사용하면 소스 코드 단 4줄만으로 구구단을 출력할 수 있다.
for i in range(2, 10): # 1번 for문
for j in range(1, 10): # 2번 for문
print(i*j, end = " ")
print('')
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
1번 for문에서 2부터 9까지의 숫자가 차례대로 i에 대입된다.
i가 처음 2일 때 2번 for문을 만나게 된다.
2번 for문에서 1부터 9까지의 숫자가 j에 대입되고 그 다음 문장인 print(i*j, end=" ")를 수행한다.
따라서 i가 2일 때 2*1, 2*2, 2*3, ..., 2*9가 차례대로 수행되며 그 값을 출력하게 된다.
그 다음으로 i가 3일 때 역시 2일 때와 마찬가지로 수행될 것이고 i가 9일 때까지 계속 반복된다.
print(i*j, end=" ")와 같이 print 함수에 end 파라미터를 설정한 이유는 해당 결괏값을 출력할 때 다음 줄로 넘기지 않고 그 줄에 계속 출력하기 위해서이다.
그 다음에 이어지는 print('')는 2단 3단 등을 구분하기 위해 사용했다.
두 번째 for문이 끝나면 결과값을 다음 줄부터 출력하게 하는 역할을 한다.
- print문의 end 매개변수에는 줄바꿈 문자(\n)가 기본으로 설정되어 있다.
4. 리스트 컴프리헨션 사용하기
리스트 안에 for문을 포함하는 리스트 컴프리헨션(list comprehension)을 사용하면 좀 더 편리하고 직관적인 프로그램을 만들 수 있다.
a = [1, 2, 3, 4]
result = []
for num in a:
result.append(num*3)
print(result)
# 실행 결과
# [3, 6, 9, 12]
위 예제에서는 a 리스트의 각 항목에 3을 곱한 결과를 result 리스트에 담았다.
리스트 컴프리헨션을 사용하면 다음과 같이 좀 더 간단하게 작성할 수 있다.
a = [1, 2, 3, 4]
result = [num*3 for num in a]
print(result)
# 실행 결과
# [3, 6, 9, 12]
만약 [1, 2, 3, 4] 중에서 짝수에만 3을 곱하여 담고 싶다면 리스트 컴프리헨션 안에 if 조건문을 사용하면 된다.
a = [1, 2, 3, 4]
result = [num * 3 for num in a if num % 2 == 0]
print(result)
# 실행 결과
# [6, 12]
리스트 컴프리헨션의 문법은 다음과 같다. if 조건문 부분은 앞의 예제에서 볼 수 있듯이 생략할 수 있다.
[표현식 for 항목 in 반복_가능_객체 if 조건문]
조금 복잡하지만, for문을 2개 이상 사용하는 것도 가능하다. for문을 여러 개 사용할 때의 문법은 다음과 같다.
[표현식 for 항목1 in 반복_가능_객체1 if 조건문1
for 항목2 in 반복_가능_객체2 if 조건문2
...
for 항목n in 반복_가능_객체n if 조건문n]
만약 구구단의 모든 결과를 리스트에 담고 싶다면 리스트 컴프리헨션을 사용해 아래와 같이 간단하게 구현할 수도 있다.
result = [x*y for x in range(2, 10)
for y in range(1, 10)]
print(result)
출처
'Language > Python' 카테고리의 다른 글
[정보처리기사] 정처기 실기 Python 파이썬 기출문제 (0) | 2024.04.22 |
---|---|
[Python] 파이썬 슬라이싱, split 함수 (0) | 2024.04.20 |