본문 바로가기
Python

Python 파이썬 : 자판기를 통한 모듈 하위 개념 익히기

by 춘춘주모 2019. 7. 25.
반응형

2019-07-25 

 

패키지> 모듈> 함수> 값 

 

모듈이란 파일이다. 그 파일에는 함수나 변수 또는 클래스가 포함될 수 있다. 

 

앞서서 계속 커피 자판기 기능을 수행하는 코딩을 시도했는데 결국에 코딩을 간단히 하고, 실행을 편히 하려면 모듈화가 필요하다는 통찰에 이르렀다.

 

그래서 클래스를 정의해 여러 개 함수를 정의함으로써 제어문의 반복되는 부분을 함수로 대신했다. 정의한 클래스는 인스턴스에 배당해 편하게 사용했다. 

 

오늘까지 진행한 실습의 코딩 첨삭 과정을 첨부하겠다. 

 

이하 기재된 코드를 그대로 실행하면 된다. 

 

 

#ver1.0

coffee = 100
while True:
    print("#" * 30)
    print("1. Coffee Choice")
    print("2. Quit")
    print("#" * 30)
    selection = input("Your Choice :  ")
    if selection == "1":
        money = int(input("돈을 넣어 주세요: "))
        if money == 300:
            print("커피를 줍니다.")
            coffee = coffee -1
            print("남은 커피의 양은 %d개 입니다." % coffee)
            print("잔액이 없습니다. 돈을 추가로 넣어주세요.")
        elif money > 300:
            print("잔액은 %d원 입니다. 커피를 한잔 드립니다." % (money-300))
            coffee = coffee -1
            print("남은 커피의 양은 %d개 입니다." % coffee)
            money = money - 300
            if money > 300:
                print("#" * 30)
                print("1. Coffee Choice")
                print("2. Quit")
                print("#" * 30)
                selection = input("Your Choice :  ")
                if selection == "1":
                    money = money - 300
                    coffee = coffee -1
                    print("잔액은 %d원 입니다. 커피를 한잔 드립니다." % money)
                    print("남은 커피의 양은 %d개 입니다." % coffee)
                elif selection == "2":
                    print("감사합니다!")
                    break
                else:
                    print("Invalid Selection!")
            elif money == 300:
                print("커피를 줍니다.")
                coffee = coffee -1
                print("남은 커피의 양은 %d개 입니다." % coffee)
                print("잔액이 없습니다. 돈을 추가로 넣어주세요.")
            else:
                print("%d원의 돈을 다시 돌려주고 커피를 주지 않습니다."%money )
                
        elif coffee == 0:
            print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
            break
        else: 
            print("%d원의 돈을 다시 돌려주고 커피를 주지 않습니다." %money)
    elif selection == "2":
        print("감사합니다!")
        break
    else:
        print("Invalid Selection!")
print("다음 작업을 계속.")

 

#ver1.01
coffee = 100
while True:
    print("#" * 30)
    print("1. Coffee Choice")
    print("2. Quit")
    print("#" * 30)
    selection = input("Your Choice :  ")
    if selection == "1":
        money = int(input("돈을 넣어 주세요: "))
        if money == 300:
            print("커피를 줍니다.")
            coffee = coffee -1
            print("남은 커피의 양은 %d개 입니다." % coffee)
            print("잔액이 없습니다. 돈을 추가로 넣어주세요.")
        elif money > 300: #돈이 남을 경우 추가로 계속 사거나 안 사거나 2지선다를 요구할 수 있도록 했다.
            print("잔액은 %d원 입니다. 커피를 한잔 드립니다." % (money-300))
            coffee = coffee -1
            print("남은 커피의 양은 %d개 입니다." % coffee)
            money = money - 300
            if money > 300:
                print("#" * 30)
                print("1. Coffee Choice")
                print("2. Quit")
                print("#" * 30)
                selection = input("Your Choice :  ")
                if selection == "1":
                    money = money - 300
                    coffee = coffee -1
                    print("잔액은 %d원 입니다. 커피를 한잔 드립니다." % money)
                    print("남은 커피의 양은 %d개 입니다." % coffee)
                elif selection == "2":
                    print("감사합니다!")
                    break
                else:
                    print("Invalid Selection!")
            elif money == 300:
                print("커피를 줍니다.")
                coffee = coffee -1
                print("남은 커피의 양은 %d개 입니다." % coffee)
                print("잔액이 없습니다. 돈을 추가로 넣어주세요.")
            else:
                print("%d원의 돈을 다시 돌려주고 커피를 주지 않습니다."%money )
                
        elif coffee == 0:
            print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
            break
        else: 
            print("%d원의 돈을 다시 돌려주고 커피를 주지 않습니다." %money)
    elif selection == "2":
        print("감사합니다!")
        break
    else:
        print("Invalid Selection!")
