Mesin mini: masuk buah, keluar jus. Ditulis sekali, dipanggil berkali-kali — tanpa copy-paste.
def, parameter, returndef & memanggilnya — parameter & argumentreturn & menyimpannya untuk dipakai lagiKemarin hitung rata-rata ditulis sekali jalan — hari ini dibungkus jadi mesin yang tinggal dipanggil di tiga tempat.
nilai = [85, 92, 78]nilai[0] pertama, nilai[-1] terakhir, slicing [1:3] stop tidak ikutappend · remove · len · in, cek dulu baru hapus[] di luar, append di dalam, hitung di luar → rata-rata sum/lenMasalah kecil minggu lalu: kode rata-rata ditulis sekali jalan — tapi kalau butuh hitungan serupa di tiga tempat, copy-paste tiga kali? Hari ini ada cara yang lebih elegan.
Keluar berapa? 85.0. Sekarang bayangkan butuh hitungan itu di 3 menu program — mau copy-paste 3×?
Posisimu: 12 dari 17 — 71% perjalanan. Mini Project 2 makin dekat!
def sapa(nama): # def = MERAKIT mesin
pesan = "Hai, " + nama + "!"
return pesan # return = hasil keluar mesin
print(sapa("Budi")) # memanggil = MENYALAKAN
print(sapa("Ani")) # mesin yang sama, buah beda
def = merakit mesin — belum jalan, cuma disiapkansapa("Budi") = menyalakan — tanpa tanda kurung, mesin diamSatu mesin, dua panggilan, hasil beda — kamu tidak menulis ulang rumusnya.
Nama fungsi pakai snake_case deskriptif: hitung_luas() bukan f() — nama menjelaskan kerja mesinnya.
def luas_persegi_panjang(panjang, lebar):
return panjang * lebar
print(luas_persegi_panjang(8, 5)) # 40
print(luas_persegi_panjang(7, 2)) # 14
di definisi — panjang, lebar: kotak kosong yang nunggu diisi
di panggilan — 8, 5: nilai beneran yang masuk kotak
Urutan pengisian mengikuti urutan kotak: 8 masuk panjang, 5 masuk lebar.
Tanya satu hal: "mesin ini butuh apa untuk bekerja?" — itulah parameternya. Butuh dua data? Jangan dipaksa satu.
return — hasil keluar mesindef luas_persegi(sisi):
return sisi * sisi
hasil = luas_persegi(5) # hasil = 25, DISIMPAN
print(hasil) # 25
print(hasil * 2) # 50 — bisa dihitung lagi!
return = mesin menyerahkan hasil ke tangan yang memanggilreturn, mesin berhenti — baris di bawahnya tidak dieksekusihasil * 2 bisa jalan karena fungsi memakai return — hasilnya nilai yang hidup, bukan sekadar tampil.
Kalau return diganti print — apa yang ditangkap hasil = ...? Jawabannya slide berikutnya, dan itu jebakan terkenal.
return vs print — SANGAT bedadef kali(a, b):
return a * b
hasil = kali(3, 4)
print(hasil + 1) # 13 — bisa dihitung!
def kali(a, b):
print(a * b) # cuma tampil di layar
hasil = kali(3, 4) # 12 tampil, TAPI...
print(hasil) # None — tidak ada yang disimpan!
NoneAnalogi kelas: mesin yang hanya print itu barista yang cuma nunjukin kopi — kelihatan, tapi tidak bisa diminum. Mesin yang return menyerahkan kopinya ke tanganmu — disimpan, dihitung lagi, dioper ke mesin lain. Uji cepat: total = kali(3, 4) + 1 hanya benar kalau fungsi return.
def luas_persegi_panjang(panjang, lebar): yang return hasilnya. Simpan ke variabel, cetak.def keliling_persegi_panjang(panjang, lebar): yang return 2 * (panjang + lebar).p = 8, l = 5 — lalu panggil LAGI dengan data lain, tanpa menulis ulang rumus.Panggilan kedua dengan data beda tanpa nulis ulang — itu bukti mesinmu reusable.
Kaget None muncul? Bagus — itu bahan diskusi return vs print. Cek kata yang kamu pakai di dalam mesin.
def sapa(nama="teman"):
return "Hai, " + nama + "!"
print(sapa("Budi")) # Hai, Budi!
print(sapa()) # Hai, teman! — pakai default
Default = nilai cadangan — kotak yang tidak diisi tetap membuat mesin jalan. Wajib diisi dulu, boleh-skip di belakang: def f(wajib, opsional="x"):
Isi kotaknya → timpa default. Kosongkan → mesin tetap nyala dengan isi bawaan.
Modular = program dipecah mesin-mesin kecil — 1 fungsi, 1 tanggung jawab. luas() cuma hitung luas, keliling() cuma keliling. Dirakit jadi program besar.
luas_persegi_panjang(panjang, lebar) → return luaskeliling_persegi_panjang(panjang, lebar) → return kelilingkonversi_suhu(celsius) → return celsius * 9 / 5 + 32Angka boleh kamu pilih — yang dinilai: 3 fungsi return & semuanya terpanggil.
Waktu: 20 menit untuk Tugas 1 + 2. Ini tugas penilaian sesi 12 — mesin dibuat di atas, dipakai di bawah.
Bikin cek_genap(angka) yang return hasil cek: habis dibagi 2 atau tidak. Petunjuk: operator % dari Sesi 06 — angka % 2 sisa baginya. Fungsi ini return boolean — bisa langsung masuk if.
Bikin konversi_suhu(celsius) — rumus Celsius ke Fahrenheit: celsius * 9 / 5 + 32. Cek: 0°C harus 32°F, 100°C harus 212°F.
%, rumus, return — dirakit jadi dua mesin baru.
def cek_genap(angka):
return angka % 2 == 0
print(cek_genap(7)) # False
print(cek_genap(8)) # True
if cek_genap(10):
print("boleh tim") # masuk tim
Kunci: return boolean — langsung sah dipakai di if. Bandingkan dulu (% 2 == 0), baru kirim jawabannya.
def konversi_suhu(celsius):
return celsius * 9 / 5 + 32
print(konversi_suhu(0)) # 32.0
print(konversi_suhu(100)) # 212.0
Uji dengan angka yang kamu tahu jawabannya: 0°C = 32°F. Kalau hasil meleset — rumusnya, bukan mesinnya. Debugging itu uji satu kasus dulu.
Bonus gabungan (buat yang cepat): loop list nilai dari Sesi 11 — for angka in rekap: print(angka, status_nilai(angka)). Satu mesin dipanggil berkali-kali — inilah reuse.
print(luas(8, 5)) # dipanggil duluan
def luas(p, l):
return p * l
# NameError: name 'luas' is not defined
Mesinnya belum dirakit, sudah disuruh nyala. Python membaca file dari atas — def harus dieksekusi dulu, panggilan belakangan.
def luas(p, l):
print(p * l) # cuma tampil
hasil = luas(8, 5)
print(hasil + 1)
# TypeError: + antara None dan int
print tampil lalu lenyap — hasil menangkap None. Ganti jadi return — kopi diserahkan, bukan cuma ditunjukkan.
def luas(p, l):
return p * l
luas() # mesin nyala tanpa buah
# TypeError: missing 2 required
# positional arguments: 'p', 'l'
Blender dinyalakan tanpa buah. Jumlah argument harus sama dengan jumlah parameter — atau beri default di parameter terakhir.
Error itu alarm posisi, bukan vonis — dua jebakan teratas adalah masalah urutan, bukan kecerdasan. Jangan cari solusi instan: baca pesannya, tanya "mesinnya sudah dibuat? kotaknya sudah diisi?" — itu latihan debugging yang bikin kamu naik level.
def nama(parameter): = merakit mesin — baru jalan saat dipanggil nama(argument)return menyerahkan nilai — bisa disimpan & dihitung lagi · print cuma tampil lalu lenyap → Nonedef sapa(nama="teman"):Mesin hari ini kerja di angka —
minggu depan alat sama dipakai di teks: nama.strip().title()
Bersihkan input user, ubah huruf, pecah kalimat — bekal fitur wajib Mini Project 2. Siap-siap kaget: string itu immutable — nama.upper() tidak mengubah nama!
fungsi.py isi 3 fungsi: sapa, cek_genap, konversi_suhu — panggil semua di bawahnyadef rata_rata(nilai):