class Klasemen:
"""
Kelas untuk mengelola dan mencatat poin klub sepak bola dalam sebuah kompetisi.
"""
def __init__(self, daftarKlub):
"""
Konstruktor untuk menginisialisasi klasemen.
Membuat dictionary untuk menyimpan poin masing-masing klub, diinisialisasi dengan 0.
Args:
daftarKlub (list): List berisi nama-nama klub yang berpartisipasi.
"""
self.poin_klub = {klub: 0 for klub in daftarKlub} # Inisialisasi poin menggunakan dictionary comprehension (lebih ringkas)
def catatPermainan(self, klubKandang, klubTandang, string_skor):
"""
Mencatat hasil dari sebuah pertandingan dan memperbarui poin klub.
Args:
klubKandang (str): Nama klub tuan rumah.
klubTandang (str): Nama klub tandang.
string_skor (str): Skor pertandingan dalam format 'skorKandang:skorTandang', misal '2:1'.
"""
skor_parts = string_skor.split(':')
skor_kandang = int(skor_parts[0])
skor_tandang = int(skor_parts[1])
# Logika penambahan poin berdasarkan aturan pertandingan
if skor_kandang > skor_tandang:
self.poin_klub[klubKandang] += 3
elif skor_tandang > skor_kandang:
self.poin_klub[klubTandang] += 3
else: # skor_kandang == skor_tandang (seri)
self.poin_klub[klubKandang] += 1
self.poin_klub[klubTandang] += 1
def _get_sorted_klasemen(self):
"""
Metode internal untuk mendapatkan daftar klub yang sudah diurutkan berdasarkan poin.
Diurutkan dari poin tertinggi ke terendah.
Returns:
list: List of tuples (nama_klub, poin), cth: [('Arsenal', 8), ('Chelsea', 5), ...]
"""
# Menggunakan sorted dengan lambda untuk mengurutkan dictionary items berdasarkan poin
return sorted(self.poin_klub.items(), key=lambda item: item[1], reverse=True)
def cetakKlasemen(self):
"""
Mencetak klasemen saat ini dalam format yang ditentukan:
[ 'KlubA'=PoinA, 'KlubB'=PoinB, ... ]
"""
sorted_klasemen = self._get_sorted_klasemen()
# Membuat list string terformat untuk setiap entri klub
formatted_entries = ["'%s'=%d" % (klub, poin) for klub, poin in sorted_klasemen]
# Menggabungkan semua entri dan mencetaknya dalam format yang diinginkan
print "[ %s]" % ', '.join(formatted_entries)
def ambilPeringkat(self, nomorPeringkat):
"""
Mengembalikan nama klub yang berada pada peringkat tertentu.
Args:
nomorPeringkat (int): Nomor peringkat yang diinginkan (dimulai dari 1 untuk peringkat teratas).
Returns:
str: Nama klub pada peringkat tersebut, atau None jika peringkat tidak valid.
"""
sorted_klasemen = self._get_sorted_klasemen()
# Memastikan nomor peringkat valid sebelum mencoba mengakses list
if 1 <= nomorPeringkat <= len(sorted_klasemen):
# Mengembalikan nama klub pada indeks (nomorPeringkat - 1)
return sorted_klasemen[nomorPeringkat - 1][0]
else:
# Pesan error yang informatif
print "Peringkat %d tidak valid. Klasemen hanya memiliki %d klub." % \
(nomorPeringkat, len(sorted_klasemen))
return None
print "\n=== DEMO KLASEMEN SEPAK BOLA ==="
# Inisialisasi Klasemen
print "\n--- Inisialisasi Klasemen Baru ---"
daftar_klub_baru = ['Bumi Putera FC', 'Langit Biru FC', 'Angin Kencang FC', 'Air Tenang FC']
print "Membuat klasemen dengan klub:", daftar_klub_baru
Sklasemen = Klasemen(daftar_klub_baru)
# Mencatat hasil pertandingan
print "\n--- Mencatat Hasil Pertandingan ---"
Sklasemen.catatPermainan('Bumi Putera FC', 'Langit Biru FC', '2:1') # BP 3, LB 0
print "Bumi Putera FC vs Langit Biru FC: 2-1"
Sklasemen.catatPermainan('Angin Kencang FC', 'Air Tenang FC', '0:0') # AK 1, AT 1
print "Angin Kencang FC vs Air Tenang FC: 0-0"
Sklasemen.catatPermainan('Bumi Putera FC', 'Angin Kencang FC', '1:3') # BP 0, AK 3
print "Bumi Putera FC vs Angin Kencang FC: 1-3"
Sklasemen.catatPermainan('Langit Biru FC', 'Air Tenang FC', '2:0') # LB 3, AT 0
print "Langit Biru FC vs Air Tenang FC: 2-0"
Sklasemen.catatPermainan('Bumi Putera FC', 'Air Tenang FC', '1:1') # BP 1, AT 1
print "Bumi Putera FC vs Air Tenang FC: 1-1"
# Perhitungan Poin (Manual):
# Bumi Putera FC: 3 + 0 + 1 = 4
# Langit Biru FC: 0 + 3 = 3
# Angin Kencang FC: 1 + 3 = 4
# Air Tenang FC: 1 + 0 + 1 = 2
# Mencetak klasemen
print "\n--- Klasemen Saat Ini ---"
# Ekspektasi: [ 'Bumi Putera FC'=4, 'Angin Kencang FC'=4, 'Langit Biru FC'=3, 'Air Tenang FC'=2]
# Jika poin sama,klub yang memiliki poin sama akan tetap berdampingan.
Sklasemen.cetakKlasemen()
# Mengambil klub pada peringkat tertentu
print "\n--- Pengecekan Peringkat ---"
peringkat_1 = Sklasemen.ambilPeringkat(1)
if peringkat_1:
print "Klub peringkat ke-1 adalah:", peringkat_1 # Output bisa 'Bumi Putera FC' atau 'Angin Kencang FC'
peringkat_3 = Sklasemen.ambilPeringkat(3)
if peringkat_3:
print "Klub peringkat ke-3 adalah:", peringkat_3 # Output seharusnya 'Langit Biru FC'
print "\n--- Contoh Peringkat Tidak Valid ---"
Sklasemen.ambilPeringkat(0)
Sklasemen.ambilPeringkat(len(daftar_klub_baru) + 1)