🐍 📝 Bagian 3 (Jobsheet Praktikum Terstruktur) • Modul JS-04 100% Standar Industri & Vokasi

Jobsheet 04: Desain Fungsi & Modularitas

Praktikum terstruktur: Refaktorisasi program monolitik menjadi modul fungsi terstruktur, kalkulator rumus geometri dengan parameter dinamis, dan lambda filter.

1. Kompetensi Dasar & Indikator

Tujuan Praktikum:
  • Mampu memecah program monolitik besar menjadi fungsi-fungsi kecil dengan tanggung jawab tunggal (Single Responsibility Principle).
  • Mampu menerima parameter dalam jumlah fleksibel menggunakan *args dan **kwargs.
  • Menggunakan fungsi filter() dan map() bersama lambda untuk transformasi data list.

2. Aktivitas Terbimbing: Modul Analisis Statistik Numerik

Ketik dan jalankan file lab4_statistik.py:

python (lab4_statistik.py)
# Fungsi menerima berapapun jumlah angka (*args)
def hitung_statistik(*data: float) -> dict:
    """Menghitung Mean, Median, Min, dan Max dari sekumpulan angka."""
    if not data:
        return {"error": "Tidak ada data yang dikirim!"}

    angka_list = sorted(data)
    n = len(angka_list)
    
    # 1. Rata-rata (Mean)
    mean = sum(angka_list) / n
    
    # 2. Median (Nilai Tengah)
    if n % 2 == 1:
        median = angka_list[n // 2]
    else:
        median = (angka_list[(n // 2) - 1] + angka_list[n // 2]) / 2

    return {
        "total_sampel": n,
        "mean": round(mean, 2),
        "median": median,
        "nilai_terkecil": angka_list[0],
        "nilai_terbesar": angka_list[-1]
    }

# Pengujian Fungsi
hasil = hitung_statistik(80, 95, 70, 85, 90, 60, 100)

print("=== RINGKASAN STATISTIK KELAS ===")
for k, v in hasil.items():
    print(f"{k.replace('_', ' ').title():<18}: {v}")

3. Tugas Mandiri: Mesin Analisis Mutasi Rekening Bank

Studi Kasus: Pemroses Riwayat Transaksi Finansial

Diberikan kumpulan mutasi rekening dalam format List of Dictionaries:
transaksi = [{"id": 1, "tipe": "IN", "jumlah": 1500000, "ket": "Gaji"}, {"id": 2, "tipe": "OUT", "jumlah": 50000, "ket": "Makan Siang"}, ...]

Buat 3 Fungsi Terpisah:
  • filter_transaksi(daftar, tipe_target): Menggunakan fungsi filter() & lambda untuk mengambil hanya transaksi masuk ("IN") atau keluar ("OUT").
  • hitung_arus_kas(daftar): Mengembalikan 3 nilai: Total Pemasukan, Total Pengeluaran, dan Saldo Bersih (Cashflow).
  • cetak_laporan_keuangan(daftar, nama_pemilik, nomor_rekening): Menggabungkan semua fungsi di atas dan mencetak rincian mutasi yang terformat rapi.
Kriteria Keberhasilan: Fungsi bersifat reusable (dapat digunakan untuk rekening mana pun tanpa dependensi variabel global).

4. Rubrik Evaluasi & Penilaian

Aspek Penilaian Bobot Kriteria Sempurna
Desain Modular & Return Values 35% Fungsi modular mandiri, mengembalikan nilai murni (pure function).
Implementasi Lambda & Filter/Map 30% Penyaringan transaksi mutasi menggunakan sintaks lambda yang tepat.
Penanganan Kasus List Kosong 20% Fungsi tidak error ketika menerima list transaksi yang kosong.
Dokumentasi Docstring & Type Hint 15% Setiap fungsi memiliki docstring penjelas parameter dan return.