본문 바로가기

Python/Python Programming

Part03 Chapter.01 파이썬 프로그래밍-08. for, while (실습)

Iteration(while, For)

1. while statement

  • while문은 조건을 만족할 때 까지 반복한다.
  • while (조건)  :
 <statement1>
 <statement2>
 <statement3>
  • 조건이 만족하는 동안(while) statement1, 2, 3을 반복한다..

구구단을 통해 연습해봅시다!

# 2단을 while문으로 구현해봅시다.
number = 1
while number < 10:
    print("2 X %d = %d" % (number, 2 * number))
    number = number + 1
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10
2 X 6 = 12
2 X 7 = 14
2 X 8 = 16
2 X 9 = 18

 

실제 자판기 기계는 돈을 한번 넣고 종료되지 않는다. 자판기 기계(프로그램)이 종료되는 경우는

커피가 다 떨어졌을 때이다.

# 자판기의 커피 수량
coffee = 5

# 커피가 남아있는 동안 작동!
while coffee > 0:

    # 실제로는 자판기를 통해서 넣은 금액.
    money = int(input("금액을 입력해주세요 : "))
    
    if money == 300:
        # 실제로 이 파트는 자판기에서 커피를 뽑는 명령으로 대체된다.
        print("Coffee")
        # 이제 커피를 하나씩 줄인다.
        coffee = coffee - 1 

    elif money < 300:
        # 실제로 이 파트는 돈을 반환한다.
        print("%d원을 돌려줍니다." % money)
        
     
    else: # or elif money > 300:

        # 커피를 뽑아주고
        print("Coffee")
        # 이제 커피를 하나씩 줄인다.
        coffee = coffee - 1 
        # 거스름돈을 돌려준다.
        print("%d원을 돌려줍니다." % (money - 300))
    # 커피가 다 떨어진 경우 알려야한다.
print("커피가 모두 소진되었으니, 관리자에게 문의해주세요.")
더보기
금액을 입력해주세요 : 500
Coffee
200원을 돌려줍니다.
금액을 입력해주세요 : 300
Coffee
금액을 입력해주세요 : 150
150원을 돌려줍니다.
금액을 입력해주세요 : 1000
Coffee
700원을 돌려줍니다.
금액을 입력해주세요 : 700
Coffee
400원을 돌려줍니다.
금액을 입력해주세요 : 400
Coffee
100원을 돌려줍니다.
커피가 모두 소진되었으니, 관리자에게 문의해주세요.

 

 

 

2. for statement

  • while문은 조건이 만족하는 동안 반복을 수행했지만, for문은 지정 횟수동안 반복을 수행한다.
여기서 지정된 횟수라는 것은 반복 대상의 크기가 된다.
  • 보통 iterable object(반복 가능한 객체)를 대상으로 수행되며, 연속형 데이터 타입 변수들이 여기에 해당된다
List, Tuple, string, ...
  • for 변수 in 리스트(튜플, 문자열, iterator):
<statement1>
<statement2>
<statement3>
  • 리스트(나 반복가능한 변수들)의 모든 원소를 (자동으로 끝까지) 반복한다
# 원소가 1, 2, 3인 리스트의 원소를 하나하나 출력하는 반복문을 만든다.
L = [1, 2, 3]
for i in L:
    print(i)
1
2
3

 

6개의 커피 음료가 담긴 리스트가 있다. 카페에 있는 모든 음료를 출력해보자!

coffees = ['아메리카노', '카페라떼', '카페모카', '바닐라라떼', '핸드드립', '콜드브루']
for coffee in coffees:
    print(coffee)
아메리카노
카페라떼
카페모카
바닐라라떼
핸드드립
콜드브루

 

for문의 단짝 range() 함수

  • for문은 특정 횟수동안 반복을 하기 때문에, 횟수를 자동으로 만들어주는 기능이 있으면 좋다.
  • 파이썬에서 기본적으로 제공하는 range 함수는 특정 숫자 범위내의 값들을 자동으로 생성해주는 함수이다.

e.g. range(1, 5)는 1, 2, 3, 4를 차례대로 생성해준다. (5는 범위에서 제외된다. 즉, 마지막 숫자는 제외된다. 1 <= x < 5)

# range 함수를 이용해 1부터 4까지 출력하는 프로그램을 작성해보자. for문을 이용해서!
for i in range (1, 5):
    print(i)
1
2
3
4

 

6개의 커피 음료와 음료의 가격이 담긴 리스트가 있다. 가지고 있는 돈이 5,000원일 때 먹을 수 있는 모든 음료를 찾아보자!

coffees = ['아메리카노', '카페라떼', '카페모카', '바닐라라떼', '핸드드립', '콜드브루']
prices = [4100, 4600, 4600, 5100, 6000, 5000]

for i in range(0,6):
    if prices[i] <= 5000:
        print(coffees[i])
