Python & AI Tutorials Logo
Pemrograman Python

12. Iterasi dengan Loop for dan range()

Di Bab 11, kita belajar tentang loop while, yang mengulang aksi selama suatu kondisi tetap True. Walaupun loop while itu kuat dan fleksibel, loop ini mengharuskan kita mengelola penghitung loop dan memperbarui kondisi secara manual. Python menyediakan jenis loop lain—loop for—yang unggul untuk tugas berbeda tetapi sangat umum: memproses setiap item dalam sebuah koleksi data, satu per satu.

Loop for adalah salah satu fitur Python yang paling sering digunakan. Entah kamu sedang memproses baris-baris dalam file, menghitung statistik dari urutan angka, atau memeriksa setiap karakter dalam sebuah string, loop for menyediakan cara yang rapi dan mudah dibaca untuk bekerja menelusuri urutan data. Di bab ini, kita akan mengeksplorasi cara kerja loop for, cara menggunakan fungsi range() Python untuk operasi menghitung, dan cara mengontrol eksekusi loop dengan break, continue, dan klausa else yang kurang dikenal.

12.1) Loop for dan Konsep Iterasi

12.1.1) Apa Itu Loop for?

Sebuah loop for di Python mengulang sebuah blok kode satu kali untuk setiap item dalam sebuah sequence (urutan). Sequence tersebut bisa berupa string, list (yang akan kita pelajari secara detail di Bab 14), atau koleksi item lainnya. Perbedaan utama dari loop while adalah loop for menangani iterasi secara otomatis—kamu tidak perlu memperbarui counter secara manual atau mengecek kondisi.

Berikut struktur dasar loop for:

python
for variable in sequence:
    # Blok kode yang dijalankan untuk setiap item
    # variable menyimpan item saat ini

Loop for bekerja seperti ini:

  1. Python mengambil item pertama dari sequence dan menugaskannya ke variable
  2. Blok kode (yang diindentasi di bawah pernyataan for) dieksekusi
  3. Python mengambil item berikutnya, menugaskannya ke variable, dan mengeksekusi blok lagi
  4. Ini berlanjut sampai semua item dalam sequence telah diproses

Mari lihat contoh sederhana dengan string:

python
# Cetak setiap karakter dalam sebuah nama
name = "Alice"
for character in name:
    print(character)

Output:

A
l
i
c
e

Dalam contoh ini, string "Alice" adalah sequence-nya. Loop memproses setiap karakter satu per satu. Selama iterasi pertama, character berisi 'A', selama iterasi kedua berisi 'l', dan seterusnya. Nama variabel character adalah pilihan kita—kita bisa saja menamainya letter, char, atau bahkan hanya c. Pilih nama yang membuat tujuan kode kamu jelas.

Konvensi Penamaan Variabel Loop: Saat menulis loop for, pilih nama variabel yang menggambarkan apa yang direpresentasikan setiap item. Gunakan nama deskriptif seperti character, student, atau score ketika nilainya penting untuk memahami kode kamu. Gunakan i untuk counter angka sederhana ketika kamu hanya menghitung iterasi. Gunakan _ (underscore) ketika kamu sama sekali tidak membutuhkan nilainya—ini adalah konvensi Python yang berarti "saya tidak peduli nilai ini."

Berikut contoh praktis yang menghitung jumlah huruf vokal dalam sebuah kata:

python
# Hitung vokal dalam sebuah kata
word = "Python"
vowel_count = 0
 
for letter in word:
    if letter in "aeiouAEIOU":
        vowel_count += 1
        print(f"Found vowel: {letter}")
 
print(f"Total vowels: {vowel_count}")

Output:

Found vowel: o
Total vowels: 1

Loop memeriksa setiap huruf dalam "Python". Saat menemukan huruf vokal (menggunakan operator in yang kita pelajari di Bab 7), loop menambah counter dan mencetak pesan. Pola ini—menginisialisasi counter sebelum loop, lalu memperbaruinya di dalam loop—sangat umum dalam pemrograman.

Berikut contoh lain yang mendemonstrasikan akumulasi dengan membangun sebuah hasil:

