Format Dokumen Pengajaran & Panduan Siswa
BINUS University @ Bekasi SMAS St. John Pertemuan 6 dari 17

MODUL 06 — Operators & Expressions

Ekstrakurikuler CSSE: Computer Science & Software Engineering (Python)

Jenjang Peserta Siswa SMA (Kelas 10–12)
Alokasi Waktu 100 Menit
Fokus Materi + - * /, // % **, ==/!=, and/or/not, prioritas operator
Target Selesai Kalkulator mini 2 angka jalan + cek genap/ganjil dengan %
Tools VS Code & Python (Run ▶)
Prioritas sesi: Wajib: 7 operator aritmatika (+ - * / // % **), operator perbandingan (hasilnya True/False), operator logika and/or/not, prioritas operator & tanda kurung, kalkulator mini, dan cek genap/ganjil dengan %.
Materi pengayaan (opsional jika waktu cukup)

Dua kejutan urutan eksekusi: 2 ** 3 ** 2 menghasilkan 512 (pangkat dihitung dari kanan), dan True + True menghasilkan 2 (True bernilai 1) — trik yang dipakai di studi kasus kasir.

1. Tujuan Pembelajaran

  1. Menggunakan 7 operator aritmatika: +, -, *, /, //, %, ** — dan membedakan / (selalu float) vs // (bulat ke bawah).
  2. Menjelaskan % (modulo) sebagai "sisa pembagian" dengan contoh sendiri.
  3. Menggunakan operator perbandingan (== != < > <= >=) dan menjelaskan bahwa hasilnya selalu boolean.
  4. Membedakan = (mengisi variabel) dengan == (membandingkan).
  5. Menggabungkan kondisi dengan and, or, not.
  6. Memprediksi urutan eksekusi ekspresi campuran dan memakai tanda kurung untuk memperjelasnya.
  7. Membangun program kalkulator mini dua angka dan cek genap/ganjil dengan %.

2. Peta Jalan 17 Pertemuan

Hari ini siswa menempuh barisan ke-6 dari 17 — 35% perjalanan:

[ 01-02 ] Fondasi: konsep program, algoritma, flowchart [ 03-05 ] Mulai coding: print, variabel, input/output [ 06-07 ] Operator & percabangan if/elif/else <-- HARI INI (100 Menit) [ 08 ] Mini Project 1: Decision Making [ 09 ] Looping / Perulangan [ 10 ] Nested Loop & Pattern Programming [ 11-13 ] List, Functions, String [ 14 ] Mini Project 2: Simple App [ 15 ] AI-Assisted Coding [ 16-17 ] Final Project: Development & Presentation

3. Rundown Waktu Terperinci (100 Menit)

WaktuBlokAktivitas
10'PembukaCover sesi, baca tujuan bersama, rekap Sesi 05 (input/output — tanya: "input selalu menghasilkan tipe apa?")
15'PemanasanTebak hasil operasi campuran tanpa kalkulator — siswa menebak, baru di-run sebagai pembuktian
25'Materi 1Paparan 7 operator aritmatika (fokus / vs // vs %) + perbandingan → boolean; bedakan = vs ==
15'Materi 2Operator logika and/or/not + prioritas operator, kurung, dan dua "kejutan urutan"
20'PraktikProgram kalkulator mini: input 2 angka + operasi (+, -, *, /), cetak hasil dengan f-string
10'ChallengeCek genap/ganjil & kelipatan dengan %; konversi 25 jam → hari + sisa jam
5'PenutupRangkuman 5 poin, preview Sesi 07 (Conditional Programming), Q&A singkat

4. Pedagogi & Penjelasan Konsep

A. Analogi Mesin Kasir & Sisa Kembalian

Operator = tombol-tombol di mesin kasir. Tambah, kurang, kali semuanya sudah akrab. Yang baru ada tiga: / selalu menghasilkan desimal (kasir yang selalu tulis koma), // membulatkan ke bawah ("25 jam itu berapa hari penuh? 1 hari"), dan % menyisakan sisa-nya ("sisanya 1 jam"). Tiga serangkai ini cara alami menjawab soal pembagian: berapa penuh, berapa sisa. Jam, uang, dan pembagian kelompok sehari-hari semuanya bekerja begini.

B. Perbandingan Itu Pertanyaan, Jawabannya True/False

Setiap operator perbandingan adalah pertanyaan ya/tidak: umur >= 17 artinya "umurnya 17 ke atas nggak?" — dan Python menjawab dengan True atau False, bukan kalimat. Jebakan klasiknya satu: = itu mengisi (kayak menulis nama di label kotak — Sesi 04), == itu membandingkan (kayak mencocokkan dua label "apakah isinya sama?"). Salah ketik di sinilah asal banyak SyntaxError hari ini. Operator logika lalu merangkai pertanyaan-pertanyaan itu: and = "keduanya harus benar" (masuk SMA: lolos PSB and bayar), or = "salah satu saja cukup" (dapet diskon: pelajar or kartu member).

C. Prioritas Operator — Kok Hasilnya Bukan Itu?

Python menghitung dengan urutan yang dia yakini (kali/bagi lebih dulu dari tambah/kurang — sama seperti pelajaran matematika). Masalahnya kita yang sering salah baca. Dua kejutan yang layak dipraktikkan: 2 ** 3 ** 2 menghasilkan 512 (pangkat dievaluasi kanan ke kiri: 3**2 dulu, baru 2**9), dan True or False and False tetap True karena and dihitung dulu. Tidak perlu menghafal tabel — aturan praktisnya satu: ragu? pakai kurung. Kurung itu gratis, membuat kode terbaca manusia, dan menghilangkan debat.

Catatan pengajar: Catatan Pengajar kurikulum resmi menyebut % sering kurang dipahami. Jangan buru-buru lewat: demo "25 jam = 1 hari 1 jam" di depan kelas, lalu minta siswa menebak 37 % 24 sebelum di-run. Modulo "klik" kalau sisa pembagiannya dirasakan, bukan dihafal.

D. Error Itu Alarm, Bukan Aib

Dua alarm hari ini: SyntaxError dari menulis = di dalam kondisi atau lupa operator, dan hasil "aneh" seperti 10 / 3 = 3.3333... yang bukan bug — itu memang perilaku pembagian Python. Biasakan reaksi yang sama seperti Sesi 03: baca pesannya, tunjuk barisnya, perbaiki. Zerodivision (b berisi 0 lalu a / b) pasti muncul saat uji kalkulator — sambut baik-baik, itu bahan diskusi input yang "tidak sopan".

5. Panduan Praktik Langkah demi Langkah

Langkah 1: Tebak Hasil — Tanpa Kalkulator (15 menit)

Tampilkan satu per satu, minta siswa tulis tebakan dulu, baru run:

print(10 / 3)    # 3.3333... (tebakan umum: 3)
print(10 // 3)   # 3
print(10 % 3)    # 1 - sisanya
print(2 ** 3)    # 8
print(2 + 3 * 4) # 14 - bukan 20!

Bedah dua baris terakhir perlahan. Dari sini lahirlah "aturan kurung": (2 + 3) * 4 kalau maksudnya 20.

Langkah 2: Perbandingan & Logika (15 menit)

a = 10
b = 3
print(a == 10)  # True  - "apakah isinya sama?"
print(a != b)   # True
print(b >= 5)   # False
print(a > b and b < 5)   # True  - dua-duanya benar
print(a == 10 or b > 10) # True  - salah satu cukup
print(not (a > b))       # False - kebalikan

Tanyakan: kenapa a = 10 tidak dicetak True? Karena itu bukan pertanyaan — itu pengisian. Bedakan dengan suara: "= isi!" vs "== sama nggak?"

Langkah 3: Praktik — Kalkulator Mini (20 menit)

Siswa bangun program input dua angka lalu cetak hasil keempat operasi dasar:

a = float(input("Angka pertama: "))
b = float(input("Angka kedua: "))
print(f"{a} + {b} = {a + b}")
print(f"{a} - {b} = {a - b}")
print(f"{a} * {b} = {a * b}")
print(f"{a} / {b} = {a / b}")

Uji dengan 10 dan 3. Lalu uji lagi dengan b = 0 — biarkan siswa bertemu ZeroDivisionError dan baca pesannya sendiri. Yang cepat selesai: tambah baris // dan % ke kalkulator.

Langkah 4: Challenge — Genap/Ganjil & Sisa Jam (10 menit)

Dua tugas dengan satu konsep sama (%):

angka = int(input("Tulis angka: "))
print("Genap?", angka % 2 == 0)

total_jam = int(input("Total jam: "))
hari = total_jam // 24
sisa = total_jam % 24
print(f"{total_jam} jam = {hari} hari {sisa} jam")

Uji dengan 12 (genap, True), 17 (ganjil, False), 25 jam dan 37 jam.

Langkah 5: Pembahasan & Penutup (5 menit)

Sorot solusi kalkulator 1-2 siswa. Rangkuman 5 poin: / selalu float, // bulat ke bawah, % sisa, perbandingan menghasilkan boolean, ragu = kurung. Preview Sesi 07: boolean hari ini jadi "kunci" percabangan.

6. Master Solution Code (kode.py — Sesi 06)

Kode di bawah menjalankan seluruh alur sesi: demo operator, praktik mandiri, dan studi kasus kumulatif kasir mini. Solusi utuh mandiri — Run langsung, output sesuai komentar:

# Sesi 06 - Operators & Expressions
# Demo operator + studi kasus kasir mini (input & output dari Sesi 05 dipakai lagi)

# --- Bagian 1: operator aritmatika ---
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)

# --- Bagian 2: perbandingan, hasilnya True / False ---
print("--- 2. Perbandingan ---")
print(a == 10)  # True
print(a != b)   # True
print(a > b)    # True
print(b >= 5)   # False

# --- Bagian 3: logika and / or / not ---
print("--- 3. Logika ---")
print(a > b and b < 5)    # True  (keduanya benar)
print(a == 10 or b > 10)  # True  (salah satu cukup)
print(not (a > b))        # False (kebalikan)

# --- Bagian 4: prioritas operasi ---
print("--- 4. Prioritas Operasi ---")
print(2 + 3 * 4)     # 14  (kali dulu, baru tambah)
print((2 + 3) * 4)   # 20  (kurung menang)

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

total = harga * jumlah                        # 35000

dapat_diskon = jumlah > 5                     # True (beli lebih dari 5)
potongan = int(total * 0.5 * dapat_diskon)    # True dihitung sebagai 1 -> diskon 50%
total_bayar = total - potongan
kembalian = uang_bayar - total_bayar

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

# Output bagian 5 kalau diisi seperti contoh:
# Barang       : Buku Tulis
# Total belanja: 35000
# Dapat diskon 50% (beli > 5): True
# Potongan     : 17500
# Total bayar  : 17500
# Kembalian    : 32500

Tiga hal yang layak disorot saat membahas: (1) dapat_diskon adalah perbandingan yang disimpan ke variabel — hasilnya boolean, dan boolean bisa ikut berhitung karena True bernilai 1, False bernilai 0; (2) int(...) di potongan membulatkan hasil perkalian float; (3) baris "Dapat diskon" membuktikan perbandingan dari Bagian 2 sudah dipakai di program nyata.

7. Troubleshooting Guide (Pegangan Guru)

Masalah Penyebab Tindakan Perbaikan
SyntaxError di baris kondisi Menulis = (isi) padahal maksudnya == (banding), atau operator tertinggal (5 3). Latih mantra: "= isi, == tanya". Baca ulang barisnya keras-keras sebagai kalimat pertanyaan.
ZeroDivisionError di kalkulator Angka kedua diisi 0, lalu dibagi. Ini perilaku matematika, bukan bug. Jalankan ulang dengan angka lain; catat sebagai "input tidak sopan" — pembahasan validasi menyusul.
Hasil 3.3333333333333335, siswa curiga salah / selalu menghasilkan float dan float punya presisi terbatas. Normalisasi: Python bekerja, bukan rusak. Pakai round(a / b, 2) bila ingin tampilan rapi, atau // bila mau hasil bulat.
37 % 24 ditebak 1 (salah), siswa bingung Modulo dipahami sebagai "digit terakhir" atau pembagian biasa. Kembali ke jam: 37 jam = 1 hari penuh + 13 jam sisa. Minta siswa hitung 37 // 24 dulu, sisanya itu hasil %.
TypeError saat menjumlah input Input dari Sesi 05 belum dikonversi: "10" + 3. Rekap sesi lalu: bungkus int()/float(). Cek type() kalau perlu membuktikannya.
Kebingungan True or False and False "kok bukan False?" and dievaluasi lebih dulu daripada or. Bedah: hitung False and False → False, lalu True or False → True. Tetapkan kebiasaan: kondisi campuran selalu pakai kurung.

8. Checklist Evaluasi Siswa

9. Jembatan ke Pertemuan Berikutnya (Sesi 07)

Hari ini kalian menghasilkan True dan False — tapi program belum menggunakan jawaban itu untuk memilih jalan. Minggu depan, nilai boolean itu akhirnya dipakai: kalau True jalur A, kalau False jalur B. Kalkulator jadi lebih pintar, dan program pertama yang "mengambil keputusan" lahir minggu depan.

angka = int(input("Tulis angka: "))
if angka % 2 == 0:
    print("Genap")
else:
    print("Ganjil")

Potongan itu belum dijelaskan — biarkan siswa penasaran. if/else inilah mesin keputusan untuk Sesi 07, dan bekal utama Mini Project 1 di Sesi 08.