"""Sesi 07 — Conditional Programming | 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. Baca output di terminal — lalu baca komentar di dalamnya:
     setiap BAGIAN sesuai urutan slide deck Sesi 07

File ini mengikuti alur deck:
  BAGIAN 1 = if tunggal           (slide 04)
  BAGIAN 2 = if / else            (slide 05)
  BAGIAN 3 = elif grading         (slide 06)
  BAGIAN 4 = urutan cabang salah  (slide 07)
  BAGIAN 5 = indentasi = sintaks  (slide 08)
  BAGIAN 6 = tugas 1: grading     (slide 09)
  BAGIAN 7 = nested if            (slide 10)
  BAGIAN 8 = kasir diskon         (slide 11)
  BAGIAN 9 = challenge + pembahasan (slide 12-13)
"""

# ============================================================
# BAGIAN 1 — if tunggal: gerbang pertama (slide 04)
# ============================================================
# Dua aturan sintaks wajib: titik dua + blok menjorok 4 spasi.

hujan = True
print("--- 1. if tunggal ---")
if hujan:
    print("Hari ini hujan: Bawa payung!")
print("Langkah berikutnya jalan terus.")
# Baris terakhir SELALU tercetak — dia tidak menjorok (di luar if).

# ============================================================
# BAGIAN 2 — if / else: dua jalan (slide 05)
# ============================================================
# Perbandingan dari Sesi 06 akhirnya DIPAKAI untuk memilih jalan.

umur = 16
print("--- 2. if - else ---")
if umur >= 17:
    print("Umur", umur, "-> Sudah boleh membuat KTP")
else:
    print("Umur", umur, "-> Belum cukup umur untuk membuat KTP")

angka = 17
if angka % 2 == 0:
    print(angka, "adalah bilangan Genap")
else:
    print(angka, "adalah bilangan Ganjil")

# ============================================================
# BAGIAN 3 — elif: banyak pintu, urutan menentukan (slide 06)
# ============================================================
# Cabang pertama yang True dieksekusi, sisanya TIDAK dilihat lagi.

skor = 85
print("--- 3. Grading nilai ---")
if skor >= 90:
    grade = "A (Sangat Baik)"
elif skor >= 75:
    grade = "B (Baik)"
elif skor >= 60:
    grade = "C (Cukup)"
elif skor >= 40:
    grade = "D (Kurang)"
else:
    grade = "E (Tidak Lulus)"
print("Skor:", skor, "-> Predikat:", grade)    # B (Baik)
# Uji 4 kasus: 95 -> A, 85 -> B, 60 -> C (tepat di batas), 30 -> E

# ============================================================
# BAGIAN 4 — DEMO ERROR SENYAP: urutan terbalik (slide 07)
# ============================================================
# Jalan TANPA error — tapi hasilnya salah. Error paling licik.

print("--- 4. Urutan terbalik (SALAH, sengaja) ---")
skor = 95
if skor >= 60:               # 95 >= 60 itu True → kena duluan!
    grade_salah = "C (Cukup)"
elif skor >= 90:
    grade_salah = "A (Sangat Baik)"   # tak pernah dicapai
print("Skor 95 diurutan-salah ->", grade_salah)   # C (Cukup)!?
# Tidak ada error apa pun. Makanya WAJIB uji beberapa kasus.
# Aturan: tulis syarat dari SEMPIT (tinggi) ke LONGGAR (rendah).

# ============================================================
# BAGIAN 5 — indentasi itu sintaks, bukan gaya (slide 08)
# ============================================================
# 4 spasi, konsisten, jangan campur tab & spasi.
# Baris yang balik ke kiri = "keluar dari keputusan".

print("--- 5. Indentasi ---")
hujan = True
if hujan:
    print("Bawa payung!")       # di dalam if
print("Keluar rumah.")          # di LUAR if — selalu jalan

# JEBAKAN (slide 14) — dua error indentasi yang paling sering:
# if skor >= 90        # SyntaxError: expected ':' — titik dua hilang!
# if hujan:
#   print("A")
#     print("B")       # IndentationError — kedalaman tak konsisten

# ============================================================
# BAGIAN 6 — Tugas 1: grading nilai + status (slide 09)
# ============================================================
# Level 1-2 — versi interaktif (hapus # untuk mencoba):
# skor = int(input("Skor: "))
# if skor >= 90:
#     grade = "A (Sangat Baik)"
# elif skor >= 75:
#     grade = "B (Baik)"
# elif skor >= 60:
#     grade = "C (Cukup)"
# elif skor >= 40:
#     grade = "D (Kurang)"
# else:
#     grade = "E (Tidak Lulus)"
# print("Skor:", skor, "- Predikat:", grade)
# Uji: 95, 85, 60 (tepat di batas), 30