print("다음 작업을 계속.")

 

 

#ver1.03 : 코딩의 단순화를 위해 함수->클래스를 정의해 사용
class vend_machine:
    def __init__(self):
        self.in_money = 0  
        self.product = '커피','라떼','생수'
        self.sel = 0
        self.price = '200','300','400'
        self.coffee_count = 0
        self.latte_count = 0
        self.water_count = 0
        
    def input_money(self):
        self.in_money = int(input('돈을 넣어주시오.'))
    
    def get_drink(self):
        sel = int(input('원하는 음료를 고르시오. 1:커피 ,2:라떼 3:생수 '))
        if sel == 1 and self.in_money >= 200:
            print("%s 나왔습니다." % self.product[0])
            self.in_money = self.in_money - 200
            self.coffee_count = 0
            self.coffee_count = self.coffee_count + 1
        elif sel == 2 and self.in_money >= 300:
            print("%s 나왔습니다." % self.product[1])
            self.in_money = self.in_money - 300
            self.latte_count = 0
            self.latte_count = self.latte_count + 1
        elif sel == 3 and self.in_money >= 400:
            print("%s 나왔습니다." % self.product[2])
            self.in_money = self.in_money - 400
            self.water_count = 0
            self.water_count = self.water_count + 1
        else:
            print("잘못된 선택입니다.")
            
    
    def get_describe(self):
        print('커피는 %s잔, %s원 어치 판매되었습니다.' %(self.coffee_count,self.coffee_count*200))
        print('라떼는 %s잔, %s원 어치 판매되었습니다.' %(self.latte_count,self.latte_count*300))
        print('생수는 %s잔, %s원 어치 판매되었습니다.' %(self.water_count,self.water_count*400))
        
#실행하기 위한 인스턴스 정의문 
vm = vend_machine()

while True :
    vm.input_money()
    vm.get_drink()
    
    if int(vm.in_money) >= int(min(vm.price)) :
        vm.get_drink()
    
    else :
        break
    
vm.get_describe()
            
            
    
#ver1.04 종료 선택을 하거나 돈이 떨어졌을경우 자동으로 매출 출력
class vend_machine:
    def __init__(self):
        self.total_money=0
        self.in_money = 0  
        self.product = ('커피','라떼','생수')
        self.sel = 0
        self.price = ('200','300','400')
        self.coffee_count = 0
        self.latte_count = 0
        self.water_count = 0
    
    def input_money(self):
        self.in_money = int(input('돈을 넣어주시오.'))
    
    def get_drink(self):
        if sel == 1 and self.in_money >= 200:
            print("%s 나왔습니다." % self.product[sel-1])
            self.in_money = self.in_money - int(self.price[sel-1])           
            self.coffee_count = self.coffee_count + 1



        elif sel == 2 and self.in_money >= 300:
            print("%s 나왔습니다." % self.product[sel-1])
            self.in_money = self.in_money - int(self.price[sel-1])         
            self.latte_count = self.latte_count + 1



        elif sel == 3 and self.in_money >= 400:
            print("%s 나왔습니다." % self.product[sel-1])
            self.in_money = self.in_money - int(self.price[sel-1])         
            self.water_count = self.water_count + 1


        else :
            if sel ==  0 :
                print()
                    
            
            else :
                print("잘못된 선택입니다.")



        print("잔돈 %d원 있습니다." % self.in_money)
        print()


            
    
    def get_describe(self):
        print('커피는 %s잔, %s원 어치 판매되었습니다.' %(self.coffee_count,self.coffee_count*200))
        print('라떼는 %s잔, %s원 어치 판매되었습니다.' %(self.latte_count,self.latte_count*300))
        print('생수는 %s잔, %s원 어치 판매되었습니다.' %(self.water_count,self.water_count*400))

 