python
# Hitung huruf kapital dalam sebuah string
text = "Python Programming"
uppercase_count = 0
 
for char in text:
    if char.isupper():
        uppercase_count += 1
 
print(f"Found {uppercase_count} uppercase letters in '{text}'")

Output:

Found 2 uppercase letters in 'Python Programming'

Contoh ini menunjukkan pola akumulasi: kita menginisialisasi counter ke nol sebelum loop, lalu memeriksa setiap karakter dan menambah counter ketika kita menemukan huruf kapital. Setelah loop selesai, kita memakai hasil akumulasi tersebut. Pola ini muncul terus-menerus dalam pemrograman—menghitung item yang memenuhi kriteria tertentu, menjumlahkan nilai, atau membangun hasil sedikit demi sedikit.

12.1.2) Memahami Iterasi

Iterasi (iteration) adalah proses mengulang sebuah aksi untuk setiap elemen dalam sebuah koleksi. Ketika kita mengatakan sebuah objek itu iterable, maksudnya Python bisa memproses elemen-elemennya satu per satu dalam loop for. String bersifat iterable—kita bisa melakukan loop melalui karakter-karakternya. Seperti yang akan kita lihat sebentar lagi, banyak tipe Python lainnya juga iterable.

Variabel dalam loop for (seperti character atau letter dalam contoh kita) disebut variabel loop (loop variable). Variabel ini dibuat otomatis oleh loop for dan hanya ada di dalam scope loop. Setiap kali melalui loop, Python menugaskan item berikutnya dari sequence ke variabel ini.

Berikut contoh yang menunjukkan bagaimana variabel loop berubah:

python
# Tunjukkan bagaimana variabel loop diperbarui
colors = "RGB"  # Merah, Hijau, Biru
for color_code in colors:
    print(f"Processing color code: {color_code}")
    print(f"  This is iteration for '{color_code}'")

Output:

Processing color code: R
  This is iteration for 'R'
Processing color code: G
  This is iteration for 'G'
Processing color code: B
  This is iteration for 'B'

Setiap kali melalui loop, color_code berisi karakter yang berbeda dari string. Loop secara otomatis berpindah ke karakter berikutnya—kita tidak perlu menulis kode apa pun untuk maju melalui sequence.

12.1.3) Loop for vs Loop while untuk Iterasi

Kita bisa melakukan pemrosesan karakter demi karakter yang sama dengan loop while, tetapi itu butuh lebih banyak kode dan pengelolaan manual:

python
# Menggunakan loop while untuk mengiterasi sebuah string (lebih kompleks)
name = "Alice"
index = 0
while index < len(name):
    character = name[index]
    print(character)
    index += 1  # Harus memperbarui index secara manual

Ini menghasilkan output yang sama seperti contoh loop for sebelumnya, tetapi perhatikan apa saja yang harus kita lakukan:

  • Membuat dan menginisialisasi variabel index
  • Mengecek kondisi index < len(name) pada setiap iterasi
  • Mengambil karakter secara manual menggunakan name[index]
  • Ingat untuk menaikkan index (kalau lupa, ini membuat infinite loop!)

Loop for menangani semua ini secara otomatis:

python
# Menggunakan loop for untuk mengiterasi sebuah string (lebih sederhana)
name = "Alice"
for character in name:
    print(character)

Ini jauh lebih rapi dan lebih kecil kemungkinannya membuat kesalahan. Loop for adalah pilihan alami ketika kamu ingin memproses setiap item dalam sebuah koleksi. Gunakan loop while ketika kamu butuh kontrol lebih atas logika iterasi atau ketika kamu tidak tahu sejak awal berapa kali harus mengulang.

Ya

Tidak

Mulai Loop for

Ambil Item Berikutnya dari Sequence

Masih Ada Item?

Assign Item ke Variabel Loop

Jalankan Isi Loop

Keluar dari Loop

12.2) Menggunakan range() untuk Loop Penghitungan

12.2.1) Mengenalkan Fungsi range()

