fork download
  1. class Klasemen:
  2. """
  3. Kelas untuk mengelola dan mencatat poin klub sepak bola dalam sebuah kompetisi.
  4. """
  5.  
  6. def __init__(self, daftarKlub):
  7. """
  8. Konstruktor untuk menginisialisasi klasemen.
  9. Membuat dictionary untuk menyimpan poin masing-masing klub, diinisialisasi dengan 0.
  10.  
  11. Args:
  12. daftarKlub (list): List berisi nama-nama klub yang berpartisipasi.
  13. """
  14. self.poin_klub = {klub: 0 for klub in daftarKlub} # Inisialisasi poin menggunakan dictionary comprehension (lebih ringkas)
  15.  
  16. def catatPermainan(self, klubKandang, klubTandang, string_skor):
  17. """
  18. Mencatat hasil dari sebuah pertandingan dan memperbarui poin klub.
  19.  
  20. Args:
  21. klubKandang (str): Nama klub tuan rumah.
  22. klubTandang (str): Nama klub tandang.
  23. string_skor (str): Skor pertandingan dalam format 'skorKandang:skorTandang', misal '2:1'.
  24. """
  25. skor_parts = string_skor.split(':')
  26. skor_kandang = int(skor_parts[0])
  27. skor_tandang = int(skor_parts[1])
  28.  
  29. # Logika penambahan poin berdasarkan aturan pertandingan
  30. if skor_kandang > skor_tandang:
  31. self.poin_klub[klubKandang] += 3
  32. elif skor_tandang > skor_kandang:
  33. self.poin_klub[klubTandang] += 3
  34. else: # skor_kandang == skor_tandang (seri)
  35. self.poin_klub[klubKandang] += 1
  36. self.poin_klub[klubTandang] += 1
  37.  
  38. def _get_sorted_klasemen(self):
  39. """
  40. Metode internal untuk mendapatkan daftar klub yang sudah diurutkan berdasarkan poin.
  41. Diurutkan dari poin tertinggi ke terendah.
  42.  
  43. Returns:
  44. list: List of tuples (nama_klub, poin), cth: [('Arsenal', 8), ('Chelsea', 5), ...]
  45. """
  46. # Menggunakan sorted dengan lambda untuk mengurutkan dictionary items berdasarkan poin
  47. return sorted(self.poin_klub.items(), key=lambda item: item[1], reverse=True)
  48.  
  49. def cetakKlasemen(self):
  50. """
  51. Mencetak klasemen saat ini dalam format yang ditentukan:
  52. [ 'KlubA'=PoinA, 'KlubB'=PoinB, ... ]
  53. """
  54. sorted_klasemen = self._get_sorted_klasemen()
  55.  
  56. # Membuat list string terformat untuk setiap entri klub
  57. formatted_entries = ["'%s'=%d" % (klub, poin) for klub, poin in sorted_klasemen]
  58.  
  59. # Menggabungkan semua entri dan mencetaknya dalam format yang diinginkan
  60. print "[ %s]" % ', '.join(formatted_entries)
  61.  
  62. def ambilPeringkat(self, nomorPeringkat):
  63. """
  64. Mengembalikan nama klub yang berada pada peringkat tertentu.
  65.  
  66. Args:
  67. nomorPeringkat (int): Nomor peringkat yang diinginkan (dimulai dari 1 untuk peringkat teratas).
  68.  
  69. Returns:
  70. str: Nama klub pada peringkat tersebut, atau None jika peringkat tidak valid.
  71. """
  72. sorted_klasemen = self._get_sorted_klasemen()
  73.  
  74. # Memastikan nomor peringkat valid sebelum mencoba mengakses list
  75. if 1 <= nomorPeringkat <= len(sorted_klasemen):
  76. # Mengembalikan nama klub pada indeks (nomorPeringkat - 1)
  77. return sorted_klasemen[nomorPeringkat - 1][0]
  78. else:
  79. # Pesan error yang informatif
  80. print "Peringkat %d tidak valid. Klasemen hanya memiliki %d klub." % \
  81. (nomorPeringkat, len(sorted_klasemen))
  82. return None
  83.  
  84. print "\n=== DEMO KLASEMEN SEPAK BOLA ==="
  85.  
  86. # Inisialisasi Klasemen
  87. print "\n--- Inisialisasi Klasemen Baru ---"
  88. daftar_klub_baru = ['Bumi Putera FC', 'Langit Biru FC', 'Angin Kencang FC', 'Air Tenang FC']
  89. print "Membuat klasemen dengan klub:", daftar_klub_baru
  90. Sklasemen = Klasemen(daftar_klub_baru)
  91.  
  92. # Mencatat hasil pertandingan
  93. print "\n--- Mencatat Hasil Pertandingan ---"
  94. Sklasemen.catatPermainan('Bumi Putera FC', 'Langit Biru FC', '2:1') # BP 3, LB 0
  95. print "Bumi Putera FC vs Langit Biru FC: 2-1"
  96. Sklasemen.catatPermainan('Angin Kencang FC', 'Air Tenang FC', '0:0') # AK 1, AT 1
  97. print "Angin Kencang FC vs Air Tenang FC: 0-0"
  98. Sklasemen.catatPermainan('Bumi Putera FC', 'Angin Kencang FC', '1:3') # BP 0, AK 3
  99. print "Bumi Putera FC vs Angin Kencang FC: 1-3"
  100. Sklasemen.catatPermainan('Langit Biru FC', 'Air Tenang FC', '2:0') # LB 3, AT 0
  101. print "Langit Biru FC vs Air Tenang FC: 2-0"
  102. Sklasemen.catatPermainan('Bumi Putera FC', 'Air Tenang FC', '1:1') # BP 1, AT 1
  103. print "Bumi Putera FC vs Air Tenang FC: 1-1"
  104.  
  105. # Perhitungan Poin (Manual):
  106. # Bumi Putera FC: 3 + 0 + 1 = 4
  107. # Langit Biru FC: 0 + 3 = 3
  108. # Angin Kencang FC: 1 + 3 = 4
  109. # Air Tenang FC: 1 + 0 + 1 = 2
  110.  
  111. # Mencetak klasemen
  112. print "\n--- Klasemen Saat Ini ---"
  113. # Ekspektasi: [ 'Bumi Putera FC'=4, 'Angin Kencang FC'=4, 'Langit Biru FC'=3, 'Air Tenang FC'=2]
  114. # Jika poin sama,klub yang memiliki poin sama akan tetap berdampingan.
  115. Sklasemen.cetakKlasemen()
  116.  
  117.  
  118. # Mengambil klub pada peringkat tertentu
  119. print "\n--- Pengecekan Peringkat ---"
  120. peringkat_1 = Sklasemen.ambilPeringkat(1)
  121. if peringkat_1:
  122. print "Klub peringkat ke-1 adalah:", peringkat_1 # Output bisa 'Bumi Putera FC' atau 'Angin Kencang FC'
  123.  
  124. peringkat_3 = Sklasemen.ambilPeringkat(3)
  125. if peringkat_3:
  126. print "Klub peringkat ke-3 adalah:", peringkat_3 # Output seharusnya 'Langit Biru FC'
  127.  
  128. print "\n--- Contoh Peringkat Tidak Valid ---"
  129. Sklasemen.ambilPeringkat(0)
  130. Sklasemen.ambilPeringkat(len(daftar_klub_baru) + 1)