ver1.05 추가금액을 입력하는 함수를 추가 정의. 
class vend_machine:
    def __init__(self):
        self.total_money=0
        self.in_money = 0  
        self.product = ('커피','라떼','생수')
        self.sel = 0
        self.price = ('200','300','400')
        self.coffee_count = 0
        self.latte_count = 0
        self.water_count = 0
    
    def input_money(self):
        self.in_money = int(input('돈을 넣어주시오.'))
    
    def get_drink(self):
        if sel == 1 and self.in_money >= 200:
            print("%s 나왔습니다." % self.product[sel-1])
            self.in_money = self.in_money - int(self.price[sel-1])           
            self.coffee_count = self.coffee_count + 1



        elif sel == 2 and self.in_money >= 300:
            print("%s 나왔습니다." % self.product[sel-1])
            self.in_money = self.in_money - int(self.price[sel-1])         
            self.latte_count = self.latte_count + 1



        elif sel == 3 and self.in_money >= 400:
            print("%s 나왔습니다." % self.product[sel-1])
            self.in_money = self.in_money - int(self.price[sel-1])         
            self.water_count = self.water_count + 1


        else :
            if sel ==  0 :
                print()
                    
            
            else :
                print("잘못된 선택입니다.")



        print("잔돈 %d원 있습니다." % self.in_money)
        print()


            
    
    def get_describe(self):
        print('커피는 %s잔, %s원 어치 판매되었습니다.' %(self.coffee_count,self.coffee_count*200))
        print('라떼는 %s잔, %s원 어치 판매되었습니다.' %(self.latte_count,self.latte_count*300))
        print('생수는 %s잔, %s원 어치 판매되었습니다.' %(self.water_count,self.water_count*400))
        
    def more_money(self):
        if 0<=int(vm.in_money) <int(min(vm.price)) : 
            vm.input_money= int(input("잔액이 부족합니다 \n추가금액을 입력하세요(종료:0):  "))
            if vm.input_money!=0:
                vm.in_money += vm.input_money
                if int(vm.in_money) >= int(min(vm.price)) :
                    print("잔돈 : %d" %int(vm.in_money))
                else:
                    print("%d원을 반환합니다." %vm.in_money)
                    vm.get_describe()                
                    
            if sel == 0 :
                print("%d원을 반환합니다." %vm.in_money)
                vm.get_describe()
#제어문 
vm = vend_machine()
vm.input_money()
if int(vm.in_money) < int(min(vm.price)) :
    print("돈이 부족합니다.")
    y_or_no = (input("돈을 더 넣으시겠습니다.?(yes : y , no : n) "))
    if y_or_no == 'y':
        in_money1 = int(input('돈을 넣어주시오.'))
        vm.in_money += in_money1
        print("잔돈 : %d" %vm.in_money)
        

        while True :
            sel = int(input('"원하는 음료를 고르시오. 1:커피 ,2:라떼 3:생수 0:종료 " : '))
            if int(vm.in_money) >= int(min(vm.price)) :
                vm.get_drink()
                print()
                vm.more_money()

            else : 
                print("%d원을 반환합니다." %vm.in_money)
                vm.get_describe()
                break
    
    
else :
    while True :
        sel = int(input('"원하는 음료를 고르시오. 1:커피 ,2:라떼 3:생수 0:종료 " : '))
        if int(vm.in_money) >= int(min(vm.price)) :
            vm.get_drink()
            print()
            vm.more_money()                                            
        else :
            print("%d원을 반환합니다." %vm.in_money)
            vm.get_describe()
            break

 

#ver1.06 잔액이 남아있을시 종료버튼이 작동하지 않는 버그를 수정 
class vend_machine:
    def __init__(self):
        self.total_money=0
        self.in_money = 0  
        self.product = ('커피','라떼','생수')
        self.sel = 0
        self.price = ('200','300','400')
        self.coffee_count = 0
        self.latte_count = 0
        self.water_count = 0
    
    def input_money(self):
        self.in_money = int(input('돈을 넣어주시오.'))
    
    def get_drink(self):
        if sel == 1 and self.in_money >= 200:
            print("%s 나왔습니다." % self.product[sel-1])
            self.in_money = self.in_money - int(self.price[sel-1])           
            self.coffee_count = self.coffee_count + 1



        elif sel == 2 and self.in_money >= 300:
            print("%s 나왔습니다." % self.product[sel-1])
            self.in_money = self.in_money - int(self.price[sel-1])         
            self.latte_count = self.latte_count + 1



        elif sel == 3 and self.in_money >= 400:
            print("%s 나왔습니다." % self.product[sel-1])
            self.in_money = self.in_money - int(self.price[sel-1])         
            self.water_count = self.water_count + 1


        else :
            if sel ==  0 :
                print()
                    
            
            else :
                print("잘못된 선택입니다.")



        print("잔돈 %d원 있습니다." % self.in_money)
        print()


            
    
    def get_describe(self):
        print('커피는 %s잔, %s원 어치 판매되었습니다.' %(self.coffee_count,self.coffee_count*200))
        print('라떼는 %s잔, %s원 어치 판매되었습니다.' %(self.latte_count,self.latte_count*300))
        print('생수는 %s잔, %s원 어치 판매되었습니다.' %(self.water_count,self.water_count*400))
        
        
    def more_money(self):
        if 0<=int(vm.in_money) <int(min(vm.price)) : 
            vm.input_money= int(input("잔액이 부족합니다 \n추가금액을 입력하세요(종료:0):  "))
            if vm.input_money!=0:
                vm.in_money += vm.input_money
                if int(vm.in_money) >= int(min(vm.price)) :
                    print("잔돈 : %d" %int(vm.in_money))
                else:
                    print("%d원을 반환합니다." %vm.in_money)
                    vm.get_describe() 

#제어문 
vm = vend_machine()
vm.input_money()
if int(vm.in_money) < int(min(vm.price)) :
    print("돈이 부족합니다.")
    y_or_no = (input("돈을 더 넣으시겠습니다.?(yes : y , no : n) "))
    if y_or_no == 'y':
        in_money1 = int(input('돈을 넣어주시오.'))
        vm.in_money += in_money1
        print("잔돈 : %d" %vm.in_money)
        

        while True :
            sel = int(input('"원하는 음료를 고르시오. 1:커피 ,2:라떼 3:생수 0:종료 " : '))
            if int(vm.in_money) >= int(min(vm.price)) :
                vm.get_drink()
                print()
                vm.more_money()
                               
                if sel == 0 :
                    print("%d원을 반환합니다." %vm.in_money)
                    vm.get_describe()
                    break
                    
                if vm.input_money==0 :
                    vm.get_describe()
                    break

            else : 
                print("%d원을 반환합니다." %vm.in_money)
                vm.get_describe()
                break
    
    
        
    
else :
    while True :
        sel = int(input('"원하는 음료를 고르시오. 1:커피 ,2:라떼 3:생수 0:종료 " : '))
        if int(vm.in_money) >= int(min(vm.price)) :
            vm.get_drink()
            print()
            vm.more_money()
            if sel == 0 :
                print("%d원을 반환합니다." %vm.in_money)
                vm.get_describe()
                break
                
            if vm.input_money==0 :
                vm.get_describe()
                break
                
        else :
            print("%d원을 반환합니다." %vm.in_money)
            vm.get_describe()
            break

 

반응형

댓글