Python merupakan bahasa pemrograman yang dinilai sudah mature, sehingga fitur seperti struktur kontrol juga sudah tersedia dengan sangat baik. Namun demikian, penggunaannya terkadang dinilai sulit secara logika. Oleh sebab itu, pada bagian ini kita akan membahas mengenai bagaimana mengontrol alur program di Python.
Struktur kontrol bekerja berdasarkan ekspresi boolean (bernilai True atau False). Di Python, operator perbandingan dan logika yang tersedia untuk menilai apakah suatu keadaan True atau False, yaitu:
==, !=, <, <=, >, >=in, not inis, is not (bandingkan identitas/objek, bukan nilai)and, or, notContoh:
x = 10
print(x > 7) # True
print(3 in [1, 2, 3]) # True
print(x is 10) # ⚠️ Jangan gunakan 'is' untuk angka/teks: gunakan '=='
Kaidah short-circuit:
Bagaimana perintah and dan or bekerja berdasarkan kaidah short-circuit? Berikut penjelasannya.
A and B hanya mengevaluasi B jika A bernilai True.A or B hanya mengevaluasi B jika A bernilai False.Kaidah ini berguna untuk mencegah error atau komputasi intensif yang tidak perlu.
Hukum De Morgan (logika), sering dipakai saat membalik kondisi:
\[ \neg(A \land B) \equiv (\neg A) \lor (\neg B),\quad \neg(A \lor B) \equiv (\neg A) \land (\neg B)\]
Keterangan:
andorDalam Python, kita bisa gunakan seperti ini:
not (A and B) == (not A) or (not B)
not (A or B) == (not A) and (not B)
Truthy dan Falsy
Beberapa nilai dianggap False saat dikonversi ke bool: 0, 0.0, '' (string kosong), [], {}, set(), None, serta objek kustom dengan __bool__/__len__ mengembalikan 0/False. Selain nilai-nilai tersebut, umumnya akan dianggap True.
if []: # list kosong -> Falsy
print('terisi')
else:
print('kosong')
if, elif, elseStruktur dasar:
if kondisi1:
# blok jika kondisi1 True
elif kondisi2:
# blok jika kondisi1 False dan kondisi2 True
else:
# blok jika semua kondisi di atas False
Indentasi (spasi/indent) sangat penting, bahkan Python menggunakan indentasi untuk menandai blok, sehingga identasi yang salah dapat membuat kode Python error.
Contoh lengkap:
nilai = 82
if nilai >= 85:
predikat = 'A'
elif nilai >= 70:
predikat = 'B'
elif nilai >= 55:
predikat = 'C'
else:
predikat = 'D'
print(predikat)
Singkat untuk memilih nilai berbasis kondisi tertentu. Cek kode berikut:
umur = 19
status = 'dewasa' if umur >= 18 else 'anak'
and/orCek kode berikut ini:
usia = 22
punya_ktp = True
boleh_menyetir = usia >= 17 and punya_ktp
Meskipun bukan pola yang umum, namun saat ini banyak developer Python yang awalnya menulis if kondisi == True:, menjadi cukup if kondisi:. Kode tersebut tetap akan memeriksa nilai variabel kondisi apakah berisi True.
match–case (untuk Python ≥ 3.10)Metode ini mirip dengan switch, namun jauh lebih powerful, bisa mencocokkan pola struktur data. Cek kode berikut ini.
kode = ('MOVE', 10, 5)
match kode:
case ('MOVE', x, y):
print(f'pindah ke ({x}, {y})')
case ('DRAW', x, y):
print(f'gambar di ({x}, {y})')
case _:
print('perintah tidak dikenal')
Kita juga bisa menambahkan guard sebagai syarat tambahan pada pola, contohnya:
match ('SCALE', 3):
case ('SCALE', k) if k > 1:
print('perbesar')
case ('SCALE', k):
print('perKecil atau tetap')
forPerulangan dengan for mengiterasi variabel yang iterable (list, tuple, string, file, range, generator, dsb.) sampai semua variabel selesai diinterasi atau ada kondisi tetentu yang mengubah proses iterasi.
Contoh iterasi dasar dengan for.
buah = ['apel', 'mangga', 'pisang']
for item in buah:
print(item)
range()Kita juga bisa menggunakan metode range(), seperti:
for i in range(5): # 0..4
print(i)
for i in range(2, 10, 2): # 2,4,6,8
print(i)
enumerate() — indeks + nilaiMetode enumerate() juga sering digunakan. Berikut contohnya:
for i, kata in enumerate(['a', 'b', 'c'], start=1):
print(i, kata)
zip() — menggabung beberapa iterableJika terdapat lebih dari satu iterasi, kita bisa menggunakan metode zip(). Berikut contohnya:
nama = ['Ana', 'Budi']
umur = [20, 22]
for n, u in zip(nama, umur):
print(f"{n} berumur {u}")
skor = {'Ana': 88, 'Budi': 75}
for k, v in skor.items():
print(k, '->', v)
whileMetode while akan terus mengulangi iterasi selama kondisinya True. Contohnya:
n = 3
while n > 0:
print(n)
n -= 1
print('Selesai')
Harus diingat, kita harus memastikan bahwa kondisi yang diperiksa oleh perulangan dengan while berubah agar tidak terjadi infinite loop.
Dalam metode perulangan while, pola *sentinel loop*** (berhenti saat input tertentu) juga sering digunakan, seperti:
while True:
teks = input('Ketik sesuatu (q untuk keluar): ')
if teks.lower() == 'q':
break
print('Anda mengetik:', teks)
break — keluar dari loop saat itu jugacontinue — lompat ke iterasi berikutnyapass — tidak melakukan apa-apa (placeholder)else pada suatu loop hanya akan dieksekusi jika loop selesai tanpa breakContoh else pada loop untuk mencari bilangan prima sederhana:
n = 29
for d in range(2, int(n**0.5) + 1):
if n % d == 0:
print(n, 'bukan prima')
break
else:
print(n, 'adalah prima')
Contoh list comprehension.
angka = [1, 2, 3, 4]
kuadrat = [x**2 for x in angka]
kuadrat_genap = [x**2 for x in angka if x % 2 == 0]
Contoh untuk tipe data dict dan set.
# dict: peta x -> x^2
peta = {x: x**2 for x in range(5)}
# set: himpunan kuadrat unik
unik = {x**2 for x in [1, 2, 2, 3]}
Catatan: Jika logika terlalu kompleks atau bersarang, lebih baik gunakan
forbiasa demi keterbacaan.
Yaitu hanya menghitung saat nilai diiterasi, seperti:
gen = (x**2 for x in range(10**6))
# nilai dihitung saat diiterasi
jumlah = sum(gen)
Meskipun bukan struktur kontrol klasik, penanganan pengecualian seringkali digunakan untuk mengendalikan alur program. Berikut contohnya.
teks = '42'
try:
angka = int(teks)
except ValueError:
angka = 0
else:
print('konversi sukses')
finally:
print('selesai mencoba')
Gunakan exception dengan kode except untuk kasus yang luar biasa atau jarang terjadi, bukan sebagai pengganti if pada alur normal.
Untuk mengklasifikasi nilai dengan validasi input, kita bisa lakukan dengan:
def klasifikasi_nilai(n):
if not (0 <= n <= 100):
return 'nilai tidak valid'
if n >= 85:
return 'A'
elif n >= 70:
return 'B'
elif n >= 55:
return 'C'
else:
return 'D'
contoh = [95, 82, -3, 60]
for n in contoh:
print(n, '->', klasifikasi_nilai(n))
Penjelasan: if not (0 <= n <= 100) memanfaatkan chained comparison padd Python dan logika not (¬, negasi) untuk menolak nilai di luar rentang.
if dan comprehensionContoh dengan FizzBuzz klasik.
for i in range(1, 21):
if i % 15 == 0:
print('FizzBuzz')
elif i % 3 == 0:
print('Fizz')
elif i % 5 == 0:
print('Buzz')
else:
print(i)
Versi list comprehension yang menghasilkan list string:
hasil = [
'FizzBuzz' if i % 15 == 0 else
'Fizz' if i % 3 == 0 else
'Buzz' if i % 5 == 0 else
str(i)
for i in range(1, 21)
]
Pattern matching merupakan suatu metode match-case dengna menggunakan list sebagai inputnya. Contoh penggunaan metode pattern matching
def jalankan_perintah(cmd):
match cmd.split():
case ['tambah', a, b]:
return float(a) + float(b)
case ['kali', a, b]:
return float(a) * float(b)
case ['bagi', a, b] if float(b) != 0:
return float(a) / float(b)
case _:
return 'Perintah tidak dikenali'
print(jalankan_perintah('tambah 2 3'))
print(jalankan_perintah('bagi 10 0'))
Untuk mencari suatu nilai pada suatu variabel, kita bisa menggunakan metode for-else, seperti:
data = ['id001', 'id007', 'id042']
cari = 'id007'
for item in data:
if item == cari:
print('ketemu')
break
else:
print('tidak ketemu')
if/elif/else untuk percabangan, match–case untuk pencocokan pola.for untuk iterasi atas koleksi; while untuk kondisi berulang.break, continue, pass, dan else pada loop.