본문 바로가기

나는개발자다!!/Python

Python 조금 얼굴이 붉어지는 세번째 썰......

이번 썰에서는 파이썬의 맛을 조금 보았겠다.....

예제관련하여 소스 코드를 올려볼까 한다.

이 예제를 가지고 다음 썰 등에서 조금 더 업그레이드를 할 수도 있을꺼라고 생각한다.....

Maybe....

(알고리즘의 구현이나.... UML도요~)

 

이번 썰에서 올려 볼 파이썬 예제는 이러하다....

 바로바로 !!!

커피 자판기이다.

 

 

1. 커피자판기는 커피가 있어야 판매를 할 수 있다. (여기서는 기본값을 10을 주었다)

2. 각 커피별로 금액을 다르게 한다.

3. 커피가 다 떨어지면 커피 판매는 종료된다.

4. 커피 판매액은 누적되어야한다.

 

※ 2번의 각 커피라고 되어있는데 추후에 메뉴를 추가 할 수 있어야 한다.

(이 3번 같은 경우 커피 메뉴를 자바에서처럼 class 자료형을 빼서 메인으로 주입을 해 주고 (DI)

인터페이스를 이용했다면 본문의 수정 없이도 메뉴 추가가 가능했을 텐데..

아직 파이썬에서 그 정도까지 진도가 안 나가서... 메인은 수정을 하되

메뉴 숫자에 따라서 유기적으로 돌아가도록 하느라고 리스트, 배열, 해쉬구조의 짬뽕이 되었다.

덕분에 우리는 메뉴를 추가할때 메뉴번호 : {메뉴이름:가격} 의 2중 해쉬 구조로 추가만 해 주면

소스의 수정 없이 돌아가도록 소스를 구현했다.

 

"""
반복문을 이용한 커피 자판기
"""

 

"""
커피를 한번 주문 시 마다 -1이 된다.
커피 판매 금액은 누적시킨다.
커피가 다 떨어지면 판매를 중지한다.
추후에 커피가 추가 될 수 있으므로 확장성을 고려했다.
추가되는 커피는 hash_menu에 해쉬형태로 입력하는 것으로 추가가 가능하다.
"""
coffee = 10
costs = 0
total = 0

# 메뉴번호:{}  <-- 2중 해쉬구조로 입력 받는다.
hash_menu = { 1:{"아메리":300}, 2:{"라떼":350}, 3:{"그린티":400}, 4:{"안 사요":0}, 5:{"스페샬":900} }

 

list = []

for i in hash_menu :
    list.append( hash_menu.get(i) )

# 메뉴 만들기
while coffee :
    i = 1
    show_m = ""
    for z in list :
        for m_name in z.keys() :
            print("%s. %s price : %s " %(i, m_name, z.get(m_name) ))
        i += 1

    print("#"*25)
    print("커피를 판매합니다. 커피를 선택해주십시요.")
    print("#"*25)
    menu_sel = int(input())

    # 메뉴에 없는 것 선택 시
    if menu_sel > len(list) :
        print("메뉴에 없는 메뉴입니다. 다시 선택해 주십시요.\n")
        continue


    for sel in  list[menu_sel-1] :
        print("선택하신 커피는 %s 입니다. 가격은 %s 입니다." % (sel,  list[menu_sel-1].get(sel)) )
        total = total + list[menu_sel-1].get(sel)

    coffee -= 1
    print( "coffee의 잔량은 %s 입니다. 현재까지 총 수익금은 %s원 입니다.\n" %(coffee, total) )

    if coffee < 0 :
        coffee = 0

    if menu_sel == 4 :
        coffee = 0

 

 

 

'나는개발자다!! > Python' 카테고리의 다른 글

파이썬 그 두번째 썰~  (0) 2014.09.23
Python 관련 첫번째 썰~  (0) 2014.09.16