28. Banyak object bersama — Solusi pekerjaan rumah

File solusi ada di exercises/28/homework/solutions/. Keempat soal menggunakan class Hero kecil yang sama dari bagian atas masing-masing file starter.

Soal 1 — Regu pahlawan

Soal. Buat list dari tiga pahlawan dan cetak masing-masing.

Solusi.

party = [
    Hero("Ada", 100),
    Hero("Ben", 80),
    Hero("Cara", 120),
]

for h in party:
    print(f"{h.name}: {h.hp} HP")

Output:

Ada: 100 HP
Ben: 80 HP
Cara: 120 HP

Soal 2 — Total HP

Soal. Jumlahkan HP semua orang.

Solusi.

total = 0
for h in party:
    total = total + h.hp
print(f"Team HP: {total}")   # Team HP: 300

Pola akumulasi dari Bab 20, membaca sebuah field alih-alih angka biasa.

Soal 3 — Siapa yang terluka?

Soal. Cetak setiap pahlawan yang hp-nya di bawah max_hp.

Solusi.

for h in party:
    if h.hp < h.max_hp:
        print(f"{h.name} is hurt.")

Hanya pahlawan yang sudah menerima kerusakan yang dicetak. if membandingkan dua field dari object yang sama.

Tantangan — Pahlawan terkuat

Soal. Temukan pahlawan dengan HP terbanyak.

Cara berpikir. Akumulasi maksimum: simpan variable untuk pahlawan terbaik sejauh ini, gantikan setiap kali menemukan yang lebih kuat. Mulai dari pahlawan pertama (atau None, diisi pada giliran pertama).

Solusi.

strongest = party[0]
for h in party:
    if h.hp > strongest.hp:
        strongest = h
print(f"Strongest: {strongest.name}")   # Strongest: Cara

Kesalahan umum.

  • Memulai strongest dengan None, lalu menulis h.hp > strongest.hp pada giliran pertama akan memunculkan AttributeError karena None tidak memiliki .hp. Mulai dengan pahlawan pertama, atau jaga giliran pertama.

Selesai?

Kamu kini bisa mengelola seluruh koleksi object dengan loop yang sudah kamu tahu. Selanjutnya, Inheritance mendalam memungkinkan satu class membangun dari class lain, sehingga perilaku yang sama ditulis sekali.