Student Grader Program with Object-Oriented Programming#
Pada tutorial kali ini, kamu akan membuat program kalkulator nilai siswa menggunakan pemrograman berbasis objek.
Kita akan membuat kelas Siswa untuk merepresentasikan setiap siswa dengan methods berikut:
__init__
menginisialisasi objek Siswa dengan nama dan nomor induk.tambah_nilai
memungkinkan penambahan nilai untuk mata pelajaran yang berbeda.hitung_nilai_rata_rata
menghitung rata-rata dari semua nilai.dapatkan_nilai_huruf
mengkonversi nilai numerik menjadi nilai huruf.tampilkan_rapor
menampilkan rapor lengkap untuk siswa.
class Siswa:
def __init__(self, nama, nomor_induk):
"""
Inisialisasi objek Siswa.
Parameter:
- nama (str): Nama siswa
- nomor_induk (str): Nomor induk siswa
"""
self.nama = nama
self.nomor_induk = nomor_induk
self.nilai = {}
self.nilai_rata_rata = None
def tambah_nilai(self, mata_pelajaran, skor):
"""
Menambahkan nilai untuk mata pelajaran tertentu.
Parameter:
- mata_pelajaran (str): Nama mata pelajaran
- skor (float): Nilai yang diperoleh (0-100)
"""
if 0 <= skor <= 100:
self.nilai[mata_pelajaran] = skor
else:
print(
f"Nilai tidak valid untuk {mata_pelajaran}. Nilai harus antara 0 dan 100."
)
def hitung_nilai_rata_rata(self):
"""
Menghitung nilai rata-rata dari semua mata pelajaran.
"""
if self.nilai:
self.nilai_rata_rata = sum(self.nilai.values()) / len(self.nilai)
else:
self.nilai_rata_rata = None
def dapatkan_nilai_huruf(self):
"""
Mengkonversi nilai rata-rata numerik menjadi nilai huruf.
Mengembalikan:
- str: Nilai huruf (A, B, C, D, atau E)
"""
if self.nilai_rata_rata is None:
return "Belum ada nilai"
elif self.nilai_rata_rata >= 90:
return "A"
elif self.nilai_rata_rata >= 80:
return "B"
elif self.nilai_rata_rata >= 70:
return "C"
elif self.nilai_rata_rata >= 60:
return "D"
else:
return "E"
def tampilkan_rapor(self):
"""
Menampilkan rapor lengkap untuk siswa.
"""
print(f"\nRapor Siswa untuk {self.nama} (NIS: {self.nomor_induk})")
print("Nilai Mata Pelajaran:")
for mata_pelajaran, nilai in self.nilai.items():
print(f"{mata_pelajaran}: {nilai}")
self.hitung_nilai_rata_rata()
print(f"\nNilai Rata-rata: {self.nilai_rata_rata:.2f}")
print(f"Nilai Huruf: {self.dapatkan_nilai_huruf()}")
Selanjutnya, kita bisa meng-instansiasi objek Siswa pada program kita:
siswa1 = Siswa("Luna", "S12345")
# Menambahkan nilai untuk berbagai mata kuliah
siswa1.tambah_nilai("Matematika", 95)
siswa1.tambah_nilai("Bahasa Inggris", 98)
siswa1.tambah_nilai("Kecerdasan Buatan", 90)
siswa1.tambah_nilai("Pemrosesan Bahasa Alami", 92)
# Menampilkan rapor siswa
siswa1.tampilkan_rapor()
Rapor Siswa untuk Luna (NIS: S12345)
Nilai Mata Pelajaran:
Matematika: 95
Bahasa Inggris: 98
Kecerdasan Buatan: 90
Pemrosesan Bahasa Alami: 92
Nilai Rata-rata: 93.75
Nilai Huruf: A
Inheritance#
Pada bagian selanjutnya, kita akan menambahkan konsep pewarisan pada program kita.
Kita akan membuat kelas baru, yaitu SiswaBeasiswa
yang mewarisi kelas Siswa
dan memiliki atribut dan fitur tambahan.
class SiswaBeasiswa(Siswa):
def __init__(self, nama, nomor_induk, jenis_beasiswa):
"""
Inisialisasi objek SiswaBeasiswa.
Parameter:
- nama (str): Nama siswa
- nomor_induk (str): Nomor induk siswa
- jenis_beasiswa (str): Jenis beasiswa yang diterima
"""
super().__init__(nama, nomor_induk) # Memanggil konstruktor kelas induk
self.jenis_beasiswa = jenis_beasiswa
self.syarat_nilai_minimum = 80
def cek_kelayakan_beasiswa(self):
"""
Memeriksa apakah siswa masih layak menerima beasiswa.
Mengembalikan:
- bool: True jika layak, False jika tidak
"""
self.hitung_nilai_rata_rata()
return self.nilai_rata_rata >= self.syarat_nilai_minimum
def tampilkan_rapor(self):
"""
Menampilkan rapor lengkap untuk siswa beasiswa.
Override metode dari kelas induk.
"""
super().tampilkan_rapor() # Memanggil metode kelas induk
print(f"Jenis Beasiswa: {self.jenis_beasiswa}")
if self.cek_kelayakan_beasiswa():
print("Status Beasiswa: Layak")
else:
print("Status Beasiswa: Tidak Layak")
# Membuat siswa beasiswa
siswa_beasiswa1 = SiswaBeasiswa("Aurora", "S67890", "Beasiswa Prestasi")
siswa_beasiswa1.tambah_nilai("Matematika", 100)
siswa_beasiswa1.tambah_nilai("Bahasa Inggris", 100)
siswa_beasiswa1.tambah_nilai("Kecerdasan Buatan", 95)
siswa_beasiswa1.tambah_nilai("Pemrosesan Bahasa Alami", 95)
siswa_beasiswa1.tampilkan_rapor()
Rapor Siswa untuk Aurora (NIS: S67890)
Nilai Mata Pelajaran:
Matematika: 100
Bahasa Inggris: 100
Kecerdasan Buatan: 95
Pemrosesan Bahasa Alami: 95
Nilai Rata-rata: 97.50
Nilai Huruf: A
Jenis Beasiswa: Beasiswa Prestasi
Status Beasiswa: Layak