Dua belas sesi, satu kotak peralatan. Hari ini semuanya dirakit jadi satu aplikasi menu yang benar-benar jalan — gladi bersih Final Project.
list, loop, fungsi & if jadi aplikasi utuhwhile True — lihat · tambah · hapus · cari · keluarlist, while True, def & if/elif jadi satu aplikasi kecillist sebagai data selama program jalantampilkan · tambah · hapus · cariMinimal 2 fitur jalan
Menu lihat / tambah / hapus / keluar hidup, termodular per fungsi, data tersimpan di list selama program berputar.
Ini gladi bersih Final Project — pola menu + list + fungsi yang sama dipakai Sesi 16, tinggal ganti domain data.
strip().title() — ritual pembersih input: nama kotor jadi rapilower() — samakan bentuk teks agar perbandingan adilin · find() · count() — detektif teks: ada, di mana, berapa kalisplit() & join() — gunting & lem: teks ↔ listHari ini strip() jadi kebiasaan di setiap input(), dan in + lower() jadi mesin fitur Cari aplikasimu.
" 4 " == "4" itu False. Jawabannya satu huruf kecil: .strip(). Sesi 13 langsung kepakai di menit-menit pertama!Posisimu: 14 dari 17 — 82% perjalanan. Final Project sudah terlihat!
Menu = loop + if. Logika fitur = di fungsi. Loop hanya memanggil — bukan mengolah.
tambah_tugas sendirian, tanpa menjalankan seluruh menuelifKriteria lulus hari ini bukan "keren", tapi "rapi & jalan" — struktur ini wajib di Final Project Sesi 16.
list — memori aplikasimutugas = [
"Matematika PR",
"Fisika laporan",
]
tugas.append("Kimia PR") # jadi 3 item
print(len(tugas)) # 3
print(tugas[0]) # Matematika PR
Ganti isi saja: barang = ["Roti", "Susu"] — menu lihat/tambah/hapus bekerja persis sama. Pola yang dipelajari sekali, dipakai di mana-mana.
append() tiap user menambahpop() buang sesuai nomorin + lower() telusuri isinyaJujur dulu: list hilang saat program ditutup — wajar! Menyimpan ke file itu materi Final Project (Sesi 16). Hari ini fokus: aplikasinya hidup dulu.
tampilkan & tambahdef tampilkan(items):
if not items:
print("(kosong)")
return
for nomor, item in enumerate(items, 1):
print(f"{nomor}. {item}")
def tambah_tugas(items):
baru = input("Tugas baru: ").strip()
if baru:
items.append(baru)
print("Ditambahkan:", baru)
else:
print("Tugas kosong, tidak jadi.")
enumerate(items, 1) — nomor mulai dari 1 (bahasa user), bukan 0 (bahasa Python).strip() — Sesi 13 langsung dipakai: spasi dienter tak ikut tersimpanif not items — list kosong ditangani sopan, bukan tampil kosong membingungkanDapur harus jalan dulu — baru ruang tunggunya dibangun.
tugas = ["Matematika PR", "Fisika laporan"] di baris paling atasenumerate + penanganan list kosonginput().strip(), tolak entri kosongtampilkan(tugas) lalu tambah_tugas(tugas) — coba juga Enter kosong!Dua fungsi jalan tanpa error — belum ada menu. Yang jalan duluan di sini = fondasi 2 fitur dari baseline lulus.
Waktu: 15 menit. Mentok? Angkat tangan — jangan tunggu sampai bingungnya menumpuk.
while Truewhile True:
print()
print("=== TODO LIST ===")
print("1. Lihat 2. Tambah 3. Hapus 4. Cari 5. Keluar")
pilih = input("Pilih menu: ").strip()
if pilih == "1":
tampilkan(tugas)
elif pilih == "2":
tambah_tugas(tugas)
elif pilih == "5":
print("Sampai jumpa!")
break
else:
print("Menu tidak ada, coba lagi.")
pilih == "5" — string, bukan int! Menu tidak butuh int() — lebih aman dari input ngacobreak hanya di cabang Keluar — satu-satunya pintu; di Sesi 09 break itu bug, di sini break itu fiturelse ramah — pilihan ngawur tidak crash, cuma diajak coba lagiInget Sesi 09: while True tanpa pintu keluar = infinite loop. Bedanya sekarang: pintu keluarnya sengaja kamu rancang.
popdef hapus_tugas(items):
if not items:
print("(kosong - tidak ada yang bisa dihapus)")
return
tampilkan(items)
nomor = int(input("Hapus nomor berapa? "))
if 1 <= nomor <= len(items):
dihapus = items.pop(nomor - 1)
print("Terhapus:", dihapus)
else:
print("Nomor tidak ada.")
if not items — kosong tak bisa dihapus; tanpa ini, pop dari list kosong = crash1 <= nomor <= len(items) — nomor 99 di daftar 3 item ditolak sebelum menyentuh listnomor - 1 — user berhitung dari 1, Python dari 0: satu jembatan kecil, wajib adaAplikasi mati total di depan user. Pagar 2 baris menyelamatkan semuanya.
in + lower() jadi fiturdef cari_tugas(items, kata):
hasil = []
for item in items:
if kata.lower() in item.lower():
hasil.append(item)
return hasil
# di dalam menu:
elif pilih == "4":
kata = input("Cari kata: ").strip()
hasil = cari_tugas(tugas, kata)
if hasil:
tampilkan(hasil)
else:
print("Tidak ada yang cocok.")
lower() dua-duanya?Cari "kimia" harus tetap ketemu "Kimia PR" — pencarian longgar: kedua sisi direndahkan dulu sebelum dibandingkan.
kata.lower() in item.lower() — cari sebagian kata pun ketemureturn hasil — fungsi memberi nilai (Sesi 12), bukan sekadar mencetakIni fitur menu ke-4 — baseline kurikulummu: lihat / tambah / hapus / keluar plus Cari. Cuma satu baris elif lagi di mesin menu.
while True + tampilan menu + cabang if/elif untuk Lihat dan Tambah. Uji keduanya!hapus_tugas sendiri mengikuti pola slide 10: dua pagar pengaman + nomor - 1cari_tugas + satu baris elifbreak + else ramah untuk pilihan ngawurTambah 3 tugas → lihat → hapus nomor 2 → lihat lagi → cari → keluar → jalankan ulang. Data hilang setelah ditutup? Wajar — itu perilaku list, bukan bug.
Waktu: 35 menit — inti 120 menit hari ini. Keluar satu-satu: menu 1-2 dulu jalan, baru lanjut. Jangan rakit semua sekaligus!
Tambah menu Statistik: cetak jumlah tugas (len), tugas pertama & terakhir ([0] / [-1]), dan yang cocok satu kata kunci — semuanya olah list yang sudah ada.
Kamu pilih Kasir Warung? Tambah menu Struk: cetak semua barang bernomor + total belanja — pola akumulasi total = total + harga dari Sesi 09.
def statistik(items):
print("=== STATISTIK ===")
print("Total tugas :", len(items))
if items:
print("Pertama :", items[0])
print("Terakhir :", items[-1])
# pasang di mesin menu:
elif pilih == "6":
statistik(tugas)
Polanya selalu sama: fungsi baru + satu baris elif. if items menjaga aplikasi tetap sopan saat list kosong.
def cetak_struk(barang, harga):
total = 0
for i in range(len(barang)):
print(f"{i+1}. {barang[i]}",
harga[i])
total += harga[i]
print("TOTAL ", total)
Dua list sejajar: barang[i] + harga[i]. Total pakai pola akumulasi Sesi 09 — total += harga[i] di dalam loop.
Perhatikan: kedua solusi tidak mengubah mesin menu — cuma menambah fungsi + satu cabang. Itulah buah modular: fitur baru tidak pernah membongkar dapur lama.
pilih = input("Pilih menu: ")
if pilih == 4: # angka, bukan string!
break # tak pernah terpicu
Gejala: ketik 4, menu tetap jalan terus — input() menghasilkan string, "4" == 4 itu False. Bandingkan string: pilih == "4". Bonus: tanpa int(), huruf ngawur pun tidak bikin crash.
nomor = int(input("Nomor? "))
items.pop(nomor - 1) # tanpa pagar!
# user isi 99 → IndexError
Gejala: user salah ketik → aplikasi mati total. Pagar wajib: 1 <= nomor <= len(items) sebelum pop. Dan hapus selalu lewat nomor user (1-based) dikurangi 1, bukan indeks mentah.
while True:
print("1. Lihat...")
pilih = input()
if pilih == "1":
# 30 baris logika di sini!
Gejala: kode panjang menjulur, satu error membingungkan semuanya. Aturan hari ini: 1 fungsi = 1 menu — loop hanya memanggil. Final Project menuntut struktur ini.
while True:
print("1. Lihat 2. Tambah")
# tidak ada opsi Keluar
# tidak ada break sama sekali!
Gejala: infinite loop — user tidak pernah bisa pulang, laptop di-Force-Close. Setiap menu while True wajib punya opsi Keluar + break. Terminal macet? Ctrl+C — darurat dari Sesi 09.
Senjata debug: uji satu cabang satu waktu — jalankan menu 1 saja dulu, baru tambah menu 2. Error yang muncul langsung tahu asalnya.
tambah_tugas, bukan proses2Boleh belum sempurna — tidak boleh kacau strukturnya. Rapi hari ini = setengah Final Project lunas.
while True + if/elif — loop menjaga hidup, break hanya di cabang Keluarlist — append tumbuh, pop buang, bertahan selama program berputar1 <= nomor <= len + in/lower()tampilkan / tambah / hapus / cari terpisah; fitur baru = fungsi baru + satu elifHari ini ngetik semua sendiri —
minggu depan AI bantu menulis, kamu yang menguji.
Prompt yang jelas → kode jadi → jangan salin buta: jalankan, cek error, pahami logikanya. Dan di situlah terasa kenapa paham kode hari ini wajib — kamu tak bisa memeriksa asisten kalau tak pernah mengerjakan sendiri.