%%{init: {"flowchart": {"diagramPadding": 40}}}%%
flowchart TD
A(["Mulai"]) --> B["Tanya jumlah ikan dan bobot rata-rata<br/>(input memberi teks)"]
B --> C["Ubah teks menjadi angka<br/>int() dan float()"]
C --> D["Hitung biomassa dan pakan harian"]
D --> E["Bandingkan bobot dengan 500 g"]
E --> F["Tampilkan hasil dengan print()"]
F --> G(["Selesai"])
Bab 6 — Operator dan Input/Output: Berhitung, Membandingkan, dan Ngobrol dengan Program
Seri B2 — Fondasi Bahasa Python
Semua skrip bab ini ada di folder kode/bab06/. Di versi web, Anda juga bisa mengunduh semuanya sekaligus (zip).
Di Bab 5, program Anda sudah bisa mengingat nilai. Sekarang program belajar tiga hal baru: menghitung, membandingkan, dan berbicara dengan pengguna. Alat untuk dua hal pertama disebut operator: tanda khusus seperti + dan >= yang memerintahkan Python melakukan sesuatu pada nilai.
Berhitung seperti kalkulator
Python bisa semua hitungan dasar, dan lambangnya hampir sama dengan di kalkulator:
| Operator | Artinya | Contoh | Hasil |
|---|---|---|---|
+ |
tambah | 5 + 3 |
8 |
- |
kurang | 5 - 3 |
2 |
* |
kali (bintang, bukan x) |
5 * 3 |
15 |
/ |
bagi | 5 / 2 |
2.5 |
// |
bagi bulat | 5 // 2 |
2 |
% |
sisa bagi | 5 % 2 |
1 |
** |
pangkat | 5 ** 2 |
25 |
Mari terapkan pada hasil panen ikan:
01_aritmetika.py
# Bab 6 - Aritmetika: menghitung hasil panen
panen_pagi_kg = 120.5
panen_sore_kg = 98.25
total_kg = panen_pagi_kg + panen_sore_kg
selisih_kg = panen_pagi_kg - panen_sore_kg
harga_per_kg = 15000
pendapatan = total_kg * harga_per_kg
print(f"Total panen: {total_kg} kg")
print(f"Selisih pagi dan sore: {selisih_kg} kg")
print(f"Pendapatan: Rp{pendapatan:.0f}")
sisi_petak_m = 12
luas_petak_m2 = sisi_petak_m ** 2 # pangkat dua
print(f"Luas petak: {luas_petak_m2} m2")Total panen: 218.75 kg
Selisih pagi dan sore: 22.25 kg
Pendapatan: Rp3281250
Luas petak: 144 m2
Perhatikan {pendapatan:.0f}: kode :.0f berarti “tampilkan tanpa angka di belakang titik”. Tanpa itu, hasilnya tampil sebagai 3281250.0.
Gunakan kata luas_petak_m2, bukan luas. Satuan di dalam nama variabel membuat hitungan Anda mudah diperiksa: kalau Anda tidak sengaja mengalikan meter dengan sentimeter, kesalahannya langsung terlihat.
Tiga cara membagi
Pembagian punya tiga bentuk, dan ketiganya berguna di lapangan. Misalkan 1.250 ekor ikan dibagi rata ke 8 kolam:
02_pembagian.py
# Bab 6 - Tiga jenis pembagian: / // %
jumlah_ikan = 1250
jumlah_kolam = 8
print(f"Pembagian biasa (/): {jumlah_ikan / jumlah_kolam}")
print(f"Pembagian bulat (//): {jumlah_ikan // jumlah_kolam}")
print(f"Sisa bagi (%): {jumlah_ikan % jumlah_kolam}")Pembagian biasa (/): 156.25
Pembagian bulat (//): 156
Sisa bagi (%): 2
/memberi hasil desimal (156,25 ekor per kolam). Cocok untuk rata-rata.//memberi hasil bulat (156 ekor per kolam). Cocok untuk membagi benda yang tidak bisa dipotong, seperti ikan.%memberi sisa (2 ekor yang belum kebagian). Ini yang sering dilupakan pemula, padahal sangat berguna.
Di Python, / selalu menghasilkan bilangan desimal (float), bahkan bila hasilnya bulat. 10 / 2 menghasilkan 5.0, bukan 5. Untuk hasil bulat, pakai //.
Satu hal yang tidak bisa dilakukan: membagi dengan nol. Lihat apa yang terjadi bila jumlah kolam kebetulan 0:
10_bagi_nol.py
# Bab 6 - Salah: membagi dengan nol
jumlah_ikan = 1250
jumlah_kolam = 0
print(jumlah_ikan / jumlah_kolam)Traceback (most recent call last):
File "10_bagi_nol.py", line 4, in <module>
print(jumlah_ikan / jumlah_kolam)
~~~~~~~~~~~~^~~~~~~~~~~~~~
ZeroDivisionError: division by zero
ZeroDivisionError artinya persis seperti namanya: pembagian dengan nol. Dalam program sungguhan, Bab 7 akan mengajarkan cara mengecek jumlah_kolam sebelum membagi.
Membandingkan nilai
Operator perbandingan membandingkan dua nilai dan menghasilkan True (benar) atau False (salah). Ingat tipe bool dari Bab 5? Di sinilah ia dipakai.
| Operator | Artinya |
|---|---|
== |
sama dengan |
!= |
tidak sama dengan |
> |
lebih besar dari |
>= |
lebih besar atau sama dengan |
< |
lebih kecil dari |
<= |
lebih kecil atau sama dengan |
03_perbandingan.py
# Bab 6 - Operator perbandingan: hasilnya selalu True atau False
bobot_g = 520
target_g = 500
print("bobot == target :", bobot_g == target_g)
print("bobot != target :", bobot_g != target_g)
print("bobot > target :", bobot_g > target_g)
print("bobot >= target :", bobot_g >= target_g)
print("bobot < target :", bobot_g < target_g)
print("bobot <= target :", bobot_g <= target_g)
# Teks juga bisa dibandingkan, dan huruf besar/kecil dianggap beda
jenis = "Lele"
print('jenis == "Lele" :', jenis == "Lele")
print('jenis == "lele" :', jenis == "lele")bobot == target : False
bobot != target : True
bobot > target : True
bobot >= target : True
bobot < target : False
bobot <= target : False
jenis == "Lele" : True
jenis == "lele" : False
Dua catatan penting dari hasil di atas:
- Teks juga bisa dibandingkan, dan huruf besar/kecil dianggap berbeda:
"Lele"tidak sama dengan"lele". - Hasil perbandingan bisa disimpan di variabel, seperti
siap_panen = bobot_g >= 500.
Ini jebakan paling terkenal: = dan == berbeda jauh. Satu tanda sama dengan berarti simpan, dua tanda sama dengan berarti bandingkan. Python membantu bila Anda tertukar:
09_salah_sama_dengan.py
# Bab 6 - Salah: memakai = (simpan) padahal maksudnya == (bandingkan)
print(500 = 500) File "09_salah_sama_dengan.py", line 2
print(500 = 500)
^^^^^
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
Pesannya jelas: “ekspresi tidak boleh berisi penugasan, mungkin maksud Anda ==?” Angka 500 bukan variabel, jadi tidak bisa diisi nilai.
Menggabungkan syarat: and, or, not
Keputusan di lapangan jarang bergantung pada satu syarat. Ikan siap panen bila bobotnya cukup dan sehat. Kolam perlu diperiksa bila ikannya masih muda atau tidak sehat. Python punya tiga operator logika untuk ini:
| Operator | Artinya | Hasil True bila… |
|---|---|---|
and |
dan | kedua sisi True |
or |
atau | salah satu sisi True |
not |
bukan | sisinya False (dibalik) |
04_logika.py
# Bab 6 - Operator logika: and, or, not
bobot_g = 520
sehat = True
umur_hari = 90
siap_panen = bobot_g >= 500 and sehat
perlu_diperiksa = umur_hari < 30 or not sehat
print("Siap panen :", siap_panen)
print("Perlu diperiksa :", perlu_diperiksa)
print("Tidak sehat :", not sehat)Siap panen : True
Perlu diperiksa : False
Tidak sehat : False
Baca siap_panen seperti kalimat biasa: “bobot minimal 500 gram dan sehat”. Kedua syarat terpenuhi (520 ≥ 500, dan sehat benar), jadi hasilnya True. Itulah alasan Python sengaja dibuat mirip bahasa manusia.
Urutan pengerjaan operator
Seperti di pelajaran matematika, operator punya urutan: perkalian dikerjakan sebelum penjumlahan.
05_urutan_operator.py
# Bab 6 - Urutan pengerjaan operator (seperti pelajaran matematika)
print(2 + 3 * 4) # perkalian dikerjakan lebih dulu
print((2 + 3) * 4) # tanda kurung mengubah urutan
print(10 - 2 ** 3) # pangkat lebih dulu daripada kurang
# Contoh lapangan: biaya pakan 2 kolam, ditambah biaya listrik
biaya = 50000 + 2 * 30000
print(f"Biaya total: Rp{biaya}")14
20
2
Biaya total: Rp110000
2 + 3 * 4 menghasilkan 14 (bukan 20) karena 3 * 4 dikerjakan lebih dulu. Dan 10 - 2 ** 3 menghasilkan 2, karena pangkat 2 ** 3 = 8 dikerjakan sebelum pengurangan.

Tidak perlu menghafal tangga itu. Kalau ragu, pakai tanda kurung. (2 + 3) * 4 jelas mau mengerjakan penjumlahan dulu, dan orang yang membaca kode Anda tiga bulan lagi tidak perlu menebak.
Kejutan angka desimal
Ini bukan salah Anda, dan bukan salah Python:
06_desimal.py
# Bab 6 - Kejutan angka desimal
print(0.1 + 0.2)
print(0.1 + 0.2 == 0.3)
hasil = round(0.1 + 0.2, 2) # bulatkan ke 2 angka di belakang titik
print(hasil)
print(hasil == 0.3)0.30000000000000004
False
0.3
True
Ya, 0.1 + 0.2 tidak persis 0.3 di komputer. Obatnya sederhana: bulatkan dulu dengan round(angka, jumlah_desimal) sebelum membandingkan.
Komputer menyimpan angka dalam sistem biner (1 dan 0). Sebagian pecahan desimal yang tampak sederhana bagi kita, seperti 0.1, tidak bisa ditulis tepat dalam biner, sama seperti 1/3 tidak bisa ditulis tepat dalam desimal (0,3333…). Hasilnya selisih yang amat kecil. Ini terjadi di hampir semua bahasa pemrograman, bukan hanya Python.
Berbicara dengan program: print() dan input()
Anda sudah memakai print() sejak Bab 4 dan input() di Bab 5. Sekarang kita lihat dua pengaturan print() yang berguna, dan input() dengan lebih saksama.
07_print_input.py
# Bab 6 - print() dan input() lebih dalam
nama = input("Nama unit usaha: ")
lokasi = input("Lokasi: ")
print("Unit usaha:", nama, "di", lokasi)
print("Kolam", "A", "aktif", sep="-") # sep = pemisah antar nilai
print("Memeriksa...", end=" ") # end = penutup baris
print("selesai")Nama unit usaha: Kolam Mina Tani
Lokasi: Subang
Unit usaha: Kolam Mina Tani di Subang
Kolam-A-aktif
Memeriksa... selesai
input("...")menampilkan pertanyaan, menunggu Anda mengetik, lalu memberikan teks yang diketik.- Di
print(),sepmengatur pemisah antar nilai (di sini tanda-), danendmengatur apa yang menutup baris. Biasanyaendadalah pindah baris, tetapi di sini kita ganti dengan satu spasi supaya “Memeriksa…” dan “selesai” tampil sebaris.
Proyek Bersambung B2: kalkulator kolam
Sekarang kita gabungkan semua: program yang menanyakan jumlah dan bobot ikan, menghitung biomassa dan kebutuhan pakan harian, lalu menentukan apakah ikan siap panen.
08_kalkulator_kolam.py
# Bab 6 - Proyek bersambung B2: kalkulator kolam
# (angka 3% dan 500 g adalah angka contoh untuk latihan, bukan anjuran budidaya)
jumlah_ikan = int(input("Jumlah ikan (ekor): "))
bobot_rata_g = float(input("Bobot rata-rata (gram): "))
biomassa_kg = jumlah_ikan * bobot_rata_g / 1000
pakan_harian_kg = biomassa_kg * 0.03
siap_panen = bobot_rata_g >= 500
print(f"Biomassa kolam : {biomassa_kg:.1f} kg")
print(f"Pakan per hari : {pakan_harian_kg:.2f} kg")
print(f"Siap panen : {siap_panen}")Jumlah ikan (ekor): 800
Bobot rata-rata (gram): 540.5
Biomassa kolam : 432.4 kg
Pakan per hari : 12.97 kg
Siap panen : True
Telusuri satu per satu: 800 ekor × 540,5 gram = 432.400 gram = 432,4 kg biomassa. Pakan harian 3% dari itu adalah 12,97 kg. Dan karena 540,5 ≥ 500, kolam siap panen.
Angka 3% pakan dan 500 gram panen hanyalah angka contoh untuk latihan, bukan anjuran budidaya. Kebutuhan sebenarnya bergantung pada jenis ikan, umur, suhu air, dan faktor lain. Tanyakan kepada penyuluh perikanan atau pembudidaya berpengalaman.
Latihan
- Seorang petani memanen 3 blok kebun: 245,5 kg, 310 kg, dan 198,25 kg. Hitung total panen dan rata-rata per blok, lalu cetak dengan f-string.
- Sebuah kandang berisi 1.000 butir telur akan dikemas dalam rak berisi 30 butir. Dengan
//dan%, hitung berapa rak penuh dan berapa butir telur sisa. - Ubah
08_kalkulator_kolam.pysupaya persentase pakan (3%) juga ditanyakan lewatinput(). Jangan lupa mengubah teks menjadi angka dan membagi 100. - Tantangan: tulis satu ekspresi yang bernilai
Truebila sebuah pohon layak ditebang: diameter minimal 40 cm dan sehat, atau tinggi lebih dari 25 m. Uji dengan beberapa angka. Hati-hati dengan urutananddanor; pakai tanda kurung.
Ringkasan Bab
- Aritmetika:
+ - * / // % **./selalu menghasilkan desimal;//membagi bulat;%memberi sisa. - Perbandingan:
== != > >= < <=menghasilkanTrueatauFalse.=menyimpan,==membandingkan. - Logika:
and,or,notmenggabungkan syarat. - Operator punya urutan; kalau ragu, pakai tanda kurung.
- Desimal di komputer bisa sedikit meleset; gunakan
round()sebelum membandingkan. print()punyasepdanend;input()selalu memberi teks, jadi ubah denganint()ataufloat().
Selanjutnya, di Bab 7: program Anda sudah bisa menjawab Benar atau Salah. Sekarang kita pakai jawaban itu untuk mengambil keputusan: jika bobot sudah cukup, maka panen; kalau tidak, tunggu.