Ekstrakurikuler CSSE: Computer Science & Software Engineering (Python)
+ - * / // % **), operator perbandingan (hasilnya True/False), operator logika and/or/not, prioritas operator & tanda kurung, kalkulator mini, dan cek genap/ganjil dengan %.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.
+, -, *, /, //, %, ** — dan membedakan / (selalu float) vs // (bulat ke bawah).% (modulo) sebagai "sisa pembagian" dengan contoh sendiri.== != < > <= >=) dan menjelaskan bahwa hasilnya selalu boolean.= (mengisi variabel) dengan == (membandingkan).and, or, not.%.Hari ini siswa menempuh barisan ke-6 dari 17 — 35% perjalanan:
| Waktu | Blok | Aktivitas |
|---|---|---|
| 10' | Pembuka | Cover sesi, baca tujuan bersama, rekap Sesi 05 (input/output — tanya: "input selalu menghasilkan tipe apa?") |
| 15' | Pemanasan | Tebak hasil operasi campuran tanpa kalkulator — siswa menebak, baru di-run sebagai pembuktian |
| 25' | Materi 1 | Paparan 7 operator aritmatika (fokus / vs // vs %) + perbandingan → boolean; bedakan = vs == |
| 15' | Materi 2 | Operator logika and/or/not + prioritas operator, kurung, dan dua "kejutan urutan" |
| 20' | Praktik | Program kalkulator mini: input 2 angka + operasi (+, -, *, /), cetak hasil dengan f-string |
| 10' | Challenge | Cek genap/ganjil & kelipatan dengan %; konversi 25 jam → hari + sisa jam |
| 5' | Penutup | Rangkuman 5 poin, preview Sesi 07 (Conditional Programming), Q&A singkat |
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.
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).
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.
% 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.
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".
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.
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?"
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.
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.
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.
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.
| 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. |
10 / 3, 10 // 3, dan 10 % 3 tanpa run — dan menjelaskan bedanya.% untuk cek genap/ganjil dan menjelaskan kenapa trik itu bekerja.= dan == dengan benar saat menulis dan saat membaca kode.True/False, bukan angka atau kalimat.and/or dan memilih mana yang tepat untuk kasusnya.ZeroDivisionError.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.