"""Sesi 06 — Operators & Expressions | 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 06

File ini mengikuti alur deck:
  BAGIAN 1 = 7 operator aritmatika   (slide 04)
  BAGIAN 2 = / vs // vs %            (slide 05)
  BAGIAN 3 = perbandingan → boolean  (slide 06)
  BAGIAN 4 = and / or / not          (slide 07)
  BAGIAN 5 = prioritas + 2 kejutan   (slide 08)
  BAGIAN 6 = tugas 1: kalkulator     (slide 09)
  BAGIAN 7 = kasir mini              (slide 10)
  BAGIAN 8 = challenge: % digabung   (slide 12-13)
"""

# ============================================================
# BAGIAN 1 — 7 operator aritmatika (slide 04)
# ============================================================
# Tiga sudah akrab (+ - *), empat senjata baru.

a = 10
b = 3
print("--- 1. Aritmatika ---")
print(a + b)    # 13
print(a - b)    # 7
print(a * b)    # 30
print(a / b)    # 3.3333333333333335 — pembagian biasa, SELALU float
print(a // b)   # 3   — floor division: bulat ke bawah
print(a % b)    # 1   — modulo: sisa hasil bagi
print(a ** b)   # 1000 — pangkat: 10 pangkat 3

# ============================================================
# BAGIAN 2 — tiga serangkai pembagian: / vs // vs % (slide 05)
# ============================================================
# Soal nyata: 37 jam itu berapa hari? Berapa sisanya?

print("--- 2. Tiga serangkai ---")
print(37 / 24)    # 1.5416666666666667 — jawaban desimal lengkap
print(37 // 24)   # 1 — berapa HARI penuh
print(37 % 24)    # 13 — berapa JAM sisa

# Catatan kurikulum: % sering kurang dipahami.
# Trik paling berguna: x % 2 hasilnya 0 = genap, 1 = ganjil.
print(12 % 2)     # 0 → 12 genap
print(17 % 2)     # 1 → 17 ganjil

# ============================================================
# BAGIAN 3 — perbandingan: hasilnya selalu True / False (slide 06)
# ============================================================
# Setiap perbandingan = pertanyaan ya/tidak.

print("--- 3. Perbandingan ---")
print(a == 10)    # True  — "apakah isinya sama?"
print(a != b)     # True  — "apakah beda?"
print(a > b)      # True
print(b >= 5)     # False

# JEBAKAN (slide 14) — = vs == :
# a = 10    # mengisi kotak (assignment)
# a == 10   # bertanya: sama nggak? (perbandingan → True)
# Mantra: "= isi, == tanya". Salah ketik di sini asal banyak SyntaxError.

# ============================================================
# BAGIAN 4 — operator logika: and / or / not (slide 07)
# ============================================================
# and = KEDUANYA harus benar · or = SALAH SATU cukup · not = kebalikan.

nilai = 82
hadir = 85
print("--- 4. Logika ---")
print(nilai >= 75 and hadir >= 80)    # True — dua-duanya benar
print(nilai >= 90 or hadir >= 80)     # True — salah satu cukup
print(not (nilai >= 90))              # False — kebalikan

# ============================================================
# BAGIAN 5 — prioritas operator + dua kejutan urutan (slide 08)
# ============================================================
print("--- 5. Prioritas ---")
print(2 + 3 * 4)          # 14 — kali lebih dulu dari tambah!
print((2 + 3) * 4)        # 20 — kurung menang. Ragu? Pakai kurung.
print(2 ** 3 ** 2)        # 512 — pangkat dievaluasi KANAN ke kiri (3**2=9 dulu)
print(True or False and False)   # True — and dihitung dulu dari or
print(True + True)        # 2 — True dihitung 1, False dihitung 0!

# ============================================================
# BAGIAN 6 — Tugas 1: kalkulator mini (slide 09)
# ============================================================
# Level 1-2 — input 2 angka, cetak hasil 4 operasi dasar.
# (Versi interaktif — hapus tanda # untuk mencoba:)
# angka1 = float(input("Angka pertama: "))
# angka2 = float(input("Angka kedua: "))
# print(f"{angka1} + {angka2} = {angka1 + angka2}")
# print(f"{angka1} - {angka2} = {angka1 - angka2}")
# print(f"{angka1} * {angka2} = {angka1 * angka2}")
# print(f"{angka1} / {angka2} = {angka1 / angka2}")

# Level 3 — uji dengan angka kedua 0:
# print(10 / 0)   # ZeroDivisionError! Ini perilaku matematika, bukan bug.
# Baca pesannya: "division by zero" — bagi nol memang tidak boleh.

# ============================================================
# BAGIAN 7 — studi kasus kasir mini (slide 10)
# ============================================================
# Diskon otomatis: beli lebih dari 5 = diskon 50%.
# Kuncinya: boolean ikut berhitung — True = 1, False = 0.

print("--- 7. Kasir mini ---")
nama_barang = "Buku Tulis"    # contoh: input("Nama barang: ")
harga = 5000                  # contoh: int(input("Harga satuan: "))
jumlah = 7                    # contoh: int(input("Jumlah beli: "))
uang_bayar = 50000            # contoh: int(input("Uang bayar: "))

total = harga * jumlah                       # 35000
dapat_diskon = jumlah > 5                    # True — ini PERBANDINGAN
potongan = int(total * 0.5 * dapat_diskon)   # True=1 → diskon 50% penuh
total_bayar = total - potongan
kembalian = uang_bayar - total_bayar

print(f"Barang : {nama_barang}")
print(f"Total belanja: {total}")             # 35000
print(f"Dapat diskon 50% (beli > 5): {dapat_diskon}")   # True
print(f"Potongan : {potongan}")              # 17500
print(f"Total bayar : {total_bayar}")        # 17500
print(f"Kembalian : {kembalian}")            # 32500

# Coba ganti jumlah = 3 → dapat_diskon False (0) → potongan 0.

# ============================================================
# BAGIAN 8 — Challenge: genap/ganjil + kelipatan + konversi jam (slide 12-13)
# ============================================================
# Satu konsep % — tiga masalah. (Versi interaktif — hapus tanda #:)
# angka = int(input("Tulis angka: "))
# print("Genap?", angka % 2 == 0)
# print("Kelipatan 3?", angka % 3 == 0)
# total_jam = int(input("Total jam: "))
# hari = total_jam // 24
# sisa = total_jam % 24
# print(f"{total_jam} jam = {hari} hari {sisa} jam")

# Versi non-interaktif — langsung jalan:
angka = 12
print("--- 8. Challenge ---")
print("Genap?", angka % 2 == 0)          # True
print("Kelipatan 3?", angka % 3 == 0)    # True

total_jam = 37
hari = total_jam // 24                    # 1
sisa = total_jam % 24                     # 13
print(f"{total_jam} jam = {hari} hari {sisa} jam")
# Uji diri: 25 jam → 1 hari 1 jam · 48 jam → 2 hari 0 jam

# ============================================================
# Case kumulatif — bekal Sesi 07 (Conditional Programming)
# ============================================================
# Minggu depan, hasil True/False ini akhirnya DIPAKAI untuk memilih jalan.
# Intip — potongan ini belum dijelaskan, biarkan penasaran:

angka_cek = 17
print("--- Bekal sesi 07 ---")
print("Genap?", angka_cek % 2 == 0)   # False
# Minggu depan: if angka % 2 == 0: print("Genap") else: print("Ganjil")
