For loop mengulang satu blok kode untuk tiap isi sebuah deret, dari yang pertama sampai yang terakhir. Bayangin Pak Darto membaca kertas pesanan di Warung Kopi: baris pertama "kopi susu", dia bikin kopi susu. Baris kedua "teh manis", dia bikin teh manis. Begitu terus sampai baris terakhir, lalu berhenti sendiri. Kertas pesanan itu deretnya, jari Pak Darto yang menunjuk baris yang sedang dikerjakan itu variabel loop-nya.
🧪 Tebakan cepat:
for i in range(1, 5): print(i)mencetak berapa baris, dan angka terakhirnya 5 atau 4? Tebak dulu, jawabannya ada di bagian "range(): deret angka".
Ulangi untuk tiap isi list
List adalah daftar nilai di antara kurung siku, dipisah koma. Pelajaran List nanti membahasnya lengkap, di sini cukup tahu bahwa for bisa membacanya satu per satu.
pesanan = ["kopi susu", "teh manis", "roti bakar"]
for item in pesanan:
print("Bikin", item)
print("Semua pesanan siap")
Bikin kopi susu
Bikin teh manis
Bikin roti bakar
Semua pesanan siap
for item in pesanan:artinya "untuk tiap isipesanan, tempel namaitemke isi itu, lalu jalankan bloknya". Titik dua di akhir baris wajib.- Baris yang menjorok 4 spasi di bawahnya adalah badan loop: dijalankan sekali per isi. Satu kali jalan disebut satu putaran (iterasi).
print("Semua pesanan siap")gak menjorok, jadi bukan bagian loop. Dia jalan sekali, setelah semua putaran selesai.- Nama
itembebas kamu pilih. Pilih nama yang menjelaskan isinya.
String juga deret: for huruf in "kopi": menjalankan badannya 4 kali, dengan huruf berisi k, o, p, lalu i.
Menjumlah dengan loop
Pola paling sering di kasir: siapkan penampung, lalu tambahkan isinya tiap putaran.
harga = [15000, 5000, 12000]
total = 0
for h in harga:
total += h
print("Total:", total) # Total: 32000
| Putaran | h |
total sebelum |
total sesudah |
|---|---|---|---|
| 1 | 15000 | 0 | 15000 |
| 2 | 5000 | 15000 | 20000 |
| 3 | 12000 | 20000 | 32000 |
total += h adalah singkatan dari total = total + h. total = 0 ditulis sebelum loop. Kalau ditaruh di dalam loop, penampungnya kembali ke 0 tiap putaran.
range(): deret angka
Butuh angka berurutan, misalnya nomor antrean? Pakai range(). Polanya range(start, stop, step): mulai dari start, naik step tiap kali, dan berhenti sebelum stop. Angka stop sendiri gak pernah ikut, sama seperti slicing di pelajaran string.
| Panggilan | Angka yang dihasilkan | Banyaknya |
|---|---|---|
range(5) |
0, 1, 2, 3, 4 | 5 |
range(1, 6) |
1, 2, 3, 4, 5 | 5 |
range(0, 10, 2) |
0, 2, 4, 6, 8 | 5 |
range(10, 0, -3) |
10, 7, 4, 1 | 4 |
range(5, 1) |
(kosong) | 0 |
- Cuma satu angka? Itu
stop, danstartotomatis 0. Jadirange(5)menghasilkan 0 sampai 4: lima angka, tanpa 5. stepnegatif menghitung mundur, danstoptetap gak ikut.range(5, 1)kosong: dengan step naik, 5 sudah melewati 1, jadi badan loop gak jalan sekali pun. Gak ada error.- Mau 1 sampai
n? Tulisrange(1, n + 1).
Jadi range(1, 5) menghasilkan 1, 2, 3, 4: empat baris, dan angka terakhirnya 4. Itu jawaban tebakannya.
enumerate(): nomor dan isinya
Struk butuh nomor urut di depan tiap pesanan. enumerate() memberi pasangan nomor dan isi tiap putaran:
pesanan = ["kopi susu", "teh manis", "roti bakar"]
for no, item in enumerate(pesanan, start=1):
print(f"{no}. {item}")
1. kopi susu
2. teh manis
3. roti bakar
- Tiap putaran
enumeratememberi dua nilai, danno, itemmenampung keduanya sekaligus: nilai pertama keno, kedua keitem. - Tanpa
start=1, nomornya mulai dari 0, seperti indeks:for i, v in enumerate(["a", "b", "c"]): print(i, v)mencetak tiga baris,0 a,1 b,2 c. - Banyaknya putaran selalu sama dengan banyaknya isi list.
Loop dan if: FizzBuzz
Di dalam badan loop boleh ada if, elif, dan else. Soal klasik FizzBuzz memakai angka 1 sampai n: kelipatan 3 dan 5 sekaligus jadi FizzBuzz, kelipatan 3 saja jadi Fizz, kelipatan 5 saja jadi Buzz, sisanya angkanya sendiri. "Kelipatan 3" artinya sisa baginya 0, jadi dicek dengan i % 3 == 0.
i |
i % 3 |
i % 5 |
Dicetak |
|---|---|---|---|
| 1 | 1 | 1 | 1 |
| 3 | 0 | 3 | Fizz |
| 5 | 2 | 0 | Buzz |
| 9 | 0 | 4 | Fizz |
| 15 | 0 | 0 | FizzBuzz |
Urutan cek menentukan hasilnya. 15 lolos cek kelipatan 3 dan cek kelipatan 5. Kalau i % 3 == 0 dicek duluan, elif sisanya gak pernah dibaca, dan 15 cuma jadi Fizz. Jadi cek yang paling sempit dulu: i % 15 == 0, atau i % 3 == 0 and i % 5 == 0.
⚠️ Jebakan yang sering ketemu
- Lupa titik dua.
for item in pesanantanpa:ditolak denganSyntaxError: expected ':'. - Badan loop gak menjorok. Baris
print(item)yang mulai dari kolom kiri jadiIndentationError: expected an indented block after 'for' statement on line 2. - Mengira
stopikut.range(1, 5)berhenti di 4. Mau sampai 5, tulisrange(1, 6), ataurange(1, n + 1)untuk 1 sampain. - Loop langsung di atas angka.
for i in 5:gagal denganTypeError: 'int' object is not iterable. Angka bukan deret, jadi bungkus denganrange(5).
TL;DR: for item in deret: menjalankan badan loop (baris yang menjorok) sekali untuk tiap isi deret, lalu berhenti sendiri. Deretnya bisa list, string, atau range(). range(start, stop, step) berhenti sebelum stop: range(5) itu 0 sampai 4, range(1, 6) itu 1 sampai 5, range(0, 10, 2) itu 0, 2, 4, 6, 8, dan step negatif menghitung mundur. enumerate(list, start=1) memberi nomor dan isinya sekaligus: for no, item in .... Untuk menjumlah, siapkan total = 0 sebelum loop lalu total += h di dalamnya. Di FizzBuzz, cek kelipatan 15 dulu, baru 3, lalu 5.