Success #stdin #stdout 0.03s 63208KB
stdin
Standard input is empty
stdout
=== DEMO KLASEMEN SEPAK BOLA ===

--- Inisialisasi Klasemen Baru ---
Membuat klasemen dengan klub: ['Bumi Putera FC', 'Langit Biru FC', 'Angin Kencang FC', 'Air Tenang FC']

--- Mencatat Hasil Pertandingan ---
Bumi Putera FC vs Langit Biru FC: 2-1
Angin Kencang FC vs Air Tenang FC: 0-0
Bumi Putera FC vs Angin Kencang FC: 1-3
Langit Biru FC vs Air Tenang FC: 2-0
Bumi Putera FC vs Air Tenang FC: 1-1

--- Klasemen Saat Ini ---
[ 'Bumi Putera FC'=4, 'Angin Kencang FC'=4, 'Langit Biru FC'=3, 'Air Tenang FC'=2]

--- Pengecekan Peringkat ---
Klub peringkat ke-1 adalah: Bumi Putera FC
Klub peringkat ke-3 adalah: Langit Biru FC

--- Contoh Peringkat Tidak Valid ---
Peringkat 0 tidak valid. Klasemen hanya memiliki 4 klub.
Peringkat 5 tidak valid. Klasemen hanya memiliki 4 klub.