2.12. Loop¶
Sebuah loop menjalankan blok kode yang sama berulang kali. Python memiliki dua bentuk: while, yang terus berjalan selama kondisi tetap benar, dan for, yang menelusuri item dari suatu urutan.
while terus menguji kondisi; for menelusuri urutan sampai habis.¶
2.12.1. Loop while¶
Loop while menguji kondisinya sebelum setiap iterasi dan menjalankan tubuh hingga pengujian menjadi salah:
count = 0
while count < 5:
print(count)
count += 1
Output:
0
1
2
3
4
Jika kondisi benar pada awal dan tidak pernah menjadi salah, loop berjalan selamanya. while True: adalah idiom standar untuk loop utama, keluar secara eksplisit dengan break:
while True:
step()
if done():
break
2.12.2. Loop for¶
Loop for menelusuri item dari iterable -- sebuah list, tuple, string, bytes, dict, atau apa pun yang mendukung iterasi:
for fruit in ["apple", "banana", "cherry"]:
print(fruit)
Output:
apple
banana
cherry
Bentuk yang sama bekerja pada string, di mana setiap item adalah string satu karakter:
for letter in "OpenMV":
print(letter)
Output:
O
p
e
n
M
V
Mengiterasi dict secara langsung menghasilkan kunci-kuncinya, dalam urutan penyisipan:
for key in {"a": 1, "b": 2}:
print(key)
Output:
a
b
Setiap kali loop berjalan, variabel loop (fruit, letter, key) diikat ke item berikutnya. Setelah loop berakhir, variabel menyimpan nilai dari iterasi terakhir.
2.12.3. range¶
Untuk loop atas rentang numerik, gunakan range():
range(stop)-- 0, 1, ..., stop - 1.range(start, stop)-- start, start + 1, ..., stop - 1.range(start, stop, step)-- dengan langkah kustom (nilai negatif menghitung mundur).
for i in range(5): # 0, 1, 2, 3, 4
print(i)
for i in range(2, 8, 2): # 2, 4, 6
print(i)
for i in range(10, 0, -1): # 10, 9, ..., 1
print(i)
range() menghasilkan nilai secara malas -- tidak membangun daftar di memori. Untuk mendapatkan list yang sebenarnya, bungkus: list(range(10)).
2.12.4. enumerate¶
Ketika loop membutuhkan indeks dan item, enumerate() menghasilkan pasangan (index, item):
for i, name in enumerate(["a", "b", "c"]):
print(i, name)
# 0 a
# 1 b
# 2 c
Mulai indeks dari sesuatu selain nol dengan memberikan argumen kedua: enumerate(items, start=1).
2.12.5. zip¶
Untuk menelusuri dua (atau lebih) iterable secara bersamaan, gunakan zip(). Fungsi ini menghasilkan satu tuple per posisi dan berhenti pada input terpendek:
names = ["alice", "bob", "carol"]
scores = [88, 92, 70]
for name, score in zip(names, scores):
print(name, score)
Output:
alice 88
bob 92
carol 70
2.12.6. Penugasan inline dengan :=¶
Operator walrus := adalah penugasan yang juga merupakan ekspresi. Ia mengikat nama dan mengevaluasi ke nilai yang sama pada saat yang bersamaan. Dalam loop while, ini menyederhanakan pola umum "baca, periksa, tubuh" menjadi satu baris:
# without walrus
value = next_value()
while value is not None:
process(value)
value = next_value()
# with walrus
while (value := next_value()) is not None:
process(value)
Kedua bentuk melakukan hal yang sama. Gunakan := ketika duplikasi penugasan benar-benar mengganggu keterbacaan; jangan gunakan hanya untuk terlihat pintar. Tanda kurung diperlukan di sebagian besar posisi agar ekspresi tidak ambigu.