728x90
λ°μν
νλ‘κ·Έλλ° μΈκ³λ₯Ό νꡬν©μλ€.
* class μ¬μ©ν μ€μ΅μ μλ κ²μκΈ μ°Έκ³ λ°λλλ€.
* decorator μ¬μ©ν μ€μ΅μ μλ κ²μκΈ μ°Έκ³ λ°λλλ€.
λμ μ κ³ /λμΆ/λ°λ© κ΄λ¦¬λ₯Ό μν ν€μ€μ€ν¬ νμ΄μ¬ νλ‘κ·Έλ¨ λ°μ½λ μ΄ν° μ€μ΅ (νμκ°μ κΈ°λ₯ μΆκ°)
<쑰건>
""" <μ΅μ΄ λ©λ΄> : νμ λ²νΈλ λ¬Έμμ΄ λ¬΄μμ΄λ μκ΄μμ΄ λ±λ‘ : μλΉμ€ μ’
λ£ μ νλ‘κ·Έλ¨ μ체 μ’
λ£ [μλΉμ€ μ΄μ©μ μν νμ μΈμ¦]
νμλ²νΈ λ±λ‘
νμ μΈμ¦
μλΉμ€ μ’
λ£
<νμ μΈμ¦μ΄ λ κ²½μ° λ©λ΄> : λμ μ 보 : λμλ²νΈ, λμμ λͺ©, μ¬κ³ κΆμ : λμ μν νμΈ : νΉμ λμμ λν μ 보 μ‘°ν(λμλ²νΈ, λμμ λͺ©, νμ¬κΆμ/μ 체κΆμ) [λμ μλΉμ€ λ©λ΄]
λμ μ
κ³
λμ λμΆ
λμ λ°λ©
λμ μν νμΈ
λμ μ 체 λͺ©λ‘ νμΈ
λμ μλΉμ€ μ’
λ£(νμ μΈμ¦ λ©λ΄λ‘ κ°λλ€.)
"""
<μμ± μ½λ>
### κΈ°λ₯μ μνν ν΄λμ€(λͺ¨λ λλ λΌμ΄λΈλ¬λ¦¬) μ μ
class LibraryKiosk :
### ν΄λμ€ μμ±μ μ μ
def __init__(self) :
### νμ λͺ©λ‘κ³Ό λμ λͺ©λ‘μ μ μ₯ν λμ
λ리 λ³μ μμ±
# - νμλ²νΈ μ 보 λ΄κΈ°
self.members = {}
# - λμλ²νΈ, λμμ λͺ©, λμμ¬κ³ μλ μ 보 λ΄κΈ°
self.books = {}
# -----------------------------------------------------------------------
### νμ λ±λ‘ κΈ°λ₯ μ μνκΈ°
def add_member(self, member_id) :
if member_id not in self.members :
self.members[member_id] = True
print(f"νμλ²νΈ:{member_id} λ±λ‘ μ±κ³΅!!")
else :
print("μ΄λ―Έ λ±λ‘λ νμλ²νΈμ
λλ€.")
### νμ μΈμ¦ κΈ°λ₯ μ μνκΈ°
def auth_member(self, member_id) :
if member_id in self.members :
print(f"νμλ²νΈ:{member_id} μΈμ¦ μ±κ³΅!!")
return True
else :
print("λ±λ‘λμ§ μμ νμλ²νΈμ
λλ€.")
return False
### λμ μν νμΈ κΈ°λ₯ μ μνκΈ°
def check_book(self, book_id) :
if book_id in self.books :
book = self.books[book_id]
print(f"λμλ²νΈ:{book_id} / μ λͺ©:{book['title']} / νμ¬ μ¬κ³ :{book['quantity']}κΆ")
else :
print("λμλ²νΈμ ν΄λΉνλ λμκ° μ‘΄μ¬νμ§ μμ΅λλ€.")
# -----------------------------------------------------------------------
### λμμ
κ³ , λμΆ, λ°λ© λ°μ½λ μ΄ν° ν¨μ μ μνκΈ°
def add_book_decorator(func) :
def wrapper(self, book_id, title, quantity):
## μ
κ³ ν λμλ²νΈκ° μ‘΄μ¬νλμ§ νμΈ
# - μ‘΄μ¬νλ€λ©΄ μλλ§ μ¦κ°μν€κΈ°
func(self, book_id, title, quantity)
return wrapper
def borrow_book_decorator(func) :
def wrapper(self, book_id):
## λμΆν λμλ²νΈκ° μ‘΄μ¬νλμ§ νμΈ
# - μ‘΄μ¬νλ€λ©΄ μλλ§ κ°μμν€κΈ°
func(self, book_id)
return wrapper
def return_book_decorator(func) :
def wrapper(self, book_id):
## λ°λ©ν λμλ²νΈκ° μ‘΄μ¬νλμ§ νμΈ
# - μ‘΄μ¬νλ€λ©΄ μλλ§ μ¦κ°μν€κΈ°
func(self, book_id)
return wrapper
# -----------------------------------------------------------------------
### λμμ
κ³ κΈ°λ₯ μ μνκΈ°
@add_book_decorator
def add_book(self, book_id, title, quantity) :
## μ
κ³ ν λμλ²νΈκ° μ‘΄μ¬νλμ§ νμΈ
# - μ‘΄μ¬νλ€λ©΄ μλλ§ μ¦κ°μν€κΈ°
if book_id in self.books :
self.books[book_id]["quantity"] += quantity
# - μ‘΄μ¬νμ§ μλλ€λ©΄
else :
self.books[book_id] = {"title":title, "quantity":quantity}
print(f"λμλ²νΈ:{book_id} / μ λͺ© : {title} / μ
κ³ μλ : {quantity} μ
κ³ μ±κ³΅!!" )
### λμΆ κΈ°λ₯ μ μνκΈ°
@borrow_book_decorator
def borrow_book(self, book_id) :
### λμΆνκ³ μνλ λμλ²νΈμ ν΄λΉνλ μ¬κ³ μλ νμΈνκΈ°
if (book_id in self.books) and (self.books[book_id]["quantity"] > 0) :
self.books[book_id]["quantity"] -= 1
print(f"λμλ²νΈ:{book_id} / μ λͺ©:{self.books[book_id]['title']} / λ¨μμ¬κ³ μλ:{self.books[book_id]['quantity']}")
else :
print("λμκ° μ‘΄μ¬νμ§ μκ±°λ, λμΆν μ¬κ³ κ° μμ΅λλ€.")
### λ°λ© κ°λ₯ μ μνκΈ°
@return_book_decorator
def return_book(self, book_id) :
# - λ°λ©ν λμλ²νΈκ° λμλͺ©λ‘μ μλμ§ νμΈ
if book_id in self.books :
self.books[book_id]["quantity"] += 1
print(f"λμλ²νΈ:{book_id} / μ λͺ©:{self.books[book_id]['title']} / λ¨μμ¬κ³ μλ:{self.books[book_id]['quantity']}")
# - ν΄λΉ λμκ° λͺ©λ‘μ μλ€λ©΄
else :
print("ν΄λΉ λμκ° μ‘΄μ¬νμ§ μμ΅λλ€.")
### 2. μ΅μ΄μ μ€νν κΈ°λ₯(ν¨μ) μ μ
def main():
### ν΄λμ€ μμ±νκΈ°
# - μ΅μ΄ νλ² : νλ‘κ·Έλ¨μ΄ μ’
λ£λλ©΄ ν΄λμ€λ μλ©Έ(λ©λͺ¨λ¦¬ κ³΅κ° μμ )λ©λλ€.
kiosk = LibraryKiosk()
print(kiosk)
###3. λ©λ΄ μ ν 보μ¬μ£ΌκΈ°
while True:
print('<μλΉμ€ μ΄μ©μ μν νμ μΈμ¦>')
print('1. νμλ²νΈ λ±λ‘')
print('2. νμ μΈμ¦')
print('3. μλΉμ€ μ’
λ£')
choice = input('μνλ λ²νΈ(1~3)λ₯Ό μ ννμΈμ : ')
if choice == '1':
member_id = input('νμ λ²νΈλ₯Ό μ
λ ₯ν΄ μ£ΌμΈμ : ')
kiosk.add_member(member_id)
elif choice == '2':
member_id = input('νμ λ²νΈλ₯Ό μ
λ ₯ν΄ μ£ΌμΈμ : ')
if kiosk.auth_member(member_id):
while True:
print('<λμ μλΉμ€ λ©λ΄>')
print('1. λμ μ
κ³ ')
print('2. λμ λμΆ')
print('3. λμ λ°λ©')
print('4. λμ μν νμΈ')
print('5. λμ μ 체 λͺ©λ‘ νμΈ')
print('6. λμ μλΉμ€ μ’
λ£')
choice = input('μνλ λ²νΈ(1~6)λ₯Ό μ ννμΈμ : ')
if choice == '1':
book_id = input('λμ λ²νΈλ₯Ό μ
λ ₯ν΄ μ£ΌμΈμ : ')
title = input('λμ μ λͺ©μ μ
λ ₯ν΄ μ£ΌμΈμ : ')
quantity = int(input('μ
κ³ ν κΆμλ₯Ό μ
λ ₯ν΄ μ£ΌμΈμ : '))
kiosk.add_book(book_id, title, quantity)
elif choice == '2':
book_id = input("λμΆν λμλ²νΈλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ :")
kiosk.borrow_book(book_id)
elif choice == '3':
book_id = input("λ°λ©ν λμλ²νΈλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ :")
kiosk.return_book(book_id)
elif choice == '4':
book_id = input("νμΈν λμλ²νΈλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ :")
kiosk.check_book(book_id)
elif choice == '5':
for book_id, book_info in kiosk.books.items():
print(f"λμλ²νΈ:{book_id} / λμμ λͺ©:{book_info['title']} / μ¬κ³ κΆμ:{book_info['quantity']}")
elif choice == '6':
print('λμ μλΉμ€ μ’
λ£')
break
else:
print('μλͺ» μ ννμμ΅λλ€. λ€μ μ νν΄ μ£ΌμΈμ!')
elif choice == '3':
print('μλΉμ€ μ’
λ£')
break
else:
print('μλͺ» μ ννμμ΅λλ€. λ€μ μ νν΄ μ£ΌμΈμ!')
### 1. μ΅μ΄ μ½λ μμ
if __name__ == "__main__":
### μ΅μ΄μ μ€νν κΈ°λ₯(ν¨μ) νΈμΆ
main()
<μ€ν νλ©΄>
728x90
λ°μν