1. 반복문의 이해
반복문을 이해하기 위한 사례 : 우노(Uno) 카드 게임
- 일생생활에는 어떤 '조건'을 만족할 때까지 같은 행위를 계속 '반복'하는 사례를 쉽게 찾아볼 수 있다.
- 반복문의 종류 : for문, while문
- 사례 : 우노(Uno) 카드 게임
① 만약 색이나 숫자가 같다는 조건을 만족하면 해당 카드를 바닥에 내려놓지만, 만족하지 않으면 카드를 한 장 더 가져온다.
② 자신이 들고 있는 카드(보통 7장)가 소진될 때 까지 ① 을 계속 반복 처리한다.
리스트(list)의 개념
- 여러 데이터를 나열하여 저장하는 자료형
- 리스트(list)를 선언하여 입력된 데이터를 저장한 후 리스트의 색인(index, 첨자)으로 원하는 값을 편리하게 참조할 수 있어 프로그램을 효율적으로 작성할 수 있다. 색인(index)은 리스트의 위치를 의미하는 값으로 0, 1, 2, 3, ... 순으로 할당된다.
- 리스트의 각 원소(element)를 참조할 때 주로 for문과 같은 반복문을 같이 사용한다.
리스트의 선언
- 리스트 안의 값들을 콤마( , )로 구분하고, 대괄호 기호( [ ] )로 감싸서 정의한다.
# 리스트(list) 선언
list = [11, 21, 31, 41, 51]
# index를 사용하여 list의 값을 참조하는 방법
print(list[0])
11
print(list[3])
41
list[1] = 61
print(list)
[11, 61, 31, 41, 51]
2. 범위 함수 range( )
범위 함수 : range( )
- for문과 함께 많이 사용되는 범위(range)함수를 먼저 살펴보자.
- range( ) 함수는 단독으로 사용하지 않고 주로 리스트와 함께 사용된다.
① range(a) : 0부터 (a - 1)까지의 정수가 반환된다.
# case 1
list(range(5))
print(list)
[0, 1, 2, 3, 4] # 0부터 4(5 - 1)까지의 숫자를 출력
# case 2
a = range(8)
list(a)
print(list)
[0, 1, 2, 3, 4, 5, 6, 7] # 0부터 7(8 - 1)까지의 숫자를 출력
② range(a, b) : a부터 (b - 1)까지의 정수가 반환된다.
list(range(2, 8))
print(list)
[2, 3, 4, 5, 6, 7] # 2부터 7(8 - 1)까지의 숫자를 출력
③ range(a, b, c) : a부터 (b - 1)까지의 정수를 만드는데, 증가되는 값을 c로 하여 반환한다.
list(range(3, 16, 2))
print(list)
[3, 5, 7, 9, 11, 13, 15] # 3부터 15(16 - 1)까지 2씩 증가
※ range( ) 함수 지정 시 주의사항
① range(10), range(0, 10) 이라고 지정할 경우 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 이라고 생각하는 경우가 많다.
10이 포함되지 않는다는 것을 꼭 기억할 것!
② 13부터 19까지의 범위를 생성하는데, 19를 반드시 포함해야 한다는 것을 강조하기 위해 다음과 같이 작성하기도 한다.
teenager = range(13, 19+1)
list(teenager)
print(list)
[13, 14, 15, 16, 17, 18, 19]
③ range( ) 함수의 매개변수는 반드시 정수를 입력해야 한다. ( TypeError가 발생한다. )
int( ) 함수로 실수를 정수로 바꾸는 방법도 있지만, 나누기(몫) 연산자를 많이 이용한다.
# int( ) 함수를 이용하는 경우
n = 10
a = range(0, int(10 / 2))
list(a)
print(list)
[0, 1, 2, 3, 4]
# // 연산자를 이용하는 경우
m = 10
a = range(0, m // 2)
list(a)
print(list)
[0, 1, 2, 3, 4]
3. 지정된 범위만큼 반복하는 for문
for문의 필요성
- 원하는 횟수 또는 범위만큼 반복 수행할 때 for문을 사용한다.
- for문은 일반적으로 리스트 또는 문자열과 같은 열거형 데이터 타입의 각 항목들을 순차적으로 꺼내어 반복 수행할 때 사용된다.
- 문자열(string)은 결국 문자(character)가 나열되어 있기 때문에 열거형 데이터 타입으로 볼 수 있다.
for 변수 in 범위 :
명령문
for 반복문 : 리스트와 범위 조합하기
< 예제 1 >
for i in range(0, 13, 3) :
print('변수 i =', i)
< 예제 2 >
for n in range(10, 0, -1) :
print("현자 반복 변수 : {}".format(n))
# 10부터 1까지 -1씩 증가 (즉, 1씩 감소)
< 예제 3 >
# 입력
array = [88, 98, 72, 87, 92, 80]
sum = 0
# 연산 & 출력
for score in array :
sum = sum + score # sum += score
print('합계={}'.format(sum))
# print('합계=' + str(sum)) 문장과 같다.
< 예제 4 >
# 입력
score = [88, 98, 72, 87, 92, 80]
# 연산 & 출력
for i in range(len(score)) : # len(score) = 6
print("인덱스 {}번에 저장된 값 : {}".format(i, score[i]))
# 입력
fruit = ['사과', '포도', '딸기', '수박']
# 연산 & 출력
for i in range(len(fruit)) :
print("{}번째 요소는 {}".format(i, fruit[i]))
for문과 enumerate( ) 함수
- 파이썬에서는 < 예제 4 >와 같은 코드를 쉽게 작성할 수 있도록 enumerate( ) 함수가 있다.
< 예제 5 >
# 입력
fruit = ['사과', '포도', '딸기', '수박']
# 연산 & 출력
for i, value in enumerate(fruit) :
print("{}번째 요소는 {}".format(i, value))
# 변수 i 에는 index, 변수 value에는 인덱스에 해당되는 값이 차례대로 할당된다.
for문 활용 예제
< 예제 1 > "땡구 실험실!" 출력문을 5번 반복하는 for문을 작성하시오.
# list를 이용하는 방법
for i in [0, 1, 2, 3, 4] :
print("땡구 실험실!")
# range( ) 함수를 이용하는 방법
for i in range(5) :
print("땡구 실험실!)
< 예제 2 > 문자열도 리스트와 같은 연속적인 데이터를 표현하므로 각 문자를 변수 i 에 할당하여 출력하시오.
for i in 'PYTHON' :
print(i)
# 줄바꿈 X
for i in 'PYTHON' :
print(i, end='')
< 예제 3 > 1부터 100까지 정수의 합을 구하시오.
# 입력
sum = 0
# 연산
for i in range(1, 100+1) :
sum = sum + i # sum += i
# 출력
print("sum={}".format(sum))
< 예제 4 > 5팩토리얼(5!)의 값을 구하시오. ( 5! = 1 * 2* 3* 4* 5 )
# 입력
fact = 1
# 연산
for i in range(1, 5+1) :
fact = fact * i # fact *= i
# 출력
print('5!={}'.format(fact))
< 예제 5 > 문자열로 이루어진 리스트의 값을 꺼내어 for문으로 출력하시오.
for i in ['americano', 'latte', 'espresso'] :
print(i)
< 예제 6 > 1부터 10까지 정수 범위에 대하여 for문으로 짝수, 홀수를 구분하는 프로그램을 작성하시오.
for n in range(1, 10+1) :
if n % 2 == 0 :
print("{:2d}은 짝수".format(n))
else :
print("{:2d}은 홀수".format(n))
# {:2d}는 변수 n에 저장된 값을 출력할 때 2칸을 기준으로 출력한다.
# 한 자릿수는 _1, _2, _3 ( _는 공백을 가시적으로 나타낸 것으로 실제 출력문에선는 공백이다. )
# 두 자릿수는 11, 12, 13
< 예제 7 > 하나의 정수를 입력 받아 그 수의 약수를 모두 출력하시오.
# 입력
n = int(input("양의 정수를 입력하세요 : "))
# 연산 & 출력
print("{}의 약수 :".format(n), end='')
for i in range(1, n+1) : # 1부터 n까지의 수에 대하여
if n % i == 0 : # n을 i로 나누었을 때 나머지가 0인지 확인하여 약수인지 아닌지를 판별한다.
print('{}'.format(i). end='') # 나머지가 0이라면 해당 i 값을 출력
< 예제 8 > 2부터 9까지 정수 중 하나를 입력 받아 해당되는 구구단을 출력하는 프로그램을 for문으로 작성하시오.
# 입력
dan = int(input("구구단의 단을 입력(2~9) : "))
# 연산 & 출력
print("=== {}단 ===".format(dan))
for i in range(1, 9+1) :
print("{} * {} = {}".format(dan, i, (dan*i)))
< 예제 9 > 표를 보고 이름(names)과 시험점수(scores) 리스트를 각가 선언한 후, 이름에 해당하는 점수를 출력하시오.
이름 | James | Robert | Lisa | Mary |
점수 | 95 | 96 | 97 | 94 |
# 입력
names = ['James', 'Robert', 'Lisa', 'Mary']
scores = [95, 96, 97, 94]
# 연산 & 출력
for i in range(len(names)) :
print(names[i], score[i])
# 입력
names = ['James', 'Robert', 'Lisa', 'Mary']
scores = [95, 96, 97, 94]
# 연산 & 출력
for name, score in zip(names, scores) :
print(name, score)
# 길이가 같은 리스트가 여러 개 있는 경우, 같은 길이의 데이터를 하나로 묶어주는 zip( ) 함수
4. break와 continue문
반복문의 제어 : ① break문 : 반복문을 빠져나오는 break문
- 반복문에서 중간에 반복을 종료하거나 실행 중인 반복문을 건너뛸 수도 있는 제어문이 있다.
- for문과 while문에서도 사용된다.
- break문, continue문이 있다.
① break문 : break문은 해당 문장이 포함된 반복문을 빠져나온다.
for i in range(10) :
if i == 5 :
break
print("i={}".format(i))
print("프로그램 종료")
# 프로그램은 0부터 4까지 출력하고, i 값이 5가 되는 순간 반복문을 빠져나와 프로그램이 종료된다.
반복문의 제어 : ② continue문 : 다음 반복문을 실행하는 continue문
② continue문 : continue문은 break문과 달리 남은 명령을 건너뛰고 다음 반복문을 계속 수행한다.
for i in range(10) :
if i == 5 :
continue
print("i={}".format(i))
print("프로그램 종료")
# 프로그램은 0부터 4까지 출력하고 i 값이 5가 되는 순간 해당 명령은 건너뛴다.
# 그리고 남은 6부터 9까지 다시 명령문을 반복하여 출력한다.
5. 조건에따라 반복하는 while문
while문의 구조
- while문은 주어진 조건식이 참(True)인 동안 블록으로 지정된 문장들을 반복 수행하는 논리구조
- while문은 먼저 조건식을 평가하여 만약 참이라면 블록 안에 명령문들을 수행하며, 거짓이라면 while문을 빠져나가 다음 문장을 수행한다.
- 따라서, 일반적으로 반복 수행할 문장에는 반복을 벗어나도록 조건식을 거짓으로 만드는 문장이 존재한다.
while 조건식 :
반복 수행할 명령문
원하는 조건을 만족할 때까지 반복하는 while문 예제 : 커피 자판기 프로그램
- while문은 조건문이 참인 동안 계속해서 while문 안의 내용을 반복적으로 수행한다. 하지만 강제로 while문을 빠져나가고 싶을 때가 있다. 이때 break문을 사용한다.
- 커피 자판기를 생각해 보자.
- 커피 한 잔에 300원
- 자판기 안에 커피가 충분히 있을 때에는 돈을 넣으면 커피가나오며, 거스름돈도 계산되어 출력한다.
- 만약 커피가 다 떨어졌다면 판매를 중단하고, '판매중지'라고 표시한다.
- 반복문 안에서 break문을 만나면 반복문을 벗어나 다음 문장을 수행한다.
coffee = 5
while True :
if not coffee :
print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
break
cost = int(input('돈을 넣어주세요 : '))
if cost == 300 :
print('커피 1잔이 나왔습니다.')
coffee = coffee - 1
elif cost > 300 :
print('커피 1잔이 나왔습니다.')
coffee = coffee - 1
change = cost - 300
print('거스름 돈 : {}원'.format(change))
else :
print('커피 가격은 300원입니다. 금액이 부족합니다.')
print('잔액 {}원을 돌려드립니다.'.format(cost))
# 3번 라인 : if coffee == 0 : 과 동일한 의미
# cost : 지불 비용
# change : 거스름 돈
# coffee : 남은 커피 수
'Data Analysis > Python' 카테고리의 다른 글
[Python] 기초 파이썬 - 조건 제어문 (1) | 2024.02.25 |
---|---|
[Python] 기초 파이썬 - 자료형과 연산자 (1) | 2024.02.25 |