아메리카노
카페라떼
카페모카
콜드브루

 

RE : 6개의 커피 음료와 음료의 가격이 담긴 리스트가 있다. 오늘은 할인 행사를 하여 모든 음료가 500원 할인 되었다! 가지고 있는 돈이 5,000원일 때 먹을 수 있는 모든 음료를 찾아보자!

coffees = ['아메리카노', '카페라떼', '카페모카', '바닐라라떼', '핸드드립', '콜드브루']
prices = [4100, 4600, 4600, 5100, 6000, 5000]

# 1. index를 사용하는 방법
for i in range(len(coffees)):
    if prices[i] -500 <= 5000:
        print(coffees[i])

print()
# 2. enuerate를 사용하는 방법
for idx, price in enumerate(prices):
    if price - 500 <= 5000:
        print(coffees[idx])

print()
# 3. zip을 사용하는 방법
for coffee, price in zip(coffees, prices):
    if price - 500 <= 5000:
        print(coffee)
아메리카노
카페라떼
카페모카
바닐라라떼
콜드브루

아메리카노
카페라떼
카페모카
바닐라라떼
콜드브루

아메리카노
카페라떼
카페모카
바닐라라떼
콜드브루

 

enumerate 함수

 

  • 반복문 사용 시 몇 번째 반복문인지 확인이 필요할 수 있습니다. 이때 사용합니다.
  • 인덱스 번호와 컬렉션의 원소를 tuple형태로 반환합니다.
>>> t = [1, 5, 7, 33, 39, 52]
>>> for p in enumerate(t):
...     print(p)
... 
(0, 1)
(1, 5)
(2, 7)
(3, 33)
(4, 39)
(5, 52)

 

zip 함수

  • 여러 개의 iterable자료형이 개수가 동일할 때 사용한다.
  • iterable 자료형의 각각의 요소를 나눈 후 순서대로 묶어서 요소 개수만큼 새로운 iterable 자료형을 생성한다.
  • 여기에서 말하는 interable자료형은 리스트, 튜플 같이 반복 가능한 자료형을 의미한다
# iterable자료형
>>> num = [1, 2, 3]
>>> fruit = ['apple', 'banana', 'orange']
>>> color = ['red', 'yellow', 'orange']

# 위와 같은 요소 개수가 같은 3개의 리스트가 있는 경우, 왼쪽부터 슬라이스 하듯 각 리스트에서 
# 인덱스 위치 순서가 동일한 요소끼리 나눈 후 묶어주는 것이다. 

 # zip함수로 묶어줌
>>> zip_list = zip(num, fruit, color)
>>> print(zip_list, type(zip_list))
<zip object at 0x0000020180766048> <class 'zip'>  #zip 타입으로 출력

>>> print(list(zip_list))  # list 타입으로 변환
[(1, 'apple', 'red'), (2, 'banana', 'yellow'), (3, 'orange', 'orange')]

# 3개의 리스트
num = [1, 2, 3]
fruit = ['apple', 'banana', 'orange']
color = ['red', 'yellow', 'orange']

# zip함수를 이용한 출력값
[(1, 'apple', 'red'), (2, 'banana', 'yellow'), (3, 'orange', 'orange')]

 

반복문을 제어하는 break, continue

  • 만약 반복문을 수행하다가 더 이상 반복이 필요없는 경우에는 어떻게 해야할까?
break statement
  • 만약 반복문을 수행하다가 특정 조건에만 건너뛰고 싶은 경우에는 어떻게 해야할까?
continue statement

 

RE : 실제 자판기 기계는 돈을 한번 넣고 종료되지 않는다. 자판기 기계(프로그램)이 종료되는 경우는 커피가 다 떨어졌을 때이다.

Q. 커피가 다 떨어질 때 까지 자판기 프로그램을 반복하면서 실행한 뒤, 돈을 입력받아서 커피를 주는 프로그램을 작성해보자.
# 자판기의 커피 수량
coffee = 5

# 일단 작동!
while True: # 영원히 반복 (infinite Loop)

    if coffee == 0:
        break
    # 실제로는 자판기를 통해서 넣은 금액.
    money = int(input("금액을 입력하세요."))

    
    if money == 300:
        # 실제로 이 파트는 자판기에서 커피를 뽑는 명령으로 대체된다.
        print("Coffee")
        # 이제 커피를 하나씩 줄인다.
        coffee = coffee - 1

    elif money < 300:
        # 실제로 이 파트는 돈을 반환한다.
        print("%d원을 반환합니다." % money)
     
    else: # or elif money > 300:
        print("Coffee")
        # 커피를 뽑아주고
        coffee = coffee - 1
        # 이제 커피를 하나씩 줄인다.
        print("%d원을 반환합니다." % (money-300))
        # 거스름돈을 돌려준다.
        
        
    # 커피가 다 떨어진 경우 알려야한다.
