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

MODUL 04 — Variables & Data Types

Ekstrakurikuler CSSE: Computer Science & Software Engineering (Python)

Jenjang Peserta Siswa SMA (Kelas 10–12)
Alokasi Waktu 100 Menit
Fokus Materi variable, int, float, str, bool, type(), konversi tipe
Target Selesai Kartu siswa jadi dari 4 variabel beda tipe, ditampilkan dengan print dan dicek type()-nya
Tools VS Code & Python (Run ▶)
Prioritas sesi: Wajib: variabel & assignment =, empat tipe data (int, float, str, bool), mengecek tipe dengan type(), konversi int()/float()/str(), dan konvensi penamaan snake_case. Praktik penilaian: siswa membuat 4 variabel beda tipe & menampilkannya dengan print ("kartu siswa").
Materi pengayaan (opsional jika waktu cukup)

Pengayaan: memperkaya kartu_siswa.py dengan variabel tambahan (kelas, cita_cita sebagai str) dan mengecek type() semuanya — persis PR iseng opsional di deck.

1. Tujuan Pembelajaran

  1. Menjelaskan variabel sebagai "kotak berlabel" penyimpan nilai dengan kalimat sendiri.
  2. Menggunakan assignment = untuk menyimpan nilai, dan membedakannya dari sama dengan di matematika.
  3. Membedakan 4 tipe data utama: int, float, str, bool.
  4. Mengecek tipe data apa pun dengan type() dan membaca hasilnya.
  5. Melakukan konversi tipe dasar dengan int(), float(), dan str().
  6. Menamai variabel sesuai konvensi snake_case: tanpa spasi, huruf kecil, deskriptif.
  7. Membuat 4 variabel beda tipe dan menampilkannya dengan print (kartu siswa).
  8. Mengenali jebakan "16" (teks) vs 16 (angka) dan menjelaskan kenapa Python membedakannya.

2. Peta Jalan 17 Pertemuan

Hari ini siswa menempuh barisan ke-4 dari 17 — 24% perjalanan:

[ 01-02 ] Fondasi: konsep program, algoritma, flowchart [ 03-05 ] Mulai coding: print, variabel, input/output <-- HARI INI (100 Menit) [ 06-07 ] Operator & percabangan if/elif/else [ 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
15'PembukaCover, tujuan sesi; recap Sesi 03 (file .py, print, baca error); analogi pembuka: kotak berlabel untuk menyimpan benda
25'Materi 1Variabel & assignment = (vs sama dengan matematika); 4 tipe data + type(); jebakan "16" vs 16
30'Praktik 1Praktik mandiri: deklarasi variabel, cek tipe dengan type(), konversi int()/float()/str(); guru keliling
20'Praktik 2Praktik penilaian: buat "kartu siswa" dari beberapa variabel (nama, umur, tinggi, aktif) + tampilkan dengan print; naming snake_case
10'PenutupRangkuman 4 target (dicek di akhir sesi), preview Sesi 05 (input & output), PR iseng opsional

4. Pedagogi & Penjelasan Konsep

A. Variabel = Kotak Berlabel, Bukan Lomba Nama Cantik

Minggu lalu semua nilai langsung ketok paku di dalam print(). Hari ini nilai disimpan dulu: variabel = kotak berlabel. Minta siswa membayangkan lemari sekolah: tiap kotak ada labelnya, isinya bisa barang apa pun, dan lebel yang jelas membuat siapa pun tahu apa isinya tanpa harus membukanya. nama = "Budi" artinya: ambil kotak, tempel label nama, taruh isinya "Budi".

Dan momen penting dari kurikulum (Catatan Pengajar): bedakan = assignment dari sama dengan matematika. Di matematika, x = x + 1 itu persamaan yang nggak masuk akal. Di Python, itu perintah dua langkah yang sangat masuk akal: ambil isi kotak x, tambah 1, taruh balik di kotak yang sama. = bukan "sama dengan", tapi "taruh isinya". Analogi kalkulator kasir: subtotal lama dipakai menghitung subtotal baru, lalu papan kasir ditimpa angka barunya.

B. Empat Tipe Data — Empat Jenang Barang di Gudang

Tiap kotak di gudang menyimpan jenis barang yang berbeda, dan Python mengenali sendiri dari bentuk isinya: int = angka bulat (umur 16, skor 90, jajan 10000), float = angka dengan titik (tinggi 1.65, nilai rata-rata 87.5), str = teks yang selalu berkutip ("Budi", "CSSE", "XII-A"), bool = hanya dua nilai dunia: True/False (absen hadir, status aktif). Cara paling cepat mengenali str: kalau ada kutip, itu teks — angka pun jadi teks kalau berkutip.

Kenapa harus peduli tipe? Karena Perlakuan beda: angka bisa dijumlah, teks bisa dirangkai — dan mencampurnya tanpa konversi adalah sumber error nomor satu minggu-minggu ke depan. Fungsi type() itu kayak scanner di pintu gudang: arahkan ke kotak mana pun, dia lapor isinya jenis apa.

C. Konversi Tipe — Penerjemah Antar Jenis

int(), float(), str() itu penerjemah: int("17") menerjemahkan teks "17" jadi angka 17 yang bisa dihitung. Konversi yang paling sering dipakai (dan paling sering dilupakan): mengubah teks hasil input() jadi angka — bahasan penuh di Sesi 05. Jebakan yang diumumkan kurikulum: konversi string yang salah memunculkan error — int("budi") atau int("") memunculkan ValueError, karena teks itu tidak bisa jadi angka apa pun. Penerjemah bukan tukang sulap.

Dan jebakan paling sering dari slide: "16" itu str, bukan int. 16 tanpa kutip baru int. Python membedakannya dari kutipnya — yang ada kutip = teks, yang polos = angka.

D. snake_case — Aturan Nama di Lingkungan Kerja Bareng

Aturan penamaan yang ditanamkan hari ini: snake_case — huruf kecil semua, pemisah pakai garis bawah (nilai_rata_rata, nama_lengkap), tanpa spasi, dan deskriptif. Analogi: label kotak di gudang rumah. Label x atau data1 itu seperti kotak tanpa label — enam bulan lagi kamu sendiri nggak tahu isinya apa. Label nilai_rata_rata = kotak berlabel bening, langsung tahu.

Kenapa deskriptif itu wajib, bukan gaya-gayaan: mulai Sesi 08 (Mini Project) kode mereka akan dibaca orang lain saat demo, dan di dunia kerja kode dibaca rekan satu tim — nama yang jelas itu sopan santun kepada pembaca berikutnya.

Catatan pengajar: dari kurikulum resmi — bedakan = (assignment) vs makna matematis, dan pastikan konversi string yang salah memunculkan error dipraktikkan langsung (lebih baik siswa lihat ValueError hari ini di hadapan guru daripada kaget sendirian di Sesi 05). Error tetap alarm: pesannya justru menunjukkan tipe mana yang gagal diterjemahkan.

5. Panduan Praktik Langkah demi Langkah

Langkah 1: Pembukaan dan Recap Sesi 03 (10 menit)

Tanya balik cepat: (1) "ekstensi file Python apa?" (2) "apa yang terjadi kalau lupa Ctrl+S sebelum Run?" (3) "pesan error itu musuh atau alarm?" Lalu framing dari deck: "Sesi 03 kalian sudah jalan di jalan — hari ini kalian belajar menyimpan barang-barang yang dibawa perjalanan: di kotak berlabel." Demo 30 detik di proyektor: satu nilai "Budi" ditulis langsung vs disimpan dulu di nama lalu dipakai dua kali — tunjukkan keuntungannya: ubah sekali, efeknya ke mana-mana.

Langkah 2: Variabel dan Assignment (15 menit)

Tulis bersama, bedah baris demi baris:

nama = "Budi"
umur = 16
umur = umur + 1        # ambil isinya, tambah 1, taruh balik

print(nama)            # Budi
print(umur)            # 17 -- bukan "persamaan", tapi penyimpanan ulang!

Bahas baris umur = umur + 1 pelan-pelan: komputer menghitung kanan dulu (16 + 1 = 17), baru menimpa kotak kiri. Ini titik di mana siswa membedakan = Python dari = matematika — gunakan contoh kasir yang menimpa subtotal di papan tampilannya. Eksperimen cepat: tanya "kalau baris umur = umur + 1 dihapus, berapa yang tercetak?" (jawab: 16 — kotak tidak pernah ditimpa).

Langkah 3: 4 Tipe Data dan type() (10 menit)

Empat tipe diperkenalkan lewat data siswa nyata (umur = int, tinggi = float, nama = str, aktif = bool), lalu scanner-nya:

nama = "Budi"
umur = 16
tinggi = 1.65
aktif = True

print(type(nama))    # <class 'str'>
print(type(umur))    # <class 'int'>
print(type(tinggi))  # <class 'float'>
print(type(aktif))   # <class 'bool'>

Lalu jebakan paling sering (dari deck), diuji LIVE: tebak dulu, baru Run:

a = 16
b = "16"
print(type(a))    # <class 'int'>  -- angka polos
print(type(b))    # <class 'str'>  -- berkutip = TEKS!

Uji cepat kelas: "True tanpa kutip tipe apa? 'True' dengan kutip tipe apa?" (bool vs str — kutip mengubah segalanya).

Langkah 4: Konversi Tipe (10 menit)

Penerjemah dipraktikkan langsung, termasuk error-nya yang disengaja (dari Catatan Pengajar):

umur_teks = "17"
umur_angka = int(umur_teks)
umur_berikutnya = umur_angka + 1
print(umur_berikutnya)          # 18 -- "17" tidak bisa dijumlah, 17 bisa

print(float("1.65") + 0.1)      # 1.75
print(str(100) + " poin")       # 100 poin -- angka jadi teks untuk dirangkai

# Dan error yang disengaja (jangan takut, baca pesannya):
# int("budi")  -> ValueError: invalid literal for int() with base 10: 'budi'
# Pesannya jelas: 'budi' tidak bisa diterjemahkan jadi angka.

Poin yang wajib keluar dari mulut siswa: "17" + 1 gagal karena campuran tipe; int("17") + 1 jalan karena sudah disamakan tipenya. Penerjemah dipanggil SEBELUM operasi.

Langkah 5: Praktik Penilaian — Kartu Siswa (20 menit)

Praktik penilaian dari kurikulum: siswa membuat kartu_siswa.py — 4 variabel beda tipe, dicek type()-nya, lalu ditampilkan rapi dengan print. Nama variabel wajib snake_case dan deskriptif (dilarang a, x, data1):

# Kartu Siswa - [nama siswa] - CSSE St. John

nama = "Maria"
umur = 16
tinggi = 168.5
aktif = True

print("=== KARTU SISWA ===")
print("Nama  :", nama)
print("Umur  :", umur)
print("Tinggi:", tinggi, "cm")
print("Status:", aktif)

print(type(nama))    # <class 'str'>
print(type(umur))    # <class 'int'>
print(type(tinggi))  # <class 'float'>
print(type(aktif))   # <class 'bool'>

# Output harapan:
# === KARTU SISWA ===
# Nama  : Maria
# Umur  : 16
# Tinggi: 168.5 cm
# Status: True
# <class 'str'>
# <class 'int'>
# <class 'float'>
# <class 'bool'>

Guru keliling mengecek tiga hal saat penilaian: (1) 4 variabel benar-benar beda tipe; (2) nama variabel snake_case + deskriptif; (3) output tercetak rapi. Yang cepat selesai: pengayaan — tambah kelas = "CSSE" dan cita_cita (str), cek type() semuanya, lalu bantu teman sebangku.

Langkah 6: Rangkuman dan Preview Sesi 05 (10 menit)

Cek 4 target hari ini bersama-sama (dari deck): variabel = kotak berlabel? 4 tipe dikenali? type() dan konversi bisa dipakai? snake_case terbiasa? Tutup dengan teaser: "hari ini datanya kalian tulis langsung di kode. Minggu depan data itu MINTA DIISI — program kalian akan bertanya ke pengguna dan menunggu jawabannya: input()." Umumkan PR iseng opsional (perkaya kartu_siswa.py + foto output ke grup; yang tanpa laptop: tulis 4 variabel beda tipe + prediksi type()-nya di kertas).

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

Bentuk utuh sesuai kode.py — empat tipe, pengecekan type(), konversi dari teks, dan kartu profil sebagai case kumulatif:

"""Sesi 04 - Master Solution: variabel, tipe data, dan kartu siswa.
"""

# 1. Empat tipe data utama
nama = "Budi"        # str  - teks, selalu berkutip
umur = 16            # int  - angka bulat
tinggi = 1.65        # float - angka dengan titik desimal
aktif = True         # bool - hanya True atau False

# 2. Konversi tipe: teks "17" diterjemahkan jadi angka dulu,
#    baru bisa dihitung.
umur_teks = "17"
umur_berikutnya = int(umur_teks) + 1

# 3. Scanner tipe: type() melaporkan jenis isi tiap kotak
print(nama, type(nama))
print(umur, type(umur))
print(tinggi, type(tinggi))
print(aktif, type(aktif))
print(umur_berikutnya, type(umur_berikutnya))

# 4. Case kumulatif: kartu profil siswa
kelas = "CSSE"
print(f"{nama} | {kelas} | {umur} tahun | aktif={aktif}")

# Output harapan:
# Budi <class 'str'>
# 16 <class 'int'>
# 1.65 <class 'float'>
# True <class 'bool'>
# 18 <class 'int'>
# Budi | CSSE | 16 tahun | aktif=True

Dua poin bedah: umur_berikutnya = int(umur_teks) + 1 menunjukkan urutan yang benar — terjemahkan dulu, hitung kemudian; dan baris terakhir memakai f-string (f"...{nama}...") — teknik merangkai teks yang dibedah penuh di Sesi 05, hari ini cukup dipakai sebagai pembuka.

7. Troubleshooting Guide (Pegangan Guru)

Masalah Penyebab Tindakan Perbaikan
SyntaxError: invalid syntax saat penamaan Nama variabel pakai spasi atau awali angka (nama lengkap, 2gaji) — aturan Python melarangnya. Terapkan snake_case: nama_lengkap; angka boleh, tapi bukan di awal (gaji2 boleh). Ingatkan label kotak: satu kata utuh.
TypeError: can only concatenate str ... Mencampur tipe tanpa konversi: "Umur: " + umur — str dijumlahkan int. Dua obat: konversi dulu "Umur: " + str(umur), atau pisahkan dengan koma di print("Umur:", umur). Urutannya: samakan tipe SEBELUM operasi.
ValueError: invalid literal for int() Konversi teks yang bukan angka: int("budi") atau int(""). Normalisasi (dari Catatan Pengajar): ini error yang DISengaja dipraktikkan hari ini. Baca pesannya: teks yang gagal diterjemahkan ditampilkan di pesan. Penerjemah bukan sulap — isi harus bentuk angka.
NameError: name 'Nama' is not defined Huruf besar-kecil tidak konsisten: disimpan sebagai nama, dipanggil Nama — Python anggap dua kotak berbeda. Tegaskan: nama variabel case-sensitive. nama dan Nama adalah dua kotak berbeda. Konsisten huruf kecil sejak awal = masalah ini tidak pernah muncul.
Tertukar: "16" dihitung sebagai angka Angka berkutip dianggap int — padahal itu str (jebakan paling sering dari deck). Kembalikan ke aturan satu kalimat: ada kutip = teks, polos = angka. Cek dengan type(). Untuk menghitung: lepas kutip, atau terjemahkan dengan int().
Nilai True/False salah kapital (true) true/TRUE dianggap nama variabel → NameError. bool hanya menerima True dan False kapital di awal, tanpa kutip. Ciri dua kata sakti Python yang pemakaiannya wajib persis.

8. Checklist Evaluasi Siswa

9. Jembatan ke Pertemuan Berikutnya (Sesi 05)

Sampai hari ini SEMUA data di program kalian tulis langsung oleh kalian sendiri di dalam kode — nama tetap "Budi" selamanya karena begitulah yang kalian ketik. Minggu depan program kalian mulai bertanya: kotaknya disiapkan kosong dulu, lalu input() mengisi kotak itu dengan jawaban pengguna, dan program merespons — program kalian berubah dari pengumuman satu arah jadi percakapan dua arah. Satu jebakan yang sudah kalian andal dari hari ini: apa pun jawabannya, input() selalu menyimpannya sebagai str — dan kalian sudah tahu obatnya: terjemahkan dengan int() sebelum dihitung.

# Pratinjau Sesi 05: program yang BERTANYA
nama = input("Siapa namamu? ")
print("Halo,", nama, "! Selamat datang.")

# Contoh jalan (input pengguna: Budi):
# Siapa namamu? Budi
# Halo, Budi ! Selamat datang.

Kartu siswa hari ini ditulis dengan data hardcode — minggu depan kartu itu diisi langsung oleh pengguna di tengah jalan. Variabel + konversi yang kalian kuasai hari ini adalah bekal persisnya.