컴퓨터/Python

Python (2) - 딕셔너리(dict)와 자판기 알고리즘

달서비 2021. 3. 10. 21:28

파이썬을 익숙하게 다루기 위하여 자판기 알고리즘을 표현해보았습니다. 여기서 파이썬의 다양한 특징을 보았습니다.

자판기 사진

 

딕셔너리(dict) 자료형

Goods = {'1.칠성사이다':900,'2.코카콜라':1200,'3.비타500':700,'4.몬스터':2000}
Goods_name=list(Goods.keys())
Goods_price=list(Goods.values())

c언어에서 그나마 비슷한 것이라고 하면 구조체 정도가 있습니다. (실제로 사용하는 것을 보면 많은 차이가 있다.) 파이썬의 딕셔너리 자료형은 key : value 이러한 구조로 이루어져 있으며 간단한 파이썬 내장 함수를 통하여 생성, 삭제, 응용을 할 수 있습니다. 제가 사용한 방법은 각각 배열 형태로 만들어 1대 1로 매칭 시키는 방법을 사용하였습니다

 

딕셔너리 자료형은 다음의 특징을 가집니다

  1. 중복을 허락하지만 이전것은 무시된다
  2. 순서를 가지지 않는다

 

이 딕셔너리 자료형을 사용한 이유는 (음료, 가격)이라는 한쌍을 만들기 위하여 사용하였습니다.

 

아래는 딕셔너리의 간단한 사용방법을 적어놓았습니다.

(딕셔너리 자료형의 활용, 추가, 제거, 초기화)

Goods = {'1.칠성사이다':900,'2.코카콜라':1200,'3.비타500':700,'4.몬스터':2000}

list(Goods.keys()) #전체 key값을 뽑아낸다.
list(Goods.values()) #전체 value값을 뽑아낸다

Goods['5.포카리스웨트'] = '1100' 
#딕셔너리 자료형 추가방법 (포카리스웨트 추가)
del Goods['5.포카리스웨트'] 
#딕셔너리 자료형 제거방법 (포카리스웨트 제거)

Goods.clear() #모든 딕셔너리 자료형을 제거한다

 

알고리즘

자판기 알고리즘도

알고리즘도로 표현하였으나 해당 설명이 이해가 안 되는 분들을 위해 설명하자면

자판기에 음료를 먹을 때 돈을 넣고 클릭하고 남은 돈은 정산 버튼을 눌러 정산하는 시스템입니다. 

 

소스코드

#거스름돈 정산을 함수화 하였다
def sort(remain):
  coin_500 = int(remain / 500) 
  coin_100 = int(remain % 500 / 100)
  coin_50 = int(remain % 100 / 50)
  coin_10 = int(remain % 50 / 10)
  string = "거스름돈\n 500원 : %d\n 100원 : %d\n 50원 : %d\n 10원 : %d" % (coin_500,coin_100,coin_50,coin_10)
  return string


#딕셔너리 자료형, 음료의 종류 및 가격을 표현하였다
Goods = {'1.칠성사이다':900,'2.코카콜라':1200,'3.비타500':700,'4.몬스터':2000}
Goods_name=list(Goods.keys())
Goods_price=list(Goods.values())

#자판기의 돈을 넣는 행위
Coin = int(input('동전을 넣어주세요>>'))

while 1 : #무한 반복
  print(Goods)
  print("현재잔액 : %d" % Coin)
  Select = int(input('(0번을 누르면 환산입니다)\n원하는 제품을 선택하세요>>')) - 1 
  #배열의 숫자가 0부터 시작되어 사용하여서 -1을 사용한것이다
  
  if Select == -1 : #0을 누를때 종료한다
    break
  elif Select >= 0 and Select <=3 : #정확한 값을 누를때 계산한다
    Coin = Coin - Goods_price[Select]
    if Coin<0 :
      Coin = Coin + Goods_price[Select]
      print("잔액이 부족합니다")
    else :
      print("%s 이(가) 나왔습니다" % Goods_name[Select])
  else : #그이외의 값을 누를때 공지후 종료한다
    print("\n해당숫자는 지원하지 않습니다\n")
    break

print(sort(Coin)) #정산값 출력