# ============================================================
# BAGIAN 7 — nested if: keputusan dalam keputusan (slide 10)
# ============================================================
nilai_ujian = 82
kehadiran = 85
print("--- 7. Kondisi gabungan vs nested ---")
# Cara 1: satu kondisi gabungan (and)
if nilai_ujian >= 75 and kehadiran >= 80:
    print("Status: Lulus Semester")
else:
    print("Status: Belum Lulus")

# Cara 2: nested if — bisa kasih pesan bertingkat
if nilai_ujian >= 75:
    print("Kamu Lulus!")
    if nilai_ujian >= 90:
        print("Hebat! Kamu mendapatkan Predikat Pujian.")
    else:
        print("Pertahankan prestasimu.")
else:
    print("Silakan ikuti jadwal remedial.")

# ============================================================
# BAGIAN 8 — Tugas 2: kasir diskon bertingkat (slide 11)
# ============================================================
# Gabungan Sesi 05 (input) + 06 (operator) + 07 (keputusan).
# Urutan syarat: TINGGI ke rendah!

print("--- 8. Kasir diskon bertingkat ---")
nama_barang = "Pulpen"     # contoh: input("Nama barang: ")
harga = 3000               # contoh: int(input("Harga satuan: "))
jumlah = 12                # contoh: int(input("Jumlah beli: "))
uang_bayar = 40000         # contoh: int(input("Uang bayar: "))

total_kotor = harga * jumlah    # 36000
if jumlah >= 10:
    persen_diskon = 0.50
    ket_diskon = "Diskon 50% (Promo Grosir)"
elif jumlah >= 5:
    persen_diskon = 0.20
    ket_diskon = "Diskon 20% (Promo Spesial)"
else:
    persen_diskon = 0.0
    ket_diskon = "Tidak ada diskon"

potongan = int(total_kotor * persen_diskon)
total_bayar = total_kotor - potongan
kembalian = uang_bayar - total_bayar

print(f"Barang : {nama_barang}")
print(f"Total kotor : {total_kotor}")          # 36000
print(f"Status promo : {ket_diskon}")          # Diskon 50% (Promo Grosir)
print(f"Potongan : {potongan}")                # 18000
print(f"Total bayar : {total_bayar}")          # 18000
print(f"Kembalian : {kembalian}")              # 22000
# Uji 3 kasus: 12 -> 50%, 7 -> 20%, 3 -> tanpa diskon

# ============================================================
# BAGIAN 9 — Challenge: kabisat ATAU kelulusan (slide 12-13)
# ============================================================
# Misi A — tahun kabisat: habis dibagi 4, KECUALI habis 100,
# KECUALI juga habis 400. Satu kondisi gabungan!

print("--- 9. Challenge ---")
tahun = 2024
kabisat = (tahun % 4 == 0
           and (tahun % 100 != 0 or tahun % 400 == 0))
print(tahun, "kabisat?", kabisat)    # True
# Uji: 2000 -> True, 1900 -> False (habis 100 tapi bukan 400), 2024 -> True

# Misi B — kelulusan dengan pesan berbeda tiap kegagalan:
nilai, hadir = 60, 90
if nilai >= 75 and hadir >= 80:
    print("LULUS, kerja bagus!")
elif nilai < 75 and hadir < 80:
    print("Dua-duanya belum cukup")
elif nilai < 75:
    print("Nilaimu belum cukup")
else:
    print("Kehadiranmu kurang")
# Urutan tetap sempit -> longgar: kasus paling spesifik dulu.

# ============================================================
# Case kumulatif — bekal Sesi 08 (Mini Project 1)
# ============================================================
# Minggu depan tidak ada materi baru — semua bekal digabung jadi
# Sistem Penilaian Siswa: input -> grading -> status lulus.
# Intip program kecilnya (versi mini):

print("--- Bekal sesi 08 ---")
nama = "Budi"
nilai_akhir = 82
hadir_persen = 85
if nilai_akhir >= 75 and hadir_persen >= 80:
    print(f"{nama}: LULUS, kerja bagus!")
else:
    print(f"{nama}: belum lulus - pantang menyerah!")
