파이썬 자판기 class - paisseon japangi class


언어/Python

자판기 프로그램 만들기 !

2019. 11. 22. 12:06

coffee=3
cola=2
juice=1
coffeeMoney=1000
colaMoney=800
juiceMoney=700

while True:
    menu=input("메뉴를 입력하세요: ")
    moneyString=input("금액을 입력하세요: ")
    money=int(moneyString)

    if menu=="커피":
        print(menu)
        if money<coffeeMoney:
            print("돈이 부족합니다.")
            continue
        if coffee<=0:
            print("재고가 없습니다. 죄송합니다.")
            continue
        print("커피가 나왔습니다")
        coffee-=1
        print("커피가 "+ str(coffee) +"개 남았습니다.")

    elif menu=="콜라":
        print(menu)
        if money<colaMoney:
            print("돈이 부족합니다.")
            continue
        if cola<=0:
            print("재고가 없습니다. 죄송합니다.")
            continue
        print("콜라가 나왔습니다")
        cola-=1
        print("커피가 "+ str(cola) +"개 남았습니다.")


    elif menu=="주스":
        print(menu)
        if money<juiceMoney:
            print("돈이 부족합니다.")
            continue
        if juice<=0:
            print("재고가 없습니다. 죄송합니다.")
            continue
        print("커피가 나왔습니다")
        juice-=1
        print("커피가 "+ str(juice) +"개 남았습니다.")
#자판기 프로그램을 작성해보자
#기본 조건 : 잔돈 :5000원
#            재고 : 커피 3개, 콜라 2개, 쥬스 1개 

#입력 조건 메뉴 0: 커피 1 : 콜라 2 : 쥬스
# #             돈 1000 or 2000
#               커피 : 1000, 콜라 : 800, 쥬스 :700

# #출력조건 정상조건 : "커피(콜라. 쥬스) 가 나왔습니다."
#                         재고를 1개씩 소진한다
#                       재고 부족시 : 커피(콜라,쥬스)가 재고 소진되었습니다.
#                       투입 금액 부족시 : 돈이 부족합니다.
ord_money=5000
coffee_num=3
cola_num=2
juice_num=1
total=0
exit=100000
menu_cost=[1000,800,700]
menu_num=[coffee_num, cola_num, juice_num,exit]

print("커피 :1000원 콜라 : 800원 쥬스 : 700원")
while True:
    menu=input("0: 커피 1: 콜라 2: 쥬스 3:종료 몇번을 선택하시나요 >> ")
    cho=int(menu)
    if(menu_num[cho] ==0):
        print("재고가 소진되었습니다.다른 메뉴를 선택해주세요")

    if(cho==3):
        print("주문이 완료 되었습니다.")
        break
    menu_num[cho]=menu_num[cho]-1
    total+=menu_cost[cho]
   
total=str(total)
print("총 금액은 "+ total+ "입니다.")
input_total=0
money=0
total=int(total)
while True :
    input_money=input("돈을 넣으세요 / 1000원 or 2000원 ")
    cho=int(input_money)
    
    input_total=input_total+cho
    money=input_total-total
    
    if(input_total <total):
        print("돈이 부족합니다.")

    if(total-input_total>=ord_money):
        print("돈을 더이상 받지 않습니다.")
        break

money=str(money)
print(money+"돌려드립니다.")
    






#if(input_money)


개인 기록부


클래스란 메서드와 멤버의 집합체를 말한다.

다른 언어를 배우게 된다면 위의 두 단어를 자주 접하게 되는데 메서드는 함수, 멤버는 변수로 이해하자

우리는 반복되는 코드를 보다 편리하게 이용하기 위해 함수를 사용했는데, 클래스는 그러한 함수의 집합이라는 말이다.

비유하자면 음료는 변수와 같은 자료, 함수는 자판기, 이 자판기를 만드는 공장이 클래스이다.

공장에서 제품을 생산할 때 매 번 같은 모양의 틀을 만들어 제품을 생산하지않듯이 클래스 역시 이미 만들어둔

메서드를 통해 값을 출력해내는데 이를 인스턴트(instance)라고 부른다.

class new_class:

  def welcome():
    print('hello')

a = new_class
a.welcome()    

'hello'

먼저 클래스를 선언하고 이름을 지정한 후 클래스 내부에 메서드를 지정해준다,

이후 객체(멤버)에 클래스를 지정하여 사용하고자 하는 함수를 불러오는 형태로 사용된다.

굳이 클래스를 객체에 할당하지않고 클래스명. 함수명()으로 사용해도 실행에 지장은 없지만 사용의 편리성을 더하고자 한다면 객체를 지정하도록하자


constructor(생성자)

메서드의 종류 중 생성자라고 불리는 메서드가 있는데, 생성자는 객체가 실행될 때 자동으로 실행되는 메서드이다.

생성자임을 선언하는 방법은 def __init__(self, 매개변수, 매개변수,,,)의 형태로 선언하도록 지정되어있다.

생성자를 이용하여 메서드를 구성한다면, 관례적으로 self를 붙여 정의해준다.

class calcurator:

  def __init__(self, num1, num2):
    self.num1 = num1
    self.num2 = num2

  def add(self):
    result = self.num1 + self.num2
    return result

  def sub(self):
    result = self.num1 - self.num2
    return result
  
  def mul(self):
    result = self.num1 * self.num2
    return result

  def div(self):
    result = self.num1 / self.num2
    return result

a = calcurator(20,7)
print(a.add())
print(a.sub())
print(a.mul())
print(a.div())


27
13
140
2.857142857142857

사칙 연산을 하는 계산기 클래스를 만들어보았다. 클래스를 선언한 후 __init__ 을 통해 메서드를 정의하고,

각각의 연산을 하는 함수를 만든 후 호출되었을 때 그 값을 반환하게끔 return 키워드를 넣어

함수를 끝냈고 객체에 클래스와 값을 지정하여 사용의 편의성을 높여준 후 필요한 함수를 불러와 값을 계산한 것이다.


클래스 상속

class calcurator:

  def __init__(self, num1, num2):
    self.num1 = num1
    self.num2 = num2

  def add(self):
    result = self.num1 + self.num2
    return result

  def sub(self):
    result = self.num1 - self.num2
    return result
  
  def mul(self):
    result = self.num1 * self.num2
    return result

  def div(self):
    result = self.num1 / self.num2
    return result

class pow_calculator(calcurator):
  def pow(self):
    result = self.num1 ** self.num2
    return result

a=pow_calculator(4,5)
print(a.pow())
print()
print(a.add())
print(a.sub())
print(a.mul())
print(a.div())

1024

9
-1
20
0.8

클래스에서 상속이란 부모 클래스와 자식 클래스로 나뉘게 된다.

쉽게 말해 자식 클래스의 매개변수로 부모 클래스가 들어오게 되면 부모 클래스의 모든 기능을 자식 클래스에서도

사용할 수 있게 된다. 하지만 그 반대인 부모 클래스에서 자식 클래스의 사용은 불가하다.

위의 예시를 살펴보면 알 수 있듯이 class pow_calculator(calculator)의 형태로 새로운 클래스에 기존 클래스를 덮어씌워

새롭게 추가한 메서드는 물론이고, 기존 클래스에 들어있던 메서드도 여전히 사용할 수 있었다.

추가로 만약 클래스 내부 함수에 변수를 넣는 게 아닌 함수 밖에 변수를 지정하게 된다면,

매개변수로 무슨 값이 들어오든 함수 밖의 값만이 출력된다.


파이썬 자판기 class - paisseon japangi class