print("커피가 모두 소진되었으니, 관리자에게 문의해주세요.")
더보기
# 자판기의 커피 수량
coffee = 5

# 일단 작동!
while True: # 영원히 반복 (infinite Loop)

    if coffee == 0:
        break
    # 실제로는 자판기를 통해서 넣은 금액.
    money = int(input("금액을 입력하세요."))

    
    if money == 300:
        # 실제로 이 파트는 자판기에서 커피를 뽑는 명령으로 대체된다.
        print("Coffee")
        # 이제 커피를 하나씩 줄인다.
        coffee = coffee - 1

    elif money < 300:
        # 실제로 이 파트는 돈을 반환한다.
        print("%d원을 반환합니다." % money)
     
    else: # or elif money > 300:
        print("Coffee")
        # 커피를 뽑아주고
        coffee = coffee - 1
        # 이제 커피를 하나씩 줄인다.
        print("%d원을 반환합니다." % (money-300))
        # 거스름돈을 돌려준다.
        
        
    # 커피가 다 떨어진 경우 알려야한다.
print("커피가 모두 소진되었으니, 관리자에게 문의해주세요.")

 

 

RE : 실제 자판기 기계는 돈을 한번 넣고 종료되지 않는다. 자판기 기계(프로그램)이 종료되는 경우는 커피가 다 떨어졌을 때이다.

Q. 커피가 다 떨어질 때 까지 자판기 프로그램을 반복하면서 실행한 뒤, 돈을 입력받아서 커피를 주는 프로그램을 작성해보자.
이번에는 돈이 모자랄 때는, 추가로 돈을 입력받아 300원을 넘는 경우에 커피를 뽑아주는 프로그램을 작성해보자.

# 자판기의 커피 수량
coffee = 5
# 거스름돈 보관
change = 0

# 일단 작동!
while coffee > 0:

    # 실제로는 자판기를 통해서 넣은 금액.
    money = int(input("금액을 입력해주세요 : "))
    # 잔고와 합쳐서 체크
    money  = money + change

    
    if money == 300:
        # 실제로 이 파트는 자판기에서 커피를 뽑는 명령으로 대체된다.
        print("Coffee")
        # 이제 커피를 하나씩 줄인다.
        coffee = coffee - 1

    elif money < 300:
        # 돈을 더 받자.
        print("돈이 모자랍니다, 추가로 금액을 입력해주세요.")
        change = money # 잔고를 저장
        continue # 정산을 하지 않고 위로다시 올라감!
        
    else: # or elif money > 300:
        print("Coffee")
        # 커피를 뽑아주고
        coffee = coffee - 1
        # 이제 커피를 하나씩 줄인다.
        print("%d원을 반환합니다." % (money-300))
        # 거스름돈을 돌려준다.

    # 정산
    change = 0
        
    # 커피가 다 떨어진 경우 알려야한다.
print("커피가 모두 소진되었으니, 관리자에게 문의해주세요.")
더보기
금액을 입력해주세요 : 150
돈이 모자랍니다, 추가로 금액을 입력해주세요.
금액을 입력해주세요 : 200
Coffee
50원을 반환합니다.
금액을 입력해주세요 : 100
돈이 모자랍니다, 추가로 금액을 입력해주세요.
금액을 입력해주세요 : 500
Coffee
300원을 반환합니다.
금액을 입력해주세요 : 200
돈이 모자랍니다, 추가로 금액을 입력해주세요.
금액을 입력해주세요 : 300
Coffee
200원을 반환합니다.
금액을 입력해주세요 : 1500
Coffee
1200원을 반환합니다.
금액을 입력해주세요 : 300
Coffee
커피가 모두 소진되었으니, 관리자에게 문의해주세요.

 

 

전설의 구구단 구현. nested loop를 연습해보자!

# nested loop를 이용하여 구구단을 구현합시다. 

for dan in range(2 , 10):
    for number in range(1, 10):
        print("%d x %d = %d" % (dan, number, number*dan))
    print()
더보기
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18

3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27

4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
4 x 5 = 20
4 x 6 = 24
4 x 7 = 28
4 x 8 = 32
4 x 9 = 36

5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45

6 x 1 = 6
6 x 2 = 12
6 x 3 = 18
6 x 4 = 24
6 x 5 = 30
6 x 6 = 36
6 x 7 = 42
6 x 8 = 48
6 x 9 = 54

7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63

8 x 1 = 8
8 x 2 = 16
8 x 3 = 24
8 x 4 = 32
8 x 5 = 40
8 x 6 = 48
8 x 7 = 56
8 x 8 = 64
8 x 9 = 72

9 x 1 = 9
9 x 2 = 18
9 x 3 = 27
9 x 4 = 36
9 x 5 = 45
9 x 6 = 54
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81