-
Notifications
You must be signed in to change notification settings - Fork 16.9k
Description
class Product: # Khai báo lớp Product — kiểu dữ liệu tùy chỉnh để lưu thông tin sản phẩm.
def init(self, name, price, stock): # là hàm khởi tạo (constructor) chạy khi tạo một đối tượng Product.
self.name = name # Các câu lệnh self.name = name, self.price = price, self.stock = stock có vai trò khởi tạo và lưu trữ thông tin của từng sản phẩm.
self.price = price
self.stock = stock
def __str__(self): # __str__ định nghĩa cách chuyển object thành chuỗi khi dùng print(product) hoặc khi ép kiểu chuỗi.
# Trả về chuỗi mô tả sản phẩm: tên - giá - tồn kho.
return f"{self.name} - Giá: {self.price} VND, Tồn kho: {self.stock}"
class VendingMachine: # là lớp dùng để mô tả máy bán hàng tự động bao gồm có (sản phẩm, giá tiền)
def init(self):
# Khởi tạo các sản phẩm
self.products = [
Product("Mì Gói Siu Cay", 19000, 14),
Product("Coca Cola", 15000, 10),
Product("Snack", 12000, 12), # dây là 5 tham số về sản phẩm đã tạo
Product("Nước suối", 5000, 20),
Product("Sữa MILO", 12000, 15),
]
self.balance = 500000 # Khởi tạo số tiền ban đầu
def show_menu(self): # là lớp dùng để in ra danh sách sản phẩm và số tiền còn lại.
print("\nMenu sản phẩm:") # index: vị trí của phần tử trong danh sách (bắt đầu từ 0)
for index, product in enumerate(self.products): #Hàm enumerate() dùng để đánh số thứ tự cho từng phần tử trong danh sách.
print(f"{index + 1}. {product}")
print(f"số tiền còn lại: {self.balance} VND")
def buy_product(self, choice):
# Là số người dùng nhập để chọn sản phẩm.(có thể lớn hơn 1 và có thể nhỏ hơn 1 or bằng số lượng sản phẩm)
if 1 <= choice <= len(self.products): # được dùng để kiểm tra lựa chọn của người dùng có nằm trong phạm vi các sản phẩm hiện có hay không
product = self.products[choice - 1]
if product.stock > 0: # kiểm tra sản phẩm còn hàng
if self.balance >= product.price:
# Giao dịch thành công
self.balance -= product.price # trừ tiền.
product.stock -= 1 # giảm tồn kho một đơn vị.
print(f"\nMua {product.name} thành công!")
print(f"Tiền còn lại: {self.balance} VND")
print(f"Tồn kho {product.name} còn lại: {product.stock}")
else:
print("\nLỗi: Bạn không đủ tiền để mua sản phẩm này!")
else:
print("\nLỗi: Sản phẩm đã hết hàng!")
else:
print("\nLỗi: Lựa chọn không hợp lệ!")
def run(self): # tạo vòng lặp vô hạn
while True: # để chương trình liên tục tương tác với người dùng cho đến khi người dùng chọn thoát.
self.show_menu()
try:
choice = int(input("\nChọn sản phẩm để mua (hoặc nhập 0 để thoát): "))
if choice == 0: # nếu người dùng nhập 0 thì thoát vòng lặp và kết thúc chương trình
print("\nCảm ơn bạn đã sử dụng máy bán hàng!")
break
else:
self.buy_product(choice)
except ValueError:
print("\nLỗi: Vui lòng nhập một số hợp lệ!")
if name == "main":
vending_machine = VendingMachine()
vending_machine.run()