Hướng dẫn python vending machine hackerrank solution - giải pháp hackerrank máy bán hàng tự động python

Máy bán hàng tự động

Yêu cầu chương trình

1. Chèn tiền

  • Viết một hàm gọi là insert_coin có hai đối số: một đối số được gọi là coin và một đối số khác được gọi là inserted_coins.

  • Tham số coin sẽ chấp nhận các giá trị bất kỳ giá trị nào sau đây: 5, 10, 25, 100, 200. Các giá trị này đại diện cho xu. Bất kỳ giá trị nào khác sẽ tăng ngoại lệ ValueError.

  • Tham số "chèn_coins" là một danh sách

  • Khi hàm insert_coin [] được gọi, giá trị "xu" được gắn vào tham số insert_coins.

2. Mua một sản phẩm

  • Viết một hàm gọi là Buy_Product có hai đối số: một đối số được gọi là "Sản phẩm" và cái còn lại được gọi là "Cân bằng".

  • Đối số sản phẩm có thể là một trong những giá trị sau: "Uống", "kẹo", "chip". Bất kỳ giá trị nào khác sẽ tăng ngoại lệ ValueError.

  • balance là một số nguyên đại diện cho số dư hiện tại của các quỹ có sẵn

  • Khi hàm buy_product được gọi, giá của sản phẩm được chọn được so sánh với số dư.

  • Nếu số dư của các đồng tiền được chèn nhỏ hơn chi phí của sản phẩm, một ngoại lệ tùy chỉnh gọi là InsufficientFunds nên được tăng lên.

  • Nếu số dư bằng hoặc vượt quá chi phí của sản phẩm, thì chức năng sẽ trả lại số dư trừ đi chi phí của sản phẩm đã mua.

  • Chi phí sản phẩm là:

    • Uống: $ 2,75
    • Chip: $ 2,25
    • Candy: $ 3,15

3. Trả lại thay đổi

  • Viết một hàm gọi là return_change có một đối số duy nhất gọi là "cân bằng".

  • Nếu số dư lớn hơn 0, hãy trả lại danh sách các đồng tiền [có thể là bất kỳ sự kết hợp nào của 5, 10, 25, 100, 200] sẽ tổng hợp lên đến số dư.

  • Nếu vì bất kỳ lý do gì, số dư không phải là bội số 5, thì tổng số tiền được trả lại phải được làm tròn xuống bội số gần nhất của 5 và không vượt quá số dư.

  • Các đồng tiền được trả lại phải là lớn nhất đầu tiên, sau đó là nhỏ nhất.

Máy bán hàng tự động - Take 2: Sử dụng OOP

Hướng dẫn này xem xét lại một ví dụ trước đó và sử dụng các mô hình lập trình hướng đối tượng để thể hiện các khái niệm liên quan đến máy bán hàng tự động. Chúng ta sẽ thấy các lớp và đối tượng sẽ giúp chúng ta thể hiện tốt hơn "thế giới thực" và giúp chúng ta theo dõi trạng thái:

Thiết kế

Hãy bắt đầu bằng cách thiết kế máy bán hàng tự động của chúng tôi bằng cách mô hình hóa các đối tượng khác nhau. Đầu tiên, chúng tôi có:

  • đồng xu
  • Các sản phẩm
  • Máy bán hàng tự động

Chúng ta có thể coi đây là các lớp / khái niệm trừu tượng. Trong thực tế, chúng tôi có các đồng tiền cụ thể như Quarters, Loonies & Toonies. Đối với các sản phẩm, chúng tôi có khoai tây chiên, kẹo và đồ uống-những thứ này có thể được chia thành các sản phẩm cụ thể như "coca-Cola có thể" 355ml ". Đây được coi là các lớp cụ thể mà tất cả đều chia sẻ các thuộc tính chung cho các đồng tiền và sản phẩm tóm tắt.

Chúng tôi cũng phải mô hình hóa máy bán hàng tự động của mình và xác định các hành động trên đó:

  • insert_coin0
  • insert_coin1
  • insert_coin2
  • insert_coin3

Mô hình

đồng xu

Các sản phẩm
Máy bán hàng tự động
Chúng ta có thể coi đây là các lớp / khái niệm trừu tượng. Trong thực tế, chúng tôi có các đồng tiền cụ thể như Quarters, Loonies & Toonies. Đối với các sản phẩm, chúng tôi có khoai tây chiên, kẹo và đồ uống-những thứ này có thể được chia thành các sản phẩm cụ thể như "coca-Cola có thể" 355ml ". Đây được coi là các lớp cụ thể mà tất cả đều chia sẻ các thuộc tính chung cho các đồng tiền và sản phẩm tóm tắt.
Chúng tôi cũng phải mô hình hóa máy bán hàng tự động của mình và xác định các hành động trên đó:

Mô hình

Nickel[Coin]
Đồng tiềninsert_coin4
insert_coin5insert_coin6
Dime[Coin]
Đồng tiềninsert_coin4
insert_coin5insert_coin6
Quarter[Coin]
Đồng tiềninsert_coin4
insert_coin5insert_coin6
Loonie[Coin]
Đồng tiềninsert_coin4
insert_coin5insert_coin6
Toonie[Coin]
Đồng tiềninsert_coin4
insert_coin5insert_coin6

Các sản phẩm

Máy bán hàng tự động
Chúng ta có thể coi đây là các lớp / khái niệm trừu tượng. Trong thực tế, chúng tôi có các đồng tiền cụ thể như Quarters, Loonies & Toonies. Đối với các sản phẩm, chúng tôi có khoai tây chiên, kẹo và đồ uống-những thứ này có thể được chia thành các sản phẩm cụ thể như "coca-Cola có thể" 355ml ". Đây được coi là các lớp cụ thể mà tất cả đều chia sẻ các thuộc tính chung cho các đồng tiền và sản phẩm tóm tắt.
Chúng tôi cũng phải mô hình hóa máy bán hàng tự động của mình và xác định các hành động trên đó:
Chúng tôi cũng phải mô hình hóa máy bán hàng tự động của mình và xác định các hành động trên đó:
Chips[Product]
Mô hìnhĐồng tiền
insert_coin4insert_coin5
Chúng tôi cũng phải mô hình hóa máy bán hàng tự động của mình và xác định các hành động trên đó:Mô hình
Drink[Product]
Mô hìnhĐồng tiền
insert_coin4insert_coin5
Chúng tôi cũng phải mô hình hóa máy bán hàng tự động của mình và xác định các hành động trên đó:Mô hình
Candy[Product]
Mô hìnhĐồng tiền
insert_coin4insert_coin5
insert_coin5insert_coin6

Máy bán hàng tự động

Chúng ta có thể coi đây là các lớp / khái niệm trừu tượng. Trong thực tế, chúng tôi có các đồng tiền cụ thể như Quarters, Loonies & Toonies. Đối với các sản phẩm, chúng tôi có khoai tây chiên, kẹo và đồ uống-những thứ này có thể được chia thành các sản phẩm cụ thể như "coca-Cola có thể" 355ml ". Đây được coi là các lớp cụ thể mà tất cả đều chia sẻ các thuộc tính chung cho các đồng tiền và sản phẩm tóm tắt.
Chúng tôi cũng phải mô hình hóa máy bán hàng tự động của mình và xác định các hành động trên đó:
Mô hình
Đồng tiền
insert_coin4
insert_coin5
insert_coin6

Các lớp sau được kế thừa từ lớp phụ huynh insert_coin7. Kế thừa đạt được bằng cách cung cấp dấu ngoặc đơn xung quanh định nghĩa lớp và cung cấp [các] lớp phụ huynh làm đối số.

  • giá trị

  • insert_coin8

insert_coin9

  • coin0not their instances.

    E.g.

    machine = VendingMachine[]
    machine.buy_product[products.Drink]  # Good: This is a type
    machine.buy_product[products.Drink[]]  # Bad: This is an instance

    coin1

  • coin3

  • coin4

coin6

  • coin7

  • coin9

  • inserted_coins0

inserted_coins2

  • Sản phẩm

  • inserted_coins3

  • inserted_coins4

  • inserted_coins6

  • Scenarios:

    • inserted_coins7
    • inserted_coins8
    • inserted_coins9
    • coin1
    • Khi số dư là 265, một toonie, hai phần tư, một xu và một niken nên được trả lại
    • Khi số dư là 7, một niken nên được trả lại
    • Khi sự cân bằng là âm, không có gì được trả lại

Giải quyết

  • Bắt đầu bằng cách xây dựng các lớp Coin, tiếp theo là sản phẩm. Các bài kiểm tra bắt đầu đã được cung cấp cho các lớp này.
  • Bắt đầu viết các xét nghiệm cho các phương pháp Vendingmachine, theo thứ tự được xác định ở trên.

Bài Viết Liên Quan

Chủ Đề