Walaupun loop for sangat bagus untuk memproses sequence yang sudah ada, kita sering perlu mengulang sebuah aksi sejumlah kali tertentu—seperti mencetak pesan lima kali atau menghitung sepuluh bilangan kuadrat pertama. Fungsi range() Python menghasilkan sebuah sequence angka yang bisa kita iterasi dengan loop for.

Bentuk paling sederhana dari range() menerima satu argumen—jumlah bilangan bulat yang akan dihasilkan, dimulai dari 0:

python
# Cetak angka dari 0 sampai 4
for number in range(5):
    print(number)

Output:

0
1
2
3
4

⚠️ Kesalahan Umum: Pemula sering mengira range(5) akan menghasilkan 1, 2, 3, 4, 5, tetapi sebenarnya menghasilkan 0, 1, 2, 3, 4. Ingat: range(n) dimulai dari 0 dan berhenti sebelum n. Perilaku "berhenti sebelum" ini konsisten dengan slicing Python, yang kita pelajari di Bab 5. Range dimulai dari 0 (secara default) dan berjalan hingga, tetapi tidak termasuk, nilai stop.

Pola ini sempurna untuk mengulang sebuah aksi sejumlah kali tertentu:

python
# Cetak sapaan lima kali
for i in range(5):
    print(f"Welcome! (iteration {i})")

Output:

Welcome! (iteration 0)
Welcome! (iteration 1)
Welcome! (iteration 2)
Welcome! (iteration 3)
Welcome! (iteration 4)

Variabel i adalah nama yang umum untuk counter loop (singkatan dari "index" atau "iteration"), meskipun kamu bisa memakai nama variabel valid apa pun. Ketika nilai variabel loop tidak penting untuk logika kamu, i adalah pilihan konvensional.

12.2.2) Menentukan Nilai Start dan Stop

Kamu bisa memberikan dua argumen ke range() untuk menentukan mulai dari mana dan berhenti di mana:

python
# Cetak angka dari 1 sampai 5
for number in range(1, 6):
    print(number)

Output:

1
2
3
4
5

Di sini, range(1, 6) dimulai dari 1 dan berhenti sebelum 6, sehingga memberi kita angka 1 sampai 5. Ini berguna ketika kamu perlu menghitung mulai dari nilai selain nol.

Mari gunakan ini untuk menghitung tabel perkalian sederhana:

python
# Cetak tabel 7 dari 1 sampai 10
multiplier = 7
for number in range(1, 11):
    result = multiplier * number
    print(f"{multiplier} × {number} = {result}")

Output:

7 × 1 = 7
7 × 2 = 14
7 × 3 = 21
7 × 4 = 28
7 × 5 = 35
7 × 6 = 42
7 × 7 = 49
7 × 8 = 56
7 × 9 = 63
7 × 10 = 70

Loop berjalan dari 1 sampai 10, mengalikan setiap angka dengan 7. Ini menunjukkan bagaimana range() membuatnya mudah melakukan perhitungan pada sequence numerik tertentu.

12.2.3) Menggunakan Nilai Step

Fungsi range() menerima argumen opsional ketiga: nilai step, yang menentukan seberapa besar kenaikan (atau penurunan) antar angka:

python
# Cetak angka genap dari 0 sampai 10
for number in range(0, 11, 2):
    print(number)

Output:

0
2
4
6
8
10

Dengan range(0, 11, 2), kita mulai dari 0, berhenti sebelum 11, dan naik 2 setiap kali. Ini memberi kita semua bilangan genap dari 0 sampai 10.

Kamu juga bisa menggunakan step negatif untuk menghitung mundur:

python
# Hitung mundur dari 10 sampai 1
for number in range(10, 0, -1):
    print(number)
print("Liftoff!")

Output:

10
9
8
7
6
5
4
3
2
1
Liftoff!

Di sini, range(10, 0, -1) dimulai dari 10, berhenti sebelum 0, dan turun 1 setiap kali. Step negatif membuat range menghitung mundur.

Mari lihat contoh praktis yang menghitung jumlah semua bilangan ganjil dari 1 sampai 100:

python
# Jumlahkan semua bilangan ganjil dari 1 sampai 100
total = 0
for number in range(1, 101, 2):  # Mulai dari 1, step 2
    total += number
 
