"""Sesi 08 — Mini Project 1: Decision Making | Kode Pendamping Lengkap
SMAS St. John · Ekskul CSSE (Python)

Cara pakai:
  1. Simpan file ini, buka di VS Code
  2. Tekan Run (atau ketik di terminal: python kode.py)
  3. Program grading di BAGIAN 1 jalan langsung (tanpa input) —
     lalu baca kartu kasus di BAGIAN 2 dan uji versi interaktifmu sendiri.

File ini mengikuti alur deck:
  BAGIAN 1 = master solution: Sistem Penilaian Siswa (slide 09)
  BAGIAN 2 = kartu kasus uji - 4 skenario        (slide 10)
  BAGIAN 3 = menengah: Cek Tiket Bioskop         (slide 11)
  BAGIAN 4 = challenge: Chatbot Jurusan BINUS    (slide 11)
  BAGIAN 5 = rubrik lulus + jebakan              (slide 13-14)
"""

# ============================================================
# BAGIAN 1 — MASTER SOLUTION: Sistem Penilaian Siswa (slide 09)
# ============================================================
# Baseline wajib. Versi non-interaktif di bawah — jalankan langsung.
# Versi interaktif (hapus # di bawah, lalu comment bagian hardcoded):
# print("=== SISTEM PENILAIAN SISWA ===")
# nama = input("Nama siswa: ")
# nilai = int(input("Nilai angka (0-100): "))
# hadir = int(input("Kehadiran (%): "))

print("=== SISTEM PENILAIAN SISWA ===")
nama = "Budi"       # contoh: input("Nama siswa: ")
nilai = 82          # contoh: int(input("Nilai angka (0-100): "))
hadir = 85          # contoh: int(input("Kehadiran (%): "))

# --- Keputusan 1: predikat huruf (urutan TINGGI -> rendah!) ---
if nilai >= 90:
    grade = "A"
elif nilai >= 75:
    grade = "B"
elif nilai >= 60:
    grade = "C"
elif nilai >= 40:
    grade = "D"
else:
    grade = "E"

# --- Keputusan 2: status lulus (dua syarat, digabung and) ---
lulus = nilai >= 75 and hadir >= 80

# --- Output hasil ---
print()
print("--- HASIL ---")
print("Nama :", nama)
print("Nilai :", nilai)
print("Predikat:", grade)
if lulus:
    print("Status : LULUS - pertahankan!")
else:
    print("Status : TIDAK LULUS - ayo semangat, masih bisa diperbaiki!")

# Output untuk Budi 82/85:
# === SISTEM PENILAIAN SISWA ===
# --- HASIL ---
# Nama : Budi
# Nilai : 82
# Predikat: B
# Status : LULUS - pertahankan!

# ============================================================
# BAGIAN 2 — kartu kasus: uji 4, bukan 1 (slide 10)
# ============================================================
# Program "selesai" bukan yang sekali jalan — tapi yang menjawab
# benar untuk BEBERAPA kasus. Kartu kasus dari deck:
#
#   Kasus 1 : Budi 95 / 90 -> A, LULUS
#   Kasus 2 : Sinta 75 / 80 -> B, LULUS (tepat di batas, dua-duanya!)
#   Kasus 3 : Rio  60 / 70 -> C, TIDAK LULUS (nilai cukup, kehadiran kurang)
#   Kasus 4 : Ani  40 / 90 -> D, TIDAK LULUS
#
# Jalankan bagian ini untuk membuktikan programnya menjawab benar
# untuk keempatnya — termasuk kasus batas:

print()
print("--- KARTU KASUS ---")
for kasus_nama, kasus_nilai, kasus_hadir in [("Budi", 95, 90), ("Sinta", 75, 80), ("Rio", 60, 70), ("Ani", 40, 90)]:
    if kasus_nilai >= 90:
        kasus_grade = "A"
    elif kasus_nilai >= 75:
        kasus_grade = "B"
    elif kasus_nilai >= 60:
        kasus_grade = "C"
    elif kasus_nilai >= 40:
        kasus_grade = "D"
    else:
        kasus_grade = "E"
    kasus_lulus = kasus_nilai >= 75 and kasus_hadir >= 80
    status = "LULUS" if kasus_lulus else "TIDAK LULUS"
    print(f"{kasus_nama} {kasus_nilai}/{kasus_hadir} -> {kasus_grade}, {status}")

# Perhatikan: kalau urutan cabangnya terbalik (>= 60 di atas),
# Budi 95 dapat C — tanpa error apa pun. Itu ERROR SENYAP.
# Kebiasaan "uji beberapa kasus" inilah radar bug-nya.

