Seri bahasa pemrograman Python: #4 Struktur Kontrol

Seri bahasa pemrograman Python: #4 Struktur Kontrol

FOSS Python Struktur Kontrol Iterasi Loop Percabangan

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.

1. Konsep dasar: nilai logika dan ekspresi boolean

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:

  • Perbandingan: ==, !=, <, <=, >, >=
  • Keanggotaan: in, not in
  • Identitas objek: is, is not (bandingkan identitas/objek, bukan nilai)
  • Logika: and, or, not

Contoh:

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:

  • \(\neg \to\) simbol logika negasi atau kebalikan
  • \(\land \to\) simbol logika and
  • \(\lor \to\) simbol logika or
  • \(\equiv \to\) simbol ekivalen

Dalam 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')

2. Percabangan dengan if, elif, else

Struktur 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)
2.1 Ekspresi kondisional (ternary)

Singkat untuk memilih nilai berbasis kondisi tertentu. Cek kode berikut:

umur = 19
status = 'dewasa' if umur >= 18 else 'anak'
2.2 Menggabung kondisi dengan and/or

Cek 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.


3. Pattern Matching: matchcase (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')

4. Perulangan for

Perulangan 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.

4.1 Dasar

Contoh iterasi dasar dengan for.

buah = ['apel', 'mangga', 'pisang']
for item in buah:
    print(item)
4.2 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)
4.3 enumerate() — indeks + nilai

Metode enumerate() juga sering digunakan. Berikut contohnya:

for i, kata in enumerate(['a', 'b', 'c'], start=1):
    print(i, kata)
4.4 zip() — menggabung beberapa iterable

Jika 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}")
4.5 Iterasi kamus (dict)
skor = {'Ana': 88, 'Budi': 75}
for k, v in skor.items():
    print(k, '->', v)

5. Perulangan while

Metode 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)

6. Mengendalikan alur di dalam loop

  • break — keluar dari loop saat itu juga
  • continue — lompat ke iterasi berikutnya
  • pass — tidak melakukan apa-apa (placeholder)
  • else pada suatu loop hanya akan dieksekusi jika loop selesai tanpa break

Contoh 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')

7. Comprehension: cara ringkas membuat koleksi

7.1 List comprehension

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]
7.2 Dict & Set comprehension

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 for biasa demi keterbacaan.

7.3 Generator ekpresi

Yaitu hanya menghitung saat nilai diiterasi, seperti:

gen = (x**2 for x in range(10**6))
# nilai dihitung saat diiterasi
jumlah = sum(gen)

8. Exception sebagai alur kontrol (singkat)

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.


9. Contoh program

9.1 Klasifikasi nilai dengan validasi input

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.

9.2 FizzBuzz (klasik) dengan if dan comprehension

Contoh 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)
]
9.3 Pattern matching

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'))
9.4 Loop–else untuk pencarian

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')

10. Ringkasan

  • Gunakan if/elif/else untuk percabangan, match–case untuk pencocokan pola.
  • Gunakan for untuk iterasi atas koleksi; while untuk kondisi berulang.
  • Kendalikan alur dengan break, continue, pass, dan else pada loop.
  • Metode comprehension digunakan untuk memadatkan pembuatan koleksi; gunakan dengna baik dan seperlunya, dikarenakan terkadang membuat program cenderung kompleks.
  • Pahami truthiness dan short-circuiting untuk kondisi yang lebih bersih dan aman.

Referensi:
  1. Dokumentasi Python
  2. Tutorial Python di W3School
  3. Reserved words di Python

Tambah komentar

Previous Post Next Post