print(f"Sum of odd numbers from 1 to 100: {total}")

Output:

Sum of odd numbers from 1 to 100: 2500

Dengan menggunakan range(1, 101, 2), kita hanya menghasilkan bilangan ganjil (1, 3, 5, ..., 99), sehingga tidak perlu mengecek ganjil/genap tiap angka di dalam loop. Ini membuat kode lebih efisien dan maksudnya lebih jelas.

12.2.4) Apa yang Sebenarnya Dikembalikan range()

Fungsi range() tidak membuat list angka di memori—ia membuat sebuah objek range (range object) yang menghasilkan angka sesuai kebutuhan. Ini hemat memori, terutama untuk range besar:

python
# range() mengembalikan objek range, bukan list
numbers = range(1000000)
print(type(numbers))  # Output: <class 'range'>
print(numbers)        # Output: range(0, 1000000)

Output:

<class 'range'>
range(0, 1000000)

Walaupun range ini merepresentasikan satu juta angka, ia memakai sangat sedikit memori karena Python tidak benar-benar membuat semua satu juta angka sampai kamu mengiterasinya. Setiap angka hanya dihasilkan ketika dibutuhkan oleh loop.

Jika kamu butuh list angka yang benar-benar nyata, kamu bisa mengonversi range tersebut:

python
# Konversi range menjadi sebuah list
small_numbers = list(range(5))
print(small_numbers)  # Output: [0, 1, 2, 3, 4]

Output:

[0, 1, 2, 3, 4]

Kita akan belajar lebih banyak tentang list dan fungsi list() di Bab 14. Untuk sekarang, cukup tahu bahwa range() bekerja sempurna dengan loop for tanpa perlu konversi apa pun.

12.3) Mengiterasi String dan Sequence Lainnya

12.3.1) Mengiterasi String Karakter demi Karakter

Kita sudah melihat beberapa contoh mengiterasi string. Ini adalah salah satu penggunaan loop for yang paling umum karena string adalah sequence karakter, dan kita sering perlu memeriksa atau memproses setiap karakter secara individual.

Berikut contoh yang memvalidasi password dengan mengecek bahwa password berisi setidaknya satu digit:

python
# Periksa apakah password berisi setidaknya satu digit
password = "secure123"
has_digit = False
 
for character in password:
    if character.isdigit():
        has_digit = True
        print(f"Found digit: {character}")
 
if has_digit:
    print("Password contains at least one digit ✓")
else:
    print("Password must contain at least one digit ✗")

Output:

Found digit: 1
Found digit: 2
Found digit: 3
Password contains at least one digit ✓

Loop memeriksa setiap karakter menggunakan metode string .isdigit() (yang kita pelajari di Bab 5). Ketika menemukan digit, loop mengatur has_digit menjadi True. Setelah loop selesai, kita mengecek flag tersebut untuk menentukan apakah ada digit yang ditemukan.

Berikut contoh praktis lain yang menghitung berbagai tipe karakter:

python
# Analisis tipe karakter dalam sebuah string
text = "Hello, World! 123"
letters = 0
digits = 0
spaces = 0
other = 0
 
for char in text:
    if char.isalpha():
        letters += 1
    elif char.isdigit():
        digits += 1
    elif char.isspace():
        spaces += 1
    else:
        other += 1
 
print(f"Letters: {letters}")
print(f"Digits: {digits}")
print(f"Spaces: {spaces}")
print(f"Other: {other}")

Output:

Letters: 10
Digits: 3
Spaces: 2
Other: 2

Loop ini mengategorikan setiap karakter menggunakan metode string yang kita pelajari di Bab 5. Rantai if-elif-else (dari Bab 8) memastikan setiap karakter dihitung tepat dalam satu kategori.

12.3.2) Memproses String dengan Indeks

Terkadang kamu membutuhkan karakter sekaligus posisinya dalam string. Kamu bisa memakai range(len(string)) untuk mengiterasi indeks:

python
# Temukan posisi sebuah karakter tertentu
text = "Mississippi"
search_char = "s"
 