# ============================================================
# BAGIAN 3 — Level menengah: Cek Tiket Bioskop (slide 11)
# ============================================================
# Inti keputusannya — nested logika: umur dulu, baru rating.
# Versi interaktif (hapus # untuk mencoba):
# umur = int(input("Umur: "))
# rating = input("Rating film (SU/13+/R): ").lower()
# if umur >= 17:
#     print("Boleh menonton semua film")
# elif rating == "su":
#     print("Boleh menonton film SU")
# elif rating == "13+" and umur >= 13:
#     print("Boleh menonton film 13+")
# else:
#     print("Belum boleh menonton film ini")

# Versi non-interaktif — uji 4 kartu:
print()
print("--- BIOSKOP ---")
for umur_k, rating_k in [(20, "r"), (15, "su"), (15, "13+"), (12, "13+")]:
    if umur_k >= 17:
        hasil = "Boleh semua film"
    elif rating_k == "su":
        hasil = "Boleh film SU"
    elif rating_k == "13+" and umur_k >= 13:
        hasil = "Boleh film 13+"
    else:
        hasil = "Belum boleh"
    print(f"Umur {umur_k}, rating {rating_k} -> {hasil}")
# Umur 20, rating r -> Boleh semua film
# Umur 15, rating su -> Boleh film SU
# Umur 15, rating 13+ -> Boleh film 13+
# Umur 12, rating 13+ -> Belum boleh

# ============================================================
# BAGIAN 4 — Challenge: Chatbot Jurusan BINUS (slide 11)
# ============================================================
# Kuncinya .lower(): "Informatika", "INFORMATIKA", "informatika"
# dicocokkan sama rata. Banyak elif berlapis untuk tiap jurusan.
# Versi interaktif (hapus # untuk mencoba):
# minat = input("Minatmu? ").lower()
# if "informatika" in minat:
#     print("Track software - Sistem Informasi juga dekat!")
# elif "si" in minat:
#     print("Sistem Informasi - data & bisnis!")
# elif "dkv" in minat:
#     print("Desain Komunikasi Visual - kreatif!")
# else:
#     print("Cek semua jurusan kami di binus.ac.id")

minat = "Informatika"   # coba ganti: "SISTEM INFORMASI", "dkv", "musik"
minat = minat.lower()   # "Informatika" -> "informatika"
print()
print("--- CHATBOT JURUSAN ---")
if "informatika" in minat:
    print("Track software - Sistem Informasi juga dekat!")
elif "si" in minat:
    print("Sistem Informasi - data & bisnis!")
elif "dkv" in minat:
    print("Desain Komunikasi Visual - kreatif!")
else:
    print("Cek semua jurusan kami di binus.ac.id")
# "Informatika".lower() = "informatika" -> cocok cabang pertama

# ============================================================
# BAGIAN 5 — rubrik lulus + jebakan (slide 13-14)
# ============================================================
# KRITERIA LULUS PROYEK — dua kotak, wajib dua-duanya:
#   1. Program jalan tanpa error (Run awal sampai akhir, tanpa Traceback)
#   2. Menangani beberapa kasus (minimal 3-4 skenario, termasuk tepat di batas)
#
# JEBAKAN paling sering (jangan di-run — baca & hindari):
# lulus = nilai >= 75 or hadir >= 80   # SALAH: or = salah satu cukup.
#   Uji Rio 60/70: dengan or program bilang LULUS — padahal aturan dua-duanya.
#   Obat: and.
#
# if nilai >= 60:          # SALAH URUTAN: longgar duluan
#     grade = "C"
# elif nilai >= 90:        # tak pernah dicapai — ERROR SENYAP
#     grade = "A"
#   Obat: urutan tinggi -> rendah, else paling bawah.
#
# nilai = input("Nilai: ")  # SALAH: lupa int() → ValueError saat dibanding
#   Obat: nilai = int(input("Nilai: ")), ketik angka murni.

# ============================================================
# Case kumulatif — bekal Sesi 09 (Looping / Perulangan)
# ============================================================
# Programmu minggu ini memutuskan SEKALI lalu selesai.
# Minggu depan: mengulang. Cek 5 siswa tanpa menulis if 5 kali:
# for i in range(5):
#     print("Cek siswa nomor", i + 1)
# (minggu depan if-nya digabung ke dalam loop)

print()
print("--- Bekal sesi 09 ---")
for i in range(5):
    print("Cek siswa nomor", i + 1)
