Mini-proyek Bagian 6: Sistem Inventori

Proyek ini menggunakan bab 26 dan 27: class, __init__, instance method, dan inheritance. Item dan Inventory mengelola tas berisi loot.

Apa yang dibangun

Dua class dalam satu file modul:

Item — satu benda yang bisa dikumpulkan.

  • Item(name, weight, value) — constructor.
  • Field: name (string), weight (angka), value (angka).
  • describe() — ringkasan satu baris, misalnya "sword (3.5kg, 50g)".

Inventory — wadah untuk item-item.

  • Inventory() — constructor; dimulai dengan list kosong.
  • Field: items (list dari instance Item).
  • add(item) — menambahkan sebuah item.
  • remove(name) — menghapus item pertama dengan nama itu; mengembalikannya, atau None jika tidak ada yang cocok.
  • list() — mencetak describe() setiap item di barisnya sendiri, lalu footer total.
  • total_weight() — jumlah semua berat.
  • total_value() — jumlah semua nilai.

main.py:

  1. Membuat beberapa item.
  2. Membuat inventori dan menambahkannya.
  3. Menampilkan daftar inventori.
  4. Menghapus satu item berdasarkan nama.
  5. Menampilkan daftar lagi.
  6. Mencetak total berat dan nilai sebagai ringkasan.

Contoh output:

Inventory (3 items):
  - sword (3.5kg, 50g)
  - shield (5.0kg, 30g)
  - potion (0.2kg, 5g)
  Totals: 8.70kg, 85g

(removed sword)

Inventory (2 items):
  - shield (5.0kg, 30g)
  - potion (0.2kg, 5g)
  Totals: 5.20kg, 35g

Tata letak file

Dua file. Seperti pada Bagian 5, cd ke folder proyek terlebih dahulu:

cd projects/05-inventory/starter
python main.py

File (di dalam starter/ dan finished/):

  • inventory.py — mendefinisikan Item dan Inventory sebagai class Python. Kedua class ada di level atas; tidak diperlukan langkah ekspor khusus.

  • main.py — mengimpor kedua class dan menjalankan skenario:

    from inventory import Item, Inventory

Petunjuk

  • Kedua class menggunakan __init__ untuk mengatur field-fieldnya di self.
  • Inventory.remove(name) menelusuri self.items dengan enumerate untuk mencari name yang cocok, lalu self.items.pop(i) menghapusnya.
  • Gunakan f-string untuk baris total di Inventory.list: f"Totals: {self.total_weight():.2f}kg, {self.total_value()}g".
  • Item.describe bisa mengembalikan string alih-alih mencetaknya, sehingga Inventory.list yang mengontrol bagaimana setiap baris ditampilkan.

Yang boleh digunakan

Apa pun dari Bagian 2-6: variable, alur kontrol, function, module, list, dict, class, method.

Selesai?

Ketika skenario berjalan bersih dari main.py, kamu sudah selesai. Selanjutnya: Bab 31 — Dari Python ke platform lain.