print(f"Looking for '{search_char}' in '{text}':")
for index in range(len(text)):
    if text[index] == search_char:
        print(f"  Found at index {index}")

Output:

Looking for 's' in 'Mississippi':
  Found at index 2
  Found at index 3
  Found at index 5
  Found at index 6

Loop mengiterasi indeks dari 0 sampai len(text) - 1. Untuk setiap indeks, kita mengecek apakah karakter pada posisi tersebut cocok dengan karakter yang dicari. Pendekatan ini berguna ketika kamu perlu tahu di mana sesuatu muncul, bukan hanya bahwa sesuatu itu muncul.

12.3.3) Mengiterasi Tipe Sequence Lain

Loop for bekerja dengan sequence iterable apa pun di Python. Walaupun kita fokus pada string di bab ini, kamu akan belajar tentang tipe sequence lain di bab-bab berikutnya. Misalnya, Bab 14 akan mengajarkan kamu tentang list, yaitu koleksi terurut yang bisa menampung banyak nilai dari tipe apa pun. Sintaks loop for tetap sama terlepas dari tipe sequence yang kamu iterasi—loop otomatis menangani pengambilan tiap item dari sequence.

12.4) Menggunakan break dan continue dalam Loop for

12.4.1) Pernyataan break dalam Loop for

Sama seperti pada loop while (Bab 11), pernyataan break langsung keluar dari loop for, melewati semua iterasi yang tersisa. Ini berguna ketika kamu sudah menemukan apa yang kamu cari dan tidak perlu melanjutkan pencarian.

Berikut contoh yang mencari sebuah karakter tertentu:

python
# Cari huruf vokal pertama dalam sebuah string
text = "Python"
found_vowel = False
 
for char in text:
    if char.lower() in "aeiou":
        print(f"First vowel found: {char}")
        found_vowel = True
        break  # Berhenti mencari setelah menemukan huruf vokal pertama
 
if not found_vowel:
    print("No vowels found")

Output:

First vowel found: o

Tanpa break, loop akan terus memeriksa semua karakter yang tersisa bahkan setelah menemukan huruf vokal pertama. Pernyataan break membuat kode lebih efisien dengan berhenti segera setelah tugas selesai.

Berikut contoh praktis yang memvalidasi input pengguna dengan mengecek karakter yang tidak valid:

python
# Periksa apakah username hanya berisi karakter yang diizinkan
username = "alice_123"
allowed = "abcdefghijklmnopqrstuvwxyz0123456789_"
is_valid = True
 
for char in username:
    if char.lower() not in allowed:
        print(f"Invalid character found: '{char}'")
        is_valid = False
        break  # Tidak perlu mengecek lebih jauh
 
if is_valid:
    print(f"Username '{username}' is valid ✓")
else:
    print(f"Username '{username}' is invalid ✗")

Output:

Username 'alice_123' is valid ✓

Loop mengecek setiap karakter terhadap himpunan karakter yang diizinkan. Jika menemukan karakter yang tidak valid, loop melaporkan masalah dan langsung keluar dari loop—tidak ada gunanya mengecek sisa username setelah kita tahu itu tidak valid.

12.4.2) Pernyataan continue dalam Loop for

Pernyataan continue melewati sisa bagian dari iterasi saat ini dan berpindah ke item berikutnya dalam sequence. Ini berguna ketika kamu ingin melewati item tertentu tanpa keluar dari loop sepenuhnya.

Berikut contoh yang hanya memproses karakter tertentu:

python
# Cetak hanya konsonan dari sebuah string
word = "Programming"
 
for letter in word:
    if letter.lower() in "aeiou":
        continue  # Lewati vokal
    print(letter, end="")
print()  # Baris baru di akhir

Output:

Prgrmmng

Ketika loop menemukan huruf vokal, continue melewati pernyataan print() dan pindah ke karakter berikutnya. Hanya konsonan yang mencapai pernyataan print.

Berikut contoh yang lebih praktis yang menghitung statistik sambil melewati data yang tidak valid. Perhatikan bahwa metode .split() (dari Bab 6) mengembalikan sebuah list string, yang akan kita pelajari di Bab 14. Untuk sekarang, cukup tahu bahwa loop for dapat mengiterasi hasilnya:

python
# Hitung rata-rata nilai tes yang valid (0-100)
# Metode .split() mengembalikan sebuah list string (Bab 14)
scores_input = "85 92 -5 78 105 90 88"
valid_scores = 0
total = 0
 
for score_str in scores_input.split():
    score = int(score_str)
    
    if score < 0 or score > 100:
        print(f"Skipping invalid score: {score}")
        continue  # Lewati skor ini
    
    valid_scores += 1
    total += score
 
if valid_scores > 0:
    average = total / valid_scores
    print(f"Average of {valid_scores} valid scores: {average:.1f}")
else:
    print("No valid scores to average")

Output:

Skipping invalid score: -5
Skipping invalid score: 105
Average of 5 valid scores: 86.6

Loop memproses setiap string skor. Ketika menemukan skor yang tidak valid (negatif atau di atas 100), loop mencetak peringatan dan memakai continue untuk melewati penambahan skor tersebut ke total. Ini memungkinkan loop memproses semua skor yang valid sambil mengabaikan yang tidak valid.

12.4.3) Kapan Menggunakan break dan continue

Gunakan break ketika:

  • Kamu sedang mencari sesuatu dan ingin berhenti begitu menemukannya
  • Kamu menemui kondisi error yang membuat melanjutkan jadi tidak ada gunanya
  • Kamu sudah menyelesaikan tugas dan tidak perlu memproses item yang tersisa

Gunakan continue ketika:

  • Kamu ingin melewati item tertentu berdasarkan sebuah kondisi
  • Kamu sedang memfilter data dan ingin memproses hanya item yang memenuhi kriteria
  • Kamu ingin menghindari pernyataan if yang bersarang dalam dengan menangani kasus khusus lebih awal

Baik break maupun continue dapat membuat kode kamu lebih jelas dengan menunjukkan secara eksplisit kapan dan kenapa kamu mengubah alur iterasi yang normal. Namun, terlalu sering memakainya bisa membuat kode lebih sulit diikuti—gunakan ketika itu benar-benar meningkatkan kejelasan.

12.5) Menggunakan else dengan Loop for

12.5.1) Pola for-else

Loop for Python mendukung klausa opsional else yang dieksekusi setelah loop selesai secara normal—yaitu ketika loop selesai mengiterasi semua item tanpa menemui pernyataan break. Ini mungkin terasa aneh pada awalnya (kenapa "else" kalau tidak ada "if"?), tetapi berguna untuk membedakan antara "menemukan apa yang saya cari" dan "sudah mencari semuanya dan tidak menemukan."

Berikut struktur dasarnya:

python
for item in sequence:
    # Isi loop
    if some_condition:
        break
else:
    # Ini hanya berjalan jika loop selesai tanpa break
    print("Loop completed normally")

Blok else berjalan jika dan hanya jika loop keluar secara alami karena sequence habis. Jika pernyataan break mengakhiri loop lebih awal, blok else dilewati.

Mari lihat contoh praktis yang mencari nilai tertentu. Metode .split() (dari Bab 6) mengembalikan sebuah list string, yang akan kita pelajari di Bab 14:

python
# Cari sebuah angka target
numbers = "2 4 6 8 10"
target = 7
 
for num_str in numbers.split():
    num = int(num_str)
    if num == target:
        print(f"Found {target}!")
        break
else:
    print(f"{target} not found in the sequence")

Output:

7 not found in the sequence

Loop mencari di seluruh angka. Karena tidak pernah menemukan 7, loop selesai normal dan blok else dieksekusi. Sekarang mari cari angka yang memang ada:

python
# Cari sebuah angka target yang ada
numbers = "2 4 6 8 10"
target = 6
 
for num_str in numbers.split():
    num = int(num_str)
    if num == target:
        print(f"Found {target}!")
        break
else:
    print(f"{target} not found in the sequence")

Output:

Found 6!

Kali ini, ketika loop menemukan 6, loop mengeksekusi break, yang melewati blok else sepenuhnya. Pola ini menangani kasus "ditemukan" dan "tidak ditemukan" secara elegan tanpa perlu variabel flag terpisah.

12.5.2) Kegunaan Praktis for-else

Pola for-else sangat berguna untuk operasi pencarian. Berikut contoh yang memvalidasi apakah sebuah string hanya berisi digit:

python
# Periksa apakah sebuah string adalah bilangan bulat yang valid
user_input = "12345"
 
for char in user_input:
    if not char.isdigit():
        print(f"Invalid: '{char}' is not a digit")
        break
else:
    print(f"'{user_input}' is a valid integer")

Output:

'12345' is a valid integer

Jika input berisi karakter non-digit apa pun, loop akan break dan blok else tidak berjalan. Jika semua karakter adalah digit, loop selesai normal dan blok else mengonfirmasi validitas.

Mari uji dengan input yang tidak valid:

python
# Periksa apakah sebuah string adalah bilangan bulat yang valid (kasus tidak valid)
user_input = "123a5"
 
for char in user_input:
    if not char.isdigit():
        print(f"Invalid: '{char}' is not a digit")
        break
else:
    print(f"'{user_input}' is a valid integer")

Output:

Invalid: 'a' is not a digit

12.5.3) Membandingkan for-else dengan Variabel Flag

Sebelum belajar tentang for-else, kamu mungkin menggunakan variabel flag untuk melacak apakah sesuatu ditemukan:

python
# Menggunakan variabel flag (pendekatan tradisional)
text = "Python"
found_vowel = False
 
for char in text:
    if char.lower() in "aeiou":
        print(f"Found vowel: {char}")
        found_vowel = True
        break
 
if not found_vowel:
    print("No vowels found")

Output:

Found vowel: o

Pola for-else menghilangkan kebutuhan variabel flag:

python
# Menggunakan for-else (lebih Pythonic)
text = "Python"
 
for char in text:
    if char.lower() in "aeiou":
        print(f"Found vowel: {char}")
        break
else:
    print("No vowels found")

Output:

Found vowel: o

Keduanya bekerja dengan benar, tetapi versi for-else lebih ringkas dan mengekspresikan maksudnya dengan jelas: "cari sesuatu, dan kalau tidak ketemu, lakukan ini." Klausa else secara langsung merepresentasikan kasus "tidak ditemukan."

12.6) Memilih Antara Loop for dan while

12.6.1) Kapan Menggunakan Loop for

Gunakan loop for ketika:

1. Kamu memproses setiap item dalam sebuah koleksi:

python
# Memproses setiap karakter dalam sebuah string
message = "Hello"
for char in message:
    print(char.upper())

Output:

H
E
L
L
O

2. Kamu perlu mengulang sebuah aksi sejumlah kali tertentu:

python
# Cetak garis batas
for i in range(40):
    print("-", end="")
print()

Output:

----------------------------------------

3. Kamu mengiterasi sebuah range numerik:

python
# Hitung faktorial dari 5
factorial = 1
for n in range(1, 6):
    factorial *= n
print(f"5! = {factorial}")

Output:

5! = 120

4. Kamu tahu sejak awal apa yang kamu iterasi:

python
# Proses sequence nilai yang sudah diketahui
grades = "A B C D F"
for grade in grades.split():
    print(f"Grade: {grade}")

Output:

Grade: A
Grade: B
Grade: C
Grade: D
Grade: F

Ciri utama loop for adalah mereka bekerja dengan iterasi definit (definite iteration)—kamu tahu sequence apa yang kamu iterasi, meskipun kamu tidak tahu sejak awal berapa banyak item yang dimilikinya.

12.6.2) Kapan Menggunakan Loop while

Gunakan loop while ketika:

1. Kamu mengulang sampai sebuah kondisi berubah:

python
# Terus bertanya sampai input valid diterima
while True:
    age_input = input("Enter your age: ")
    if age_input.isdigit():
        age = int(age_input)
        if age > 0:
            print(f"Age recorded: {age}")
            break
    print("Please enter a valid positive number")

2. Kamu tidak tahu berapa iterasi yang dibutuhkan:

python
# Hitung berapa kali kamu bisa menggandakan sebuah angka sebelum melewati 1000
number = 1
count = 0
while number <= 1000:
    number *= 2
    count += 1
print(f"Doubled {count} times to reach {number}")

Output:

Doubled 10 times to reach 1024

3. Iterasi bergantung pada kondisi yang kompleks:

python
# Simulasikan game sederhana di mana health pemain berkurang
health = 100
turn = 0
 
while health > 0 and turn < 10:
    damage = 15
    health -= damage
    turn += 1
    print(f"Turn {turn}: Health = {health}")
 
if health <= 0:
    print("Game over!")
else:
    print("Survived 10 turns!")

Output:

Turn 1: Health = 85
Turn 2: Health = 70
Turn 3: Health = 55
Turn 4: Health = 40
Turn 5: Health = 25
Turn 6: Health = 10
Turn 7: Health = -5
Game over!

4. Kamu butuh kontrol lebih atas logika iterasi:

python
# Proses sebuah string tetapi lewati duplikasi berurutan
text = "bookkeeper"
index = 0
 
while index < len(text):
    char = text[index]
    print(char, end="")
    
    # Lewati karakter identik yang berurutan
    while index < len(text) and text[index] == char:
        index += 1
 
print()

Output:

bokeper

Ciri utama loop while adalah iterasi indefinit (indefinite iteration)—kamu terus berjalan sampai sebuah kondisi menjadi False, tetapi kamu mungkin tidak tahu sejak awal kapan itu akan terjadi.

12.6.3) Mengonversi Antara for dan while

Banyak masalah bisa diselesaikan dengan kedua jenis loop. Berikut tugas yang sama diimplementasikan dengan dua cara:

python
# Menggunakan loop for: Jumlahkan angka dari 1 sampai 10
total = 0
for number in range(1, 11):
    total += number
print(f"Sum (for loop): {total}")
 
# Menggunakan loop while: Jumlahkan angka dari 1 sampai 10
total = 0
number = 1
while number <= 10:
    total += number
    number += 1
print(f"Sum (while loop): {total}")

Output:

Sum (for loop): 55
Sum (while loop): 55

Keduanya menghasilkan hasil yang sama, tetapi loop for lebih ringkas dan lebih kecil risikonya terjadi kesalahan—tidak ada risiko lupa menaikkan counter. Ketika kamu bisa memakai salah satu, utamakan loop for.

Namun, beberapa masalah lebih alami diekspresikan dengan while:

python
# Temukan pangkat 2 pertama yang lebih besar dari 1000
power = 1
exponent = 0
 
while power <= 1000:
    exponent += 1
    power = 2 ** exponent
 
print(f"2^{exponent} = {power} (first power of 2 > 1000)")

Output:

2^10 = 1024 (first power of 2 > 1000)

Masalah ini tidak cocok secara alami ke dalam loop for karena kita tidak tahu sejak awal berapa iterasi yang dibutuhkan—kita sedang mencari nilai yang memenuhi suatu kondisi.


Di bab ini, kita mengeksplorasi loop for Python, yang memberikan cara yang rapi dan kuat untuk mengiterasi sequence. Kita belajar bagaimana range() menghasilkan sequence numerik untuk operasi penghitungan, bagaimana mengontrol alur loop dengan break dan continue, serta bagaimana pola for-else menangani operasi pencarian dengan elegan. Kita juga meninjau kapan sebaiknya memilih loop for dibanding loop while berdasarkan sifat tugas iterasi kamu.

Loop for adalah salah satu fitur Python yang paling sering digunakan. Seiring kamu terus belajar Python, kamu akan memakai loop for terus-menerus—memproses data dari file, bekerja dengan list dan dictionary, serta mentransformasikan koleksi informasi. Di bab berikutnya, kita akan mengeksplorasi pernyataan match Python, yang menyediakan cara lain untuk membuat keputusan berdasarkan nilai, menawarkan alternatif yang lebih terstruktur daripada rantai if-elif yang panjang untuk jenis masalah tertentu.

© 2025. Primesoft Co., Ltd.
support@primesoft.ai