"""Sesi 05 — Input & Output | 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. Jawab pertanyaan yang muncul di terminal — lalu baca komentar di dalamnya:
     setiap BAGIAN sesuai urutan slide deck Sesi 05

File ini mengikuti alur deck:
  BAGIAN 1 = print() + sep / end   (slide 10)
  BAGIAN 2 = input() selalu string (slide 04-05)
  BAGIAN 3 = konversi int / float  (slide 07)
  BAGIAN 4 = f-string              (slide 08)
  BAGIAN 5 = tugas 1: sapaan       (slide 09)
  BAGIAN 6 = tugas 2: luas persegi (slide 11)
  BAGIAN 7 = challenge: identitas  (slide 12-13)
"""

# ============================================================
# BAGIAN 1 — print() itu punya tombol atur: sep & end (slide 10)
# ============================================================
# sep = pemisah antar nilai (default: satu spasi)
# end = penutup tiap cetakan (default: pindah baris)

print("CSSE", "Input", "Output", sep=" | ")   # CSSE | Input | Output
print("Belajar", end=" -> ")                  # tidak pindah baris!
print("berhasil")                             # -> Belajar -> berhasil

# Coba prediksi dulu, baru run: print(1, 2, 3, sep="...")

# ============================================================
# BAGIAN 2 — input(): program pertama kali mendengarkan (slide 04-05)
# ============================================================
# input() berhenti sejenak, menampilkan pertanyaan, menunggu ketikanmu.
# ATURAN EMAS: apa pun yang diketik, hasilnya SELALU string.

nama = input("Siapa namamu? ")
print("Halo,", nama)

umur_teks = input("Umur: ")          # kamu ketik 16
print(umur_teks + umur_teks)         # "1616" — bukan 32! teks + teks = sambung
print(type(umur_teks))               # <class 'str'> — buktinya di sini

# JEBAKAN (slide 06) — jangan di-run dulu, baca dulu:
# print(umur_teks + 1)   # TypeError! teks + angka tidak bisa di +
# Solusinya: konversi dulu — BAGIAN 3.

# ============================================================
# BAGIAN 3 — konversi: mau dihitung? bungkus dulu (slide 07)
# ============================================================
# int()  = bilangan bulat (umur, jumlah, skor)
# float()= boleh desimal (tinggi 1.65, berat 47.5, luas)

umur = int(input("Umur: "))              # baca dari dalam ke luar
print("Tahun depan:", umur + 1)          # 17 (kalau tadi isi 16)
print(type(umur))                        # <class 'int'> — sudah angka

tinggi = float(input("Tinggi dalam meter: "))   # contoh: 1.65
print("Tinggimu", tinggi, "meter")

# JEBAKAN (slide 14) — ValueError:
# int(input("Umur: "))  # kalau user ketik "delapan" → ValueError:
# invalid literal for int() with base 10: 'delapan'
# Itu alarm "isi formulirnya salah", bukan program rusak.
# Ketik angka murni. (Cara nangkep error dengan try-except dibahas nanti.)

# ============================================================
# BAGIAN 4 — f-string: kalimat rapi tanpa drama (slide 08)
# ============================================================
# Huruf f di depan petik + {variabel} di dalam kalimat.
# Di dalam {} boleh ekspresi: {umur + 1} dihitung dulu, hasilnya dicetak.

print(f"Halo, {nama}! Umurmu {umur} tahun.")
print(f"Tahun depan kamu berumur {umur + 1} tahun.")

# Bandingkan dengan versi koma — ada spasi nyempil sebelum "!" :
# print("Halo,", nama, "!")   # Halo, Budi !

# ============================================================
# BAGIAN 5 — Tugas 1: program sapaan pertama (slide 09)
# ============================================================
# Level 1 — sapaan dasar + tanya umur (sudah contoh di atas).
# Level 2 — buktikan bedanya sebelum & sesudah konversi:

print(type("16"))   # <class 'str'>
print(type(16))     # <class 'int'>

# Level 3 — coba sendiri: tanya hobi, selipkan ke kalimat f-string.

# ============================================================
# BAGIAN 6 — Tugas 2: luas persegi panjang (slide 11)
# ============================================================
# Studi kasus kumulatif: input + konversi + operator + f-string.

panjang = float(input("Panjang (m): "))   # contoh: 2.5
lebar = float(input("Lebar (m): "))       # contoh: 4
luas = panjang * lebar                    # simpan dulu, jangan dijitip
print(f"Luas {panjang} x {lebar} = {luas} meter persegi")
# Output: Luas 2.5 x 4.0 = 10.0 meter persegi
# Kenapa 4.0 dan 10.0? Karena float selalu tampil dengan .0 — wajar!

# ============================================================
# BAGIAN 7 — Challenge: identitas lengkap (slide 12-13)
# ============================================================
# Program membaca 3 data lalu menyusunnya jadi satu kalimat utuh.

print("=== KARTU PERKENALAN ===")
nama_kamu = input("Nama: ")
umur_kamu = int(input("Umur: "))
kota_kamu = input("Kota: ")
print(f"Halo, namaku {nama_kamu}, umur {umur_kamu} tahun, dari {kota_kamu}.")
print(f"Senang bertemu! Satu tahun lagi aku {umur_kamu + 1}.")

# Output kalau diisi Budi / 16 / Bekasi:
# === KARTU PERKENALAN ===
# Nama: Budi
# Umur: 16
# Kota: Bekasi
# Halo, namaku Budi, umur 16 tahun, dari Bekasi.
# Senang bertemu! Satu tahun lagi aku 17.

# ============================================================
# Case kumulatif — bekal Sesi 06 (Operators & Expressions)
# ============================================================
# Minggu depan operator lengkap: a / b vs a // b vs a % b.
# Intip hasilnya sekarang:

a = 10
b = 3
print(a / b)   # 3.3333... (pembagian biasa, selalu float)
print(a % b)   # 1 (sisa pembagian — ini bahan besar Sesi 06)
print(a > b)   # True — hasil perbandingan: bahan Sesi 06 juga
