Loop Control Statements
Python menyediakan beberapa statement untuk mengubah alur loop. Statement ini dapat menghentikan loop, melompat ke iterasi berikutnya, atau menjalankan tindakan setelah loop selesai tanpa dihentikan.
Pernyataan untuk Mengatur Loop
Statement break langsung keluar dari loop terdekat ketika suatu kondisi terpenuhi. Eksekusi kemudian berlanjut ke statement pertama setelah loop tersebut.
# Mencari angka yang dapat dibagi 15 dan 25
x = 0
while True:
x += 1
if not (x % 15 or x % 25):
break
print(x, 'dapat dibagi 15 dan 25')
# Output: 75 dapat dibagi 15 dan 25Statement continue melewati sisa kode dalam iterasi saat ini dan melanjutkan ke iterasi berikutnya. break menghentikan seluruh loop.
# Mencetak hanya angka genap
for i in range(1, 11):
if i % 2:
continue
print(i, 'adalah genap.')
# Output:
# 2 adalah genap.
# 4 adalah genap.
# 6 adalah genap.
# 8 adalah genap.
# 10 adalah genap.Statement pass tidak menjalankan tindakan apa pun. Gunakan pass sebagai placeholder agar blok kosong tetap valid sebelum isinya ditulis.
# pass tidak melakukan tindakan apa pun. Iterasi tetap dilanjutkan
for i in range(1, 11):
if i == 6:
pass # Tidak melakukan apa-apa untuk angka 6
if not i % 3:
print(i, 'dapat dibagi 3')
# Output:
# 3 dapat dibagi 3
# 6 dapat dibagi 3
# 9 dapat dibagi 3Blok else berjalan jika loop selesai tanpa mengeksekusi break. Dalam loop pencarian, tangani hasil yang ditemukan sebelum break, lalu tangani kasus "tidak ditemukan" di dalam else.
# Mencari angka negatif dalam list
numbers = [0, 4, 2, 5]
for i in numbers:
if i < 0:
break
else:
print('tidak ada angka negatif dalam list')
# Output: tidak ada angka negatif dalam listFungsi Enumerate
Gunakan enumerate() ketika iterasi membutuhkan pencacah sekaligus nilai setiap elemen. Fungsi ini mengembalikan iterator yang menghasilkan tuple (indeks, nilai).
# Menggunakan enumerate untuk mendapatkan indeks dan nilai
fruits = ['apple', 'banana', 'mango', 'melon']
for i, fruit in enumerate(fruits):
print(i, ':', fruit)
# Output:
# 0 : apple
# 1 : banana
# 2 : mango
# 3 : melonSecara default, enumerate() mulai menghitung dari , tetapi kamu dapat mengatur nilai awal dengan parameter kedua.
# Mengatur indeks awal enumerate
fruits = ['apple', 'banana', 'mango', 'melon']
for i, fruit in enumerate(fruits, 5):
print(i, ':', fruit)
# Output:
# 5 : apple
# 6 : banana
# 7 : mango
# 8 : melonPada for i, fruit in enumerate(fruits), tuple unpacking memisahkan setiap pasangan hasil enumerate(). Indeks disimpan dalam i, sedangkan nama buah disimpan dalam fruit.
While Loop
while loop mengeksekusi blok selama kondisi while bernilai truthy. for loop mengambil item dari iterable satu per satu, sedangkan while mengulang berdasarkan kondisi yang biasanya diperbarui oleh isi blok.
# Contoh while loop dengan perhitungan matematika
z = 1
while abs(z) < 100:
z = z**2 + 1
print(z)
# Output: 677while loop cocok untuk pengulangan berbasis kondisi, tetapi isi bloknya harus mengubah kondisi atau keluar secara eksplisit. Jika tidak, loop dapat berjalan selamanya.
Fungsi Zip
Fungsi zip() memasangkan elemen yang posisinya sama dari beberapa iterable. Iterasi berhenti ketika iterable terpendek kehabisan elemen, sehingga jumlah pasangan sama dengan panjang iterable terpendek.
Penggunaan Dasar Zip
# Menggabungkan dua list dengan zip
p = [1, 2, 3, 4]
q = ['a', 'b', 'c', 'd']
for pair in zip(p, q):
print(pair)
# Output:
# (1, 'a')
# (2, 'b')
# (3, 'c')
# (4, 'd')Fungsi zip() mengembalikan iterator berisi tuple. Setiap tuple memuat elemen yang bersesuaian dari setiap input. Secara default, iterasi berhenti ketika iterable terpendek habis, sehingga elemen yang tersisa pada input lebih panjang tidak masuk ke hasil. Gunakan zip(..., strict=True) untuk memunculkan error ketika panjang input berbeda.
Mengonversi Hasil Zip
Kamu bisa membaca pasangan dari iterator zip() langsung lewat loop. Ubah iterator menjadi list atau tuple jika pasangan tersebut perlu disimpan untuk digunakan ulang.
# Mengonversi hasil zip menjadi list atau tuple
p = [1, 2, 3, 4]
q = ['a', 'b', 'c', 'd']
zipped = zip(p, q)
print(list(zipped)) # Mengonversi ke list
# Output: [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]
# Zip object sudah dikonsumsi, buat yang baru
zipped_new = zip(p, q)
print(tuple(zipped_new)) # Mengonversi ke tuple
# Output: ((1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'))Unzipping dengan Operator Asterisk
Unpacking operator * memisahkan kumpulan pasangan yang tidak kosong. Pada zip(*pairs), semua nilai pertama dikumpulkan bersama, begitu pula semua nilai kedua.
# Memisahkan kembali data yang sudah di-zip
pairs = [(1, 'a'), (2, 'b'), (3, 'd')]
numbers, letters = zip(*pairs)
print(numbers, letters)
# Output: (1, 2, 3) ('a', 'b', 'd')Proses ini disebut "unzipping" karena memisahkan kembali data yang telah digabungkan.
Range dan For Loop
Fungsi range() menghasilkan urutan bilangan bulat untuk iterasi. Gunakan fungsi ini jika loop memerlukan posisi numerik atau jumlah iterasi yang tetap. Karena range menghasilkan setiap nilai saat dibutuhkan, bukan menyimpan seluruh urutan sekaligus, pemakaian memorinya tetap kecil meskipun loop berjalan jutaan kali.
Sintaks Range
# Berbagai cara menggunakan range
# range(stop) - dari 0 sampai stop-1
for i in range(4):
print(i)
# Output:
# 0
# 1
# 2
# 3
print()
# range(start, stop) - dari start sampai stop-1
for i in range(2, 6):
print(i)
# Output:
# 2
# 3
# 4
# 5
print()
# range(start, stop, step) - dengan langkah tertentu
for i in range(8, 4, -1):
print(i)
# Output:
# 8
# 7
# 6
# 5Range mengikuti pola aritmetika. Elemen ke-i adalah start + i * step untuk setiap i dari sampai n-1.
Efisiensi Range vs List
range menyimpan nilai start, stop, dan step secara ringkas tanpa membuat seluruh bilangan menjadi list. Nilai dihitung saat diminta, sehingga penggunaan memorinya tidak bertambah mengikuti banyaknya bilangan yang direpresentasikan.
# Perbandingan efisiensi range vs list
n = 10000
k = 10
# Membuat seluruh bilangan di memori
index = list(range(n))
for i in index:
if i < k:
print(i)
else:
break
# Menggunakan range tanpa membuat list
for i in range(n): # Tidak menyimpan semua angka di memori
if i < k:
print(i)
else:
breakConditional Statements
Conditional statement membuat program memilih cabang berdasarkan kondisi yang dievaluasi. Indentasi adalah bagian dari sintaks Python. Gunakan empat spasi per tingkat dan jangan mencampur tab dengan spasi dalam satu blok.
Percabangan dengan Beberapa Kondisi
# Struktur lengkap if/elif/else
age = 20
if age <= 5:
print("masuk gratis")
elif age <= 14:
print("15.00 EUR")
elif age <= 65:
print("30.00 EUR")
else:
print("20.00 EUR")
# Output: 30.00 EURKondisi tidak memerlukan tanda kurung, sedangkan titik dua setelah setiap kepala cabang wajib ada. Setiap statement dalam satu blok harus memakai tingkat indentasi yang konsisten.
Nested If
# Menentukan kuadran dari koordinat titik
x = (-1, -3)
if x[0] == 0 or x[1] == 0:
print('pada sumbu koordinat')
elif x[0] > 0:
if x[1] > 0:
print('kuadran pertama')
else:
print('kuadran keempat')
elif x[1] > 0:
print('kuadran kedua')
else:
print('kuadran ketiga')
# Output: kuadran ketigaGunakan percabangan bertingkat ketika pilihan cabang menentukan kondisi berikutnya yang perlu diperiksa. Pemeriksaan koordinat nol di awal mencegah titik pada sumbu disebut berada di kuadran.
Sintaks For Loop
for loop mengunjungi setiap elemen dalam iterable, seperti list, tuple, string, atau range.
# Contoh iterasi list
fruit_list = ['apple', 'banana', 'mango']
for fruit in fruit_list:
print(fruit)
# Output:
# apple
# banana
# mango
# Contoh iterasi string
text = 'hi'
for char in text:
print(char)
# Output:
# h
# iIterable menyediakan nilai satu per satu, tetapi tidak selalu terurut, memiliki indeks, dapat digunakan ulang, atau berhingga. for loop meminta nilai berikutnya dari iterator. Dalam kepala for, in menghubungkan target iterasi dengan iterable. Dalam ekspresi seperti 3 in [1, 3], in menguji keanggotaan.