반응형
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
반응형
'Python' 카테고리의 다른 글
module 'numpy' has no attribute 'long' 해결 solving (0) | 2023.01.03 |
---|---|
Intro to Python (2) : 파이썬 기초 둘러보기, 아나콘다 스파이더 (0) | 2019.07.16 |
Intro to Python (1) : 파이썬 시작, 환경설정, 주피터 사용법 (0) | 2019.07.16 |
Intro to Python (0) : 파이썬 시작하는 단계에서 (0) | 2019.07.02 |
댓글