이번 포스팅에선 Python의 제어구문 중 하나인 반복문(Iteration statement) - while, for문 그리고 리스트 컴프리헨션(List comprehension)에 대해 알아보겠습니다.
1. 반복문(Iteration statement)
- 컴퓨터 프로그래밍에서 반복문이란 제어문 중 하나로써, 소스 코드 로직 내에서 특정한 부분의 코드를 반복적으로 수행하고자 할 때 사용될 수 있는 제어문을 의미합니다.
2. while문
- Python의 반복문 중 하나인 while문입니다.
2-1. 문법 - while문 내부의 조건식이 True라면 각 실행문들이 수행됩니다.
while(조건식1):
실행문1
실행문2
...
2-2. break문, continue문
- 반복문에서 반복 수행 작업을 제어하기 위해 코드 내부에 break, continue문을 사용할 수 있으며 특징은 다음과 같습니다.
- break문 : 반복문 내에서 break문은, while문의 조건식이 True이더라도 break문에 부합하는 조건이 True가 반환된다면 반복문의 수행을 중단하고 반복문 루프를 빠져나오게 됩니다.
- continue문 : 반복문 내에서 continue문은, 반복문 내부의 continue를 위한 조건이 True가 반환된다면 남은 코드를 수행하지 않고 반복문의 초기 조건식으로 되돌아가게 됩니다.
- 아래 예시 코드를 보며 반복문의 사용, break문과 continue문이 어떻게 사용되는지 보겠습니다.
# 반복문 while문 예시 코드, break문도 사용
# 라이언이 카카오 마트에서 과자를 구매합니다.
# 라이언의 보유금액
haveMoney = 10000
# 카카오마트의 과자 수량 (개당 천원)
haveSnackCount = 20
while haveMoney:
# 과자를 구매하여 보유금액이 감소하게 됩니다.
haveMoney = haveMoney - 1000
print("라이언의 보유금은 %d원입니다." % haveMoney)
# 과자를 구매하여 과자의 재고가 감소하게 됩니다.
haveSnackCount = haveSnackCount - 1
print("카카오 마트의 과자 보유 수량은 %d개입니다.\n" % haveSnackCount)
# 만약 보유금이 0원이라면
if(haveMoney == 0):
print("더 이상 구매할 수 없습니다.")
# break문을 만나게 되면서 조건식이 더 이상 수행되지 않음
break
'''
라이언의 보유금은 9000원입니다.
카카오 마트의 과자 보유 수량은 19개입니다.
라이언의 보유금은 8000원입니다.
카카오 마트의 과자 보유 수량은 18개입니다.
...
라이언의 보유금은 1000원입니다.
카카오 마트의 과자 보유 수량은 11개입니다.
라이언의 보유금은 0원입니다.
카카오 마트의 과자 보유 수량은 10개입니다.
더 이상 구매할 수 없습니다.
'''
위의 코드를 보시면, 반복문 내부의 break문이 포함된 조건식이 True가 됨에 따라 반복문이 종료된 것을 알 수 있습니다.
# continue문
# 1부터 10까지 짝수만 나열하는 코드
count = 0
# count가 10일 때까지만 코드 반복
while count <= 10:
count = count + 1
# 홀수인 경우 반복문 초기 조건으로 되돌아간다.
if count % 2 != 0:
continue
# 짝수인 경우 count를 출력한다
print(count)
'''
2
4
6
8
10
'''
위의 코드를 보시면 count 변수의 값이 홀수인 경우 반복문의 초기 조건으로 되돌아가서 반복문을 다시 수행하는 것을 볼 수 있습니다.
3. for문
- Python의 반복문 중 하나로 for문이 존재합니다.
- 문법 : for 변수 in 리스트나 튜플 또는 문자열:
실행문1
실행문2
- for문의 경우 특정한 변수를 선언하고 in 뒤에 오게 되는 자료구조의 각 요소들을 모두 차례대로 순회하면서 for문에 선언된 변수에 해당 요소를 대입하면서 실행문을 수행하게 됩니다.
- 문자열(String)의 경우 이전에 학습했던 것처럼 문자열 Indexing을 통해 문자열의 요소인 문자 하나 하나를 순회하며 for문에 선언된 변수에 대입합니다.
- 더 이상 순회할 요소가 없다면 반복문이 종료됩니다.
- 리스트의 각 요소를 순회하며 for문을 수행하는 예시 코드를 보겠습니다.
# 반복문 for - 리스트 순회
# 학생들의 점수 list
student_score = [100, 30, 72, 65, 88, 91, 72, 56, 84, 70]
# 학생 순서 index
student_index = 0
# 학생들의 점수 리스트를 각각 순회하며
for score in student_score:
# 순회하면서 학생의 순서를 나타내는 index 증가
student_index = student_index + 1
# 80점 이상인 사람만 합격
if score >= 80:
print("%d번 째 학생은 %d점이므로 합격입니다." % (student_index, score))
else:
print("%d번 째 학생은 불합격입니다." % student_index)
'''
1번 째 학생은 100점이므로 합격입니다.
2번 째 학생은 불합격입니다.
3번 째 학생은 불합격입니다.
4번 째 학생은 불합격입니다.
5번 째 학생은 88점이므로 합격입니다.
6번 째 학생은 91점이므로 합격입니다.
7번 째 학생은 불합격입니다.
8번 째 학생은 불합격입니다.
9번 째 학생은 84점이므로 합격입니다.
10번 째 학생은 불합격입니다.
'''
- 튜플을 순회하는 for문 예시 코드입니다.
# 반복문 for - 튜플 순회
tup1 = [(10, 20), (20, 30), (30, 40)]
for (first_num, second_num) in tup1:
print(first_num + second_num)
'''
30
50
70
'''
- 특정한 문자열의 각 요소들을 순회하는 for문 예시 코드입니다.
# 반복문 for 문자열 순회
a = "wonjun"
count = -1 # 반복문을 순회하며 인덱스 넘버를 증가시키려는 변수
# 문자열들의 각 요소를 순회하며
for char_element in a:
# count 변수가 1씩 증가하게 된다
count = count + 1
print("String index number : %d, Str : %c" %(count, char_element))
- for문에서도 마찬가지로 break, continue문을 사용할 수 있습니다.
# for문과 continue문
student_score = [100, 30, 72, 65, 88, 91, 72, 56, 84, 70]
student_index = 0
# 학생 점수 리스트를 한 번씩 순회하며
for score in student_score:
student_index = student_index + 1
# 60점 미만의 학생은 불합격 처리 (60점 이상이면 반복문 초기 조건으로 되돌아 감.)
if score >= 60: continue
print("%d번 째 학생은 불합격 처리되었습니다." % student_index)
'''
2번 째 학생은 불합격 처리되었습니다.
8번 째 학생은 불합격 처리되었습니다.
'''
4. for문 - range() 함수
- for문에선 range() 함수를 사용하여 반복문을 수행시킬 수 있습니다
- 문법 : for 변수 in range(n, m):
실행문1
실행문2
- n부터 m-1까지의 수를 for문의 변수에 대입하며 반복문을 수행합니다.
for number1 in range(1, 10):
for number2 in range(1, 10):
print("%d * %d = %d" %(number1, number2, number1 * number2))
'''
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
1 * 9 = 9
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
(...)
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
'''
5. 리스트 컴프리헨션(List comprehension)
5-1. List comprehension
- 리스트 컴프리헨션(List comprehension)이란, 직관적으로 리스트를 생성하는 방법을 의미합니다.
- 조건에 부합하는 각 데이터들을 새로운 리스트에 저장할 수 있습니다.
- 여러 줄 코드를 작성하는 것보다 간단한 구문의 경우 List comprehension을 통해 한 줄로 코드를 작성할 수 있어서 직관적이고 빠르게 특정 데이터가 담긴 리스트를 구현할 수 있다는 부분이 큰 특징입니다.
- 이러한 Comprehension 문법은 리스트뿐만이 아닌 딕셔너리(Dictionary), 튜플(Tuple)과 같은 자료형에서도 사용할 수 있습니다.
- 기본적인 형태 :
리스트명 = [ 변수 for 변수 in range(), 리스트 등 여러 가지 자료형 (필요하다면 if문까지)]
# 간단한 List comprehension
li = [ number for number in range(1, 10)]
print(li) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
5-2. List comprehension 유형 - 수식 사용
# List comprehension - 수식 사용
li_multiple = [3 * number for number in range(1, 10)]
print(li_multiple) # [3, 6, 9, 12, 15, 18, 21, 24, 27]
5-3. List comprehension 유형 - 사용자 정의 함수 사용
# List comprehension - 사용자 정의 함수 사용
def number_sum(a):
return a * 1000
sum_list = [number_sum(num1) for num1 in range(1, 5)]
print(sum_list) # [1000, 2000, 3000, 4000]
5-4. List comprehension 유형 - 반복문 또는 조건문 사용
# "s"로 시작하지 않는 도시들을 리스트에 담고자 할 때, 리스트 컴프리헨션을 사용하기.
cities = ["seoul", "shanghai", "jakarta", "tokyo", "guangzhou", "beijing", "karachi"]
# 선언된 변수는 리스트의 성분들을 하나씩 순회하면서,
# 문자열임에 따라 문자열 인덱싱을 통해 's'로 시작하는 문자열들은 리스트에 담기지 않는다.
not_s_cities = [city_first_name for city_first_name in cities if city_first_name[0] != "s"]
print(not_s_cities) # ['jakarta', 'tokyo', 'guangzhou', 'beijing', 'karachi']
이번 포스팅에선 Python의 반복문인 while, for문, List comprehension에 대해 살펴보았습니다.
다음 포스팅에선 Python의 함수에 대해 알아보겠습니다.
======================================================================
해당 포스팅에 대해 내용 추가가 필요하다고 생각되면 기존 포스팅 내용에 다른 내용이 추가될 수 있습니다.
개인적으로 공부하며 정리한 내용이기에 오타나 틀린 부분이 있을 수 있습니다.
이에 대해 지적해 주시면 감사하겠습니다.
'백엔드(Back-End) > Python' 카테고리의 다른 글
[Python] - 함수 - *args, **kwargs, 지역변수와 전역변수, Lambda Expression (0) | 2022.08.20 |
---|---|
[Python] - 함수(Function), 함수의 return (0) | 2022.08.19 |
[Python] - 제어문 - 조건문(if, elif) 여러 가지 연산자 (0) | 2022.08.17 |
[Python] - 자료형 - 집합(Set), Boolean (0) | 2022.08.15 |
[Python] - 자료형 - 딕셔너리(Dictionary) (0) | 2022.08.15 |
댓글