본문 바로가기

Study/class note

python / 튜플형 , 사전형 자료 이해하기

문제140. 나중에 오라클 데이터 베이스에 커피주문에 대한 모든 데이터를 넣기 위해 주문번호가 아래와 같이 출력되게 하시오.

print('1번:아메리카노:1500원 \n2번:카페라떼:2500원 \n3번:카페모카:3500원')

coffee1 = 20   #아메리카노 
coffee2 = 10   #카페라떼
coffee3 = 30   #카페모카

c1_price = 1500
c2_price = 2500
c3_price = 3500

coupon = 0
order_no = 1

while True:
    num = int(input('\n%d번손님,주문하시겠습니까? \n메뉴를 골라주세요. 번호를 눌러주세요.'%order_no))
    if num == 1:
        print('아메리카노를 선택하셨습니다.')
        cup = int(input('몇 잔 주문하시겠습니까?'))
        if cup > coffee1:
            print('죄송합니다. 주문량에 비해 아메리카노가 부족합니다.')
            print('현재 주문 가능한 수량은 %d잔 입니다.' %coffee1, '다시 입력해주세요.')
            cup = int(input('몇 잔 주문하시겠습니까?'))
        print('\n결제하실 금액은',c1_price * cup, '원 입니다.')
        money = int(input('돈을 입력하세요~'))
        if coffee1 >= cup and money >= c1_price * cup:
            print('\n주문번호 %d'%order_no)
            print('아메리카노가 나왔습니다. 거스름돈은 ',money - c1_price*cup,'원 입니다.')
            print('쿠폰이 %d개 발급되었습니다. 20개를 모으면 한잔 무료입니다.'%cup)
            coffee1 -= cup
            coupon += cup
            wait += 1
            print('현재 쿠폰이 %d개 있습니다.'%coupon)
        elif coffee1 >= cup and money < c1_price * cup:
            print('금액이 부족합니다. 돈을 반환합니다.')
            
    elif num == 2:
        print('카페라떼를 선택하셨습니다.')
        cup = int(input('몇 잔 주문하시겠습니까?'))
        if cup > coffee2:
            print('죄송합니다. 주문량에 비해 카페라떼가 부족합니다.')
            print('현재 주문 가능한 수량은 %d잔 입니다.' %coffee2, '다시 입력해주세요.')
            cup = int(input('몇 잔 주문하시겠습니까?'))
        print('\n결제하실 금액은',c2_price * cup, '원 입니다.')
        money = int(input('돈을 입력하세요~'))
        if coffee2 >= cup and money >= c2_price * cup:
            print('\n주문번호 %d'%order_no)
            print('카페라떼가 나왔습니다. 거스름돈은 ',money - c2_price*cup,'원 입니다.')
            print('쿠폰이 %d개 발급되었습니다. 20개를 모으면 한잔 무료입니다.'%cup)
            coffee2 -= cup
            coupon += cup
            wait += 1
            print('현재 쿠폰이 %d개 있습니다.'%coupon)
        elif coffee2 >= cup and money < c2_price * cup:
            print('금액이 부족합니다. 돈을 반환합니다.')
            continue
            
    elif num == 3:
        print('카페모카를 선택하셨습니다.')
        cup = int(input('몇 잔 주문하시겠습니까?'))
        if cup > coffee3:
            print('죄송합니다. 주문량에 비해 카페모카가 부족합니다.')
            print('현재 주문 가능한 수량은 %d잔 입니다.' %coffee3, '다시 입력해주세요.')
            cup = int(input('몇 잔 주문하시겠습니까?'))
        print('\n결제하실 금액은',c3_price * cup, '원 입니다.')
        money = int(input('돈을 입력하세요~'))
        if coffee3 >= cup and money >= c3_price * cup:
            print('\n주문번호 %d'%order_no)
            print('카페모카가 나왔습니다. 거스름돈은 ',money - c3_price*cup,'원 입니다.')
            print('쿠폰이 %d개 발급되었습니다. 20개를 모으면 한잔 무료입니다.'%cup)
            coffee3 -= cup
            coupon += cup
            wait += 1
            print('현재 쿠폰이 %d개 있습니다.'%coupon)
        elif coffee3 >= cup and money < c3_price * cup:
            print('금액이 부족합니다.돈을 반환합니다.')
            continue
            
    else:
        print('메뉴가 없습니다.')
        continue

 

037 튜플 이해하기(( ))

튜플은 리스트와 비슷한 성질을 가지고 있는 자료형이지만 요소값을 변경할 수 없다는 특징이 있음.

리스트는 대괄호 [ ] 를 요소로 감샀는데 튜플은 소괄호 ( ) 를 요소로 감쌈.

튜플은 데이터가 변경이 안되므로 튜플로 만든 데이터에 대한 신뢰도가 높아짐.

예제.아래의 튜플 자료형 변수k를 만들고 k변수에서 알파벳 d를 출력하시오.

k = ('a','b','c','d','e')
print(k[3])

예제. 아래의 리스트 자료형 변수 m을 만들고 m변수에서 알파벳 b를 출력하시오.

m = ['a','b','c','d','e']
m[1]

예제. 위의 m 리스트 변수의 1번째 요소인 알파벳 b를 f로 변경하시오.

m = ['a','b','c','d','e']
m[1] = 'f'
m

['a', 'f', 'c', 'd', 'e']

예제. 위의 튜플 자료형 변수의 1번째 요소를 f로 변경하시오.

k = ('a','b','c','d','e')

k[1] = 'f'

#TypeError :  'tuple' object does not support item assignment

위와 같이 변경이 안되게 자료구조를 만들어서 저장해야할 데이터?

> 통신사 할인에 대한 할인율 데이터, 편의점 또는 대형마트에서 사용하는 포인트 적립 할 때의 포인트 적립률 등을 튜플로 구성.

acc_rate_items = ['sk','lg','kt']        #리스트로 생성
acc_rate_values = (0.01, 0.03, 0.02)     #튜플로 생성

문제141. 위의 acc_rate_values변수의 자료형을 확인하시오.

acc_rate_values = (0.01, 0.03, 0.02)

print(type(acc_rate_values))       #<class 'tuple'>

 

 

038 사전 이해하기({ })

사전형은 키와 값을 하나의 요소로 하는 순서가 없는 집합

그러므로 사전은 시퀀스 자료형은 아니며 인덱싱으로 값을 접근 할 수도 없음.

사전은 '키:값' 쌍으로 이루어진 하나의 요소

예제. apple의 한글 뜻이 무엇인가요?

a = {'apple':'사과','banana':'바나나','peach':'복숭아','pear':'배'}
     # 키   :  값
     
a['apple']

예제. 영어 단어를 한글 뜻과 함께 계속 a딕셔너리에 추가하고 싶다면?

a = {'apple':'사과','banana':'바나나','peach':'복숭아','pear':'배'}
     
a['grape'] = '포도'

예제. a 사전에서 키값만 추출하고 싶다면?

print(a.keys())

예제. a 사전에서 값들만 추출하고 싶다면?

print(a.values() )

예제. a 사전에서 키와 값을 같이 추출하고 싶다면?

print( a.items() )

예제. 키는 하나인데 값들을 여러개가 있는 딕셔너리를 구성하려면 ?

music = { }   # 비어있는 딕셔너리를 생성
music['비틀즈'] = ['let it be','hey jude','yesterday']
music['소녀시대'] = ['Gee','다시 만난 세계','party']

print(music)

문제142. 주문번호를 key로 하고 커피종류와 주문수량을 값으로 하는 아래의 딕셔너리를 생성하시오.

cafe_dict = {}
cafe_dict[1] = ['아메리카노',2]
cafe_dict[2] = ['카페모카',3]
cafe_dict[3] = ['카페라떼',1]

문제143. 아래와 같이 딕셔너리를 생성하시오

cafe_dict = {}
cafe_dict['주문번호']=[1,2,3]
cafe_dict['커피종류']=['아메리카노','카페모카','카페라떼']
cafe_dict['수량']=[2,3,1]

문제144. 위에서 만든 cafe_dict 딕셔너리를 판다스로 구성할 수 있도록 판다스의 data frame으로 변환하시오.

(판다스의 데이터 프레임(data frame)은 오라클의 테이블(table)이라고 생각하면 됨)

import pandas as pd

cafe = pd.DataFrame( cafe_dict, columns = ['커피종류','수량'] )     
cafe

딕셔너리로 판다스 데이터 프레임을 생성하려면, 딕셔너리의 키값을 컬럼으로 구성되게 하고 딕셔너리의 값들이 데이터 프레임의 데이터가 되게하면 됨.

 

문제145. cafe_dict에 새로운 주문 4번이 들어와서 주문데이터가 cafe_dict에 입력되게 하시오.

cafe_dict = {}
cafe_dict['주문번호']=[1,2,3]
cafe_dict['커피종류']=['아메리카노','카페모카','카페라떼']
cafe_dict['수량']=[2,3,1]

cafe_dict['주문번호'].append(4)
cafe_dict['커피종류'].append('아메리카노')
cafe_dict['수량'].append(2)

cafe = pd.DataFrame( cafe_dict )     
cafe

문제146. 위의 딕셔너리를 데이터가 쌓이는 키오스크에 적용하려면 첫주문이 발생하기 전에 먼저 딕셔너리가 구성되어야하고 주문이 발생하면 append가 되어지게 해야함. 그럴러면 어떻게 해야할까요? 

cafe_dict = {}
cafe_dict['주문번호']=[]
cafe_dict['커피종류']=[]
cafe_dict['수량']=[]

cafe_dict['주문번호'].append(1)
cafe_dict['커피종류'].append('아메리카노')
cafe_dict['수량'].append(3)

cafe_dict

 문제147. 우리가 만든 커피 키오스크 코드에 주문번호, 커피종류, 수량 데이터가 쌓일 수 있도록 딕셔너리를 구성하시오.

import pandas as pd

print('1번:아메리카노:1500원 \n2번:카페라떼:2500원 \n3번:카페모카:3500원 \n4번:결산(관리자용)')

coffee1 = 20   #아메리카노 
coffee2 = 10   #카페라떼
coffee3 = 30   #카페모카

c1_price = 1500
c2_price = 2500
c3_price = 3500

coupon = 0
order_no = 1

cafe_dict = {}
cafe_dict['주문번호'] = []
cafe_dict['커피종류'] = []
cafe_dict['수량'] = []

while True:
    if coffee1 == 0 and coffee2 == 0 and coffee3 == 0:
        print('\n\n\n모든 커피가 품절입니다.')
        print('='*40)
        break
    num = int(input('\n%d번손님,주문하시겠습니까? \n메뉴를 골라주세요. 번호를 눌러주세요.'%order_no))
    if num == 1:
        print('아메리카노를 선택하셨습니다.')
        if coffee1 == 0:
            print('\n아메리카노 : 품절')
            print('> 현재 주문가능한 메뉴 < \n 카페라떼 %d개 \n 카페모카 %d개'%(coffee2,coffee3))
            continue
        cup = int(input('몇 잔 주문하시겠습니까?'))
        if cup > coffee1:
            print('\n죄송합니다. 주문량에 비해 아메리카노가 부족합니다.')
            print('현재 주문 가능한 수량은 %d잔 입니다.' %coffee1, '다시 입력해주세요.')
            cup = int(input('몇 잔 주문하시겠습니까?'))
        print('\n결제하실 금액은',c1_price * cup, '원 입니다.')
        money = int(input('돈을 입력하세요~'))
        if coffee1 >= cup and money >= c1_price * cup:
            print('\n[주문번호 %d]'%order_no)
            print('아메리카노가 나왔습니다. 거스름돈은 ',money - c1_price*cup,'원 입니다.')
            print('쿠폰이 %d개 발급되었습니다. 20개를 모으면 한잔 무료입니다.'%cup)
            coffee1 -= cup
            coupon += cup
            print('현재 쿠폰이 %d개 있습니다.'%coupon)
            print('='*40)
            
            cafe_dict['주문번호'].append(order_no)
            cafe_dict['커피종류'].append('아메리카노')
            cafe_dict['수량'].append(cup)
            
            order_no += 1
            
        elif coffee1 >= cup and money < c1_price * cup:
            print('금액이 부족합니다. 돈을 반환합니다.')
            print('='*40)
            continue
            
    elif num == 2:
        print('카페라떼를 선택하셨습니다.')
        if coffee2 == 0:
            print('\n카페라떼 : 품절')
            print('> 현재 주문가능한 메뉴 < \n 아메리카노 %d개 \n 카페모카 %d개'%(coffee1,coffee3))
            continue
        cup = int(input('몇 잔 주문하시겠습니까?'))
        if cup > coffee2:
            print('\n죄송합니다. 주문량에 비해 카페라떼가 부족합니다.')
            print('현재 주문 가능한 수량은 %d잔 입니다.' %coffee2, '다시 입력해주세요.')
            cup = int(input('몇 잔 주문하시겠습니까?'))
        print('\n결제하실 금액은',c2_price * cup, '원 입니다.')
        money = int(input('돈을 입력하세요~'))
        if coffee2 >= cup and money >= c2_price * cup:
            print('\n[주문번호] %d'%order_no)
            print('카페라떼가 나왔습니다. 거스름돈은 ',money - c2_price*cup,'원 입니다.')
            print('쿠폰이 %d개 발급되었습니다. 20개를 모으면 한잔 무료입니다.'%cup)
            coffee2 -= cup
            coupon += cup
            print('현재 쿠폰이 %d개 있습니다.'%coupon)
            print('='*40)
                        
            cafe_dict['주문번호'].append(order_no)
            cafe_dict['커피종류'].append('카페라떼')
            cafe_dict['수량'].append(cup)
            
            order_no += 1
            
        elif coffee2 >= cup and money < c2_price * cup:
            print('금액이 부족합니다. 돈을 반환합니다.')
            print('='*40)
            continue
            
    elif num == 3:
        print('카페모카를 선택하셨습니다.')
        if coffee3 == 0:
            print('\n카페모카 : 품절')
            print('> 현재 주문가능한 메뉴 < \n 아메리카노 %d개 \n 카페라떼 %d개'%(coffee1,coffee2))
        cup = int(input('몇 잔 주문하시겠습니까?'))
        if cup > coffee3:
            print('\n죄송합니다. 주문량에 비해 카페모카가 부족합니다.')
            print('현재 주문 가능한 수량은 %d잔 입니다.' %coffee3, '다시 입력해주세요.')
            cup = int(input('몇 잔 주문하시겠습니까?'))
        print('\n결제하실 금액은',c3_price * cup, '원 입니다.')
        money = int(input('돈을 입력하세요~'))
        if coffee3 >= cup and money >= c3_price * cup:
            print('\n[주문번호] %d'%order_no)
            print('카페모카가 나왔습니다. 거스름돈은 ',money - c3_price*cup,'원 입니다.')
            print('쿠폰이 %d개 발급되었습니다. 20개를 모으면 한잔 무료입니다.'%cup)
            coffee3 -= cup
            coupon += cup
            print('현재 쿠폰이 %d개 있습니다.'%coupon)
            print('='*40)
                        
            cafe_dict['주문번호'].append(order_no)
            cafe_dict['커피종류'].append('카페모카')
            cafe_dict['수량'].append(cup)
            
            order_no += 1
            
        elif coffee3 >= cup and money < c3_price * cup:
            print('금액이 부족합니다.돈을 반환합니다.')
            print('='*40)
            continue
            
    elif num ==4:
        cafe = pd.DataFrame(cafe_dict)
        print(cafe)
        break
            
    else:
        print('메뉴가 없습니다.')
        print('='*40)
        continue
반응형

'Study > class note' 카테고리의 다른 글

커피키오스크 최최종  (0) 2021.12.15
python / 함수  (0) 2021.12.15
python / 리스트 이해하기  (0) 2021.12.13
python / 문자열, 이스케이프 문자  (0) 2021.12.13
python / 기타연산자  (0) 2021.12.13