Ekstrakurikuler CSSE: Computer Science & Software Engineering (Python)
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.Sisipkan elemen di tengah dengan insert(), plus statistik cepat max()/min() untuk mencari nilai tertinggi & terendah tanpa loop manual.
-1 = elemen terakhir).[1:3] dan menjelaskan kenapa batas stop tidak ikut.append(), remove(), insert(), serta mengecek keanggotaan dengan in dan panjang dengan len().for di atas list untuk memproses tiap elemen.sum(), max(), dan rata-rata sum/len.IndexError dan mencegahnya dengan mengecek batas list.Hari ini siswa menempuh barisan ke-11 dari 17 — 65% perjalanan:
| Waktu | Blok | Aktivitas |
|---|---|---|
| 10' | Pembuka | Cover, tujuan sesi, rekap Sesi 10 (nested loop & pola bintang) |
| 15' | Materi 1 | Analogi daftar belanja; membuat list, indeks mulai 0 & indeks negatif |
| 10' | Materi 2 | Slicing rentang [1:3]; jebakan "batas stop tidak ikut" (sama seperti range) |
| 15' | Tugas 1 | Kelola daftar nilai: append, remove, len(), cek keanggotaan dengan in |
| 20' | Tugas 2 | Loop di atas list: input n nilai masuk list, tampilkan & hitung rata-rata (sum/len) |
| 20' | Challenge | Daftar nama teman: cetak satu per satu, cari nama, hapus dengan aman |
| 10' | Penutup | Pembahasan singkat challenge, rangkuman 5 poin, preview Sesi 12 |
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.
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."
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.)
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).
len(nilai): "list ada 4, indeks terakhir 3. Kamu minta nomor berapa?"
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.
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.
Siswa lanjutkan file yang sama:
append, cetak list.remove, cetak lagi.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".
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.
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.
Bedah solusi challenge, tunjukkan versi aman if nama in teman: sebelum remove. Tutup dengan rangkuman 5 poin + preview Sesi 12 (fungsi).
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.
| 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. |
0 dan -1 tanpa ragu.append/remove, dan otomatis mengecek in sebelum remove.sum/len di posisi yang benar.IndexError dan cara mencegahnya.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.