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

MODUL 11 — List / Array

Ekstrakurikuler CSSE: Computer Science & Software Engineering (Python)

Jenjang Peserta Siswa SMA (Kelas 10–12)
Alokasi Waktu 100 Menit
Fokus Materi list, indeks, slicing, append/remove, len() & in
Target Selesai Rekap n nilai jalan: input masuk list, tampil & rata-rata terhitung
Tools VS Code & Python (Run ▶)
Prioritas sesi: Wajib: list (satu nama pegang banyak nilai), indeks mulai 0 & indeks negatif, slicing, append/remove, len() & in, loop di atas list, dan program rekap nilai dengan rata-rata.
Materi pengayaan (opsional jika waktu cukup)

Sisipkan elemen di tengah dengan insert(), plus statistik cepat max()/min() untuk mencari nilai tertinggi & terendah tanpa loop manual.

1. Tujuan Pembelajaran

  1. Membuat list dan menjelaskan bedanya dengan variabel tunggal (satu nama pegang banyak nilai).
  2. Mengakses elemen list dengan indeks (mulai dari 0) dan indeks negatif (-1 = elemen terakhir).
  3. Mengambil rentang elemen dengan slicing [1:3] dan menjelaskan kenapa batas stop tidak ikut.
  4. Mengelola isi list dengan append(), remove(), insert(), serta mengecek keanggotaan dengan in dan panjang dengan len().
  5. Melakukan loop for di atas list untuk memproses tiap elemen.
  6. Menghitung statistik list angka: sum(), max(), dan rata-rata sum/len.
  7. Membaca pesan IndexError dan mencegahnya dengan mengecek batas list.
  8. Membangun program penilaian sesi ini: menerima n nilai, menyimpan ke list, menampilkan semua, lalu menghitung rata-rata.

2. Peta Jalan 17 Pertemuan

Hari ini siswa menempuh barisan ke-11 dari 17 — 65% perjalanan:

[ 01-02 ] Fondasi: konsep program, algoritma, flowchart [ 03-05 ] Mulai coding: print, variabel, input/output [ 06-07 ] Operator & percabangan if/elif/else [ 08 ] Mini Project 1: Decision Making [ 09 ] Looping / Perulangan [ 10 ] Nested Loop & Pattern Programming <-- SUDAH LEWAT [ 11-13 ] List, Functions, String <-- HARI INI (100 Menit) [ 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, tujuan sesi, rekap Sesi 10 (nested loop & pola bintang)
15'Materi 1Analogi daftar belanja; membuat list, indeks mulai 0 & indeks negatif
10'Materi 2Slicing rentang [1:3]; jebakan "batas stop tidak ikut" (sama seperti range)
15'Tugas 1Kelola daftar nilai: append, remove, len(), cek keanggotaan dengan in
20'Tugas 2Loop di atas list: input n nilai masuk list, tampilkan & hitung rata-rata (sum/len)
20'ChallengeDaftar nama teman: cetak satu per satu, cari nama, hapus dengan aman
10'PenutupPembahasan singkat challenge, rangkuman 5 poin, preview Sesi 12

4. Pedagogi & Penjelasan Konsep

A. Analogi Daftar Belanja

List = daftar belanja (atau keranjang jajanan). Tangan manusia cuma bisa memegang satu-dua barang — itu variabel tunggal dari Sesi 04. Tapi kalau pergi ke warung, kamu bawa keranjang: satu wadah, isinya banyak, bisa ditambah, bisa dibuang. Di Sesi 10 siswa sudah bisa mengulang cetak pola; hari ini datanya jadi banyak, dan satu list mengendalikan semuanya. Mulai dari sini, program nyata (rekap nilai, daftar tugas, keranjang game) semuanya berdiri di atas list.

B. Indeks Itu Nomor Loker Mulai dari 0

Bayangkan deretan loker di sekolah: loker pertama bernomor 0, bukan 1. Jadi nilai[0] = nilai pertama, nilai[-1] = loker terakhir dihitung mundur dari belakang. Slicing [1:3] = ambil loker 1 dan 2 — angka 3 hanya garis finis, tidak ikut diinjak. Ini persis pola range(start, stop) dari Sesi 09: berhenti SEBELUM stop. Satu aturan lama, tempat baru — tegas katakan ke siswa: "kalian sudah tahu ini."

C. Pola Wadah — List Kosong yang Diisi Loop

Penting hari ini: list yang boleh berubah (mutable). append() menambah di belakang, remove() membuang berdasarkan nilai. Pola wajib yang perlu diingat — mirror pola akumulasi Sesi 09:

rekap = []              # wadah kosong: dibuat SEBELUM loop
for i in range(n):
    rekap.append(skor)  # diisi DI DALAM loop
print(rekap)            # diolah DI LUAR loop

Trik aman hapus: cek dulu baru buang — if 90 in nilai: baru nilai.remove(90). (Sesi 13 nanti ada kejutan: string ternyata TIDAK bisa diberi append — simpan ini untuk kontras.)

D. Error Itu Alarm, Bukan Aib

IndexError = kamu menanya loker nomor 10 padahal cuma ada 5 — alarmnya bilang "batasmu lewat", bukan "kamu bodoh". Ajarkan siswa membaca angka di pesan error: Python sering menyebut indeks yang dicoba. Kebiasaan penyelamat: sebelum mengakses indeks hasil hitungan, cek dulu len(list).

Catatan pengajar: error indeks out of range pasti banyak muncul hari ini (dari kurikulum resmi) — jadikan itu materi, bukan gangguan. Saat ada yang kena, berhenti sekelas, bacakan pesannya bersama, hitung bareng len(nilai): "list ada 4, indeks terakhir 3. Kamu minta nomor berapa?"

5. Panduan Praktik Langkah demi Langkah

Langkah 1: Pemanasan — Buat & Akses List (10 menit)

Minta siswa menulis dan menjalankan:

nilai = [85, 92, 78, 88]
print(nilai[0])    # 85 - indeks mulai dari 0
print(nilai[3])    # 88 - elemen terakhir
print(nilai[-1])   # 88 - juga terakhir, dihitung dari belakang
print(len(nilai))  # 4 - jumlah isi

Diskusikan: kenapa elemen pertama [0] bukan [1]? Lalu tantang mereka tebak dulu nilai[-2] tanpa run.

Langkah 2: Slicing — Ambil Rentang (10 menit)

print(nilai[1:3])   # [92, 78] - indeks 3 tidak ikut
print(nilai[:2])    # [85, 92] - dari awal sampai sebelum 2
print(nilai[2:])    # [78, 88] - dari 2 sampai habis

Tanya kunci: "kok [1:3] cuma dua elemen?" Arahkan ke ingatan Sesi 09 — stop itu garis finis. Kaitkan: aturan yang sama, tempat baru.

Langkah 3: Tugas 1 — Kelola Daftar Nilai (15 menit)

Siswa lanjutkan file yang sama:

  1. Tambah 95 di akhir dengan append, cetak list.
  2. Hapus 78 dengan remove, cetak lagi.
  3. Cek 90 in nilai dan 95 in nilai — amati True/False.

Moment emas: hampir pasti ada yang remove(99) padahal 99 tidak ada — biarkan! Itu pintu masuk ValueError dan pola "cek dulu baru hapus".

Langkah 4: Tugas 2 — Rekap n Nilai ke List (20 menit)

Ini tugas penilaian sesi ini (dari kurikulum): program menerima n nilai, simpan di list, tampilkan, hitung rata-rata. Pandu pola wadah dari bagian 4C:

rekap = []
n = int(input("Mau rekap berapa nilai? "))
for i in range(n):
    skor = int(input(f"Nilai ke-{i + 1}: "))
    rekap.append(skor)

print("Semua nilai:", rekap)
print("Rata-rata:", sum(rekap) / len(rekap))

Tekankan tiga posisi: rekap = [] di luar, append di dalam, hitung rata-rata di luar. Ini pola akumulasi Sesi 09, versi keranjang.

Langkah 5: Challenge — Daftar Teman (20 menit)

Daftar nama teman, cetak satu per satu bernomor:

teman = ["Budi", "Ani", "Cici", "Dodi"]
nomor = 1
for nama in teman:
    print(nomor, nama)
    nomor += 1

Level lanjutan: cek apakah nama tertentu ada (in), lalu hapus nama itu dengan aman (cek dulu, baru remove). Yang cepat selesai: hitung berapa nama yang berawalan huruf tertentu.

Langkah 6: Pembahasan & Penutup (10 menit)

Bedah solusi challenge, tunjukkan versi aman if nama in teman: sebelum remove. Tutup dengan rangkuman 5 poin + preview Sesi 12 (fungsi).

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

Kode lengkap per bagian ada di kode.py. Berikut solusi utuh mandiri yang bisa dijalankan (dasar kode.py + tugas penilaian), dengan output harapan di komentar:

# ================= SESI 11 - LIST / ARRAY =================
# Satu nama pegang banyak nilai, lalu diolah sekaligus.

# --- BAGIAN 1: list dasar - akses via indeks ---
nilai = [85, 92, 78, 88]
print(nilai[0])       # 85  (indeks mulai dari 0)
print(nilai[-1])      # 88  (negatif = hitung dari belakang)
print(nilai[1:3])     # [92, 78]  (batas stop tidak ikut)

# --- BAGIAN 2: kelola isi list ---
nilai.append(95)      # tambah di akhir → [85, 92, 78, 88, 95]
nilai.remove(78)      # hapus angka 78   → [85, 92, 88, 95]
print("Jumlah:", len(nilai))      # Jumlah: 4
print("Tertinggi:", max(nilai))   # Tertinggi: 95
print("Ada 90?", 90 in nilai)     # Ada 90? False

# --- BAGIAN 3: rekap n nilai dari input (tugas penilaian) ---
rekap = []            # wadah kosong - dibuat SEBELUM loop
n = int(input("Mau rekap berapa nilai? "))
for i in range(n):
    skor = int(input(f"Nilai ke-{i + 1}: "))
    rekap.append(skor)          # diisi DI DALAM loop

print("Semua nilai:", rekap)
rata = sum(rekap) / len(rekap)
print("Rata-rata:", rata)

# --- BAGIAN 4: loop + kondisi - status tiap nilai ---
for angka in rekap:
    if angka >= 75:
        print(angka, "Lulus")
    else:
        print(angka, "Remedial")

Contoh jalannya program (n = 3):

Mau rekap berapa nilai? 3
Nilai ke-1: 85
Nilai ke-2: 70
Nilai ke-3: 92
Semua nilai: [85, 70, 92]
Rata-rata: 82.33333333333333
85 Lulus
70 Remedial
92 Lulus

Kunci pembahasan: append selalu di dalam loop, statistik (sum/len) di luar loop, dan kondisi lulus (>= 75) dipakai ulang dari Sesi 07 — semuanya gubahan lama yang sekarang duduk di atas satu list.

7. Troubleshooting Guide (Pegangan Guru)

Masalah Penyebab Tindakan Perbaikan
IndexError: list index out of range Mengakses indeks melewati batas — list 4 elemen diminta nilai[4] atau nilai[10]. Bacakan pesan error bersama. Ingatkan: indeks terakhir = len(list) - 1. Biasakan cek len() sebelum akses indeks hasil hitungan.
ValueError: list.remove(x): x not in list remove() nilai yang memang tidak ada di list. Polakan "cek dulu baru hapus": if x in nilai: baru remove. Jalankan keduanya sebagai kebiasaan, bukan tambalan.
List kosong / rata-rata error ZeroDivisionError append lupa ditulis di dalam loop, atau list dibuat ulang di dalam loop (ter-reset terus). Cek posisi: rekap = [] dan statistik di luar loop, append di dalam. Print list sementara untuk memastikan isinya masuk.
Rata-rata salah (mis. 850.0) Rumus tertukar: sum * len, atau len diambil dari variabel lain. Uji dengan data kecil yang bisa dihitung manual (mis. [80, 90] harus 85.0). Tulis eksplisit sum(rekap) / len(rekap).
TypeError: 'list' object cannot be interpreted as an integer Menulis range(nilai) padahal maksudnya loop list. Dua jalan sah: langsung for x in nilai: (lebih disukai) atau for i in range(len(nilai)):.
Input nilai langsung crash input() menghasilkan string; ketik huruf saat int() mengharapkan angka (Sesi 05). Ingatkan disiplin int(input(...)) + input harus angka. Penanganan error input yang sopan (try-except) akan dibahas di Final Project.

8. Checklist Evaluasi Siswa

9. Jembatan ke Pertemuan Berikutnya (Sesi 12)

Hari ini kode rata-rata kalian tulis sekali — tapi coba bayangkan butuh hitungan serupa di tiga tempat program: copy-paste tiga kali? Minggu depan kalian belajar membungkus logika jadi mesin mini yang tinggal dipanggil: fungsi. Satu kali bikin, pakai berkali-kali.

def rata_rata(daftar):
    return sum(daftar) / len(daftar)

print(rata_rata([85, 92, 78]))   # 85.0
print(rata_rata([70, 90, 80]))   # 80.0

Fungsi adalah bekal langsung untuk Sesi 14 (Mini Project 2: aplikasi menu modular) — dan kalian akan lihat return vs print itu dua hal yang SANGAT beda.