Dari pemula sampai mahir — dengan Python yang berjalan langsung di peramban.
Dari Pemula sampai Mahir
Belajar Python secara menyeluruh: mulai dari baris pertama, sampai menulis program nyata — semua dijalankan langsung di dalam peramban, tanpa memasang apa pun.
Ada jarak yang aneh antara “tahu Python” dan “bisa memakai Python”. Banyak orang menonton puluhan video, menyalin contoh, dan merasa paham — lalu bingung saat harus menulis sesuatu dari nol. Buku ini dibuat untuk menutup jarak itu.
Pendekatannya sederhana: belajar dengan menjalankan. Setiap contoh di buku ini bisa langsung dijalankan di dalam peramban, di tempat. Kamu tidak perlu memasang Python, tidak perlu menyiapkan editor, tidak perlu menunggu proses apa pun. Baca, jalankan, ubah, jalankan lagi — rasakan sendiri apa yang berubah.
Buku ini menempuh tiga bagian yang berurutan:
Setiap bab punya pola yang sama: penjelasan singkat yang padat, contoh yang bisa dijalankan, lalu latihan dengan solusi yang bisa dibuka. Jangan lompati latihan. Membaca membuatmu mengenal; menulis dan menjalankan yang membuatmu bisa.
Catatan jujur. Tidak semua hal bisa dijalankan di dalam peramban. Bab yang memerlukan berkas di komputermu, paket dari internet, jaringan, atau program yang berjalan lama akan menandainya dengan jelas, dan mengarahkanmu ke lingkungan yang tepat. Itu bukan kelemahan — itu bagian dari belajar tahu di mana sesuatu seharusnya dijalankan.
Selamat membaca, dan selamat berkarya.
— RWID
Buku ini bukan buku biasa: ia punya Python di dalamnya. Setiap contoh kode bisa langsung dijalankan, tanpa memasang apa pun.
Di sudut kiri atas ada dua mode:
Di atas setiap blok kode ada dua tombol:
Saranku. Jangan hanya menekan Jalankan. Ubah dulu angkanya, ganti namanya, rusak dengan sengaja — lalu lihat apa yang terjadi. Kesalahan adalah guru tercepat.
Python di peramban itu nyata, tetapi ia hidup di dalam kotak pasir (sandbox). Ia tidak bisa menyentuh berkas di komputermu, memasang paket dari internet, atau membuka jaringan. Jadi sebagian topik — dengan jujur — tidak bisa dijalankan di sini. Bab seperti itu menandainya dengan jelas:
Butuh lingkungan lokal. Ini tidak bisa dijalankan di peramban. Ikuti panduannya, dan jalankan di Python lokal + VS Code atau Google Colab.
Panduan lengkap memasang Python lokal ada di Lampiran C. Ringkasnya:
| ✅ Jalan di sini | ⚠️ Terbatas di sini | ❌ Butuh lingkungan lokal |
|---|---|---|
| Python murni & stdlib dasar | Komputasi/ukuran besar | Baca-tulis berkas di komputermu |
| NumPy, pandas, Matplotlib | Tanpa jaringan sungguhan | pip install paket apa pun |
| scikit-learn (skala kecil) | Penyimpanan tidak permanen | requests, socket, database |
HTML lewat rwid.show_html | GUI (tkinter/turtle), os/subprocess | |
multiprocessing, server (Flask/FastAPI) |
Bagian I dan satu bab pembuka Bagian II bisa dibaca gratis. Untuk membuka seluruh buku — hingga proyek akhir — aktifkan dengan 25 lewat tombol di akhir bab sampel terakhir, atau dari aplikasi Books / Toko.
Selamat menjelajah. Mulai dari halaman berikutnya.
Klik judul untuk melompat. Bab bertanda kunci perlu diaktifkan ( 25).
Setiap perjalanan dimulai dari satu baris. Di Python, baris itu adalah print(). Mari kita jalankan yang paling sederhana lebih dulu, lalu membedah apa yang sebenarnya terjadi.
print("Halo, dunia!")
Satu baris, satu perintah. print() adalah fungsi: ia menerima sesuatu di dalam tanda kurung, lalu menampilkannya ke layar. Teks yang diapit tanda kutip — seperti "Halo, dunia!" — disebut string.
Kamu bisa menampilkan lebih dari satu hal sekaligus, dipisah koma:
print("Nama saya", "Eko")
print("2 + 3 =", 2 + 3)
Perhatikan: "Nama saya" dan "Eko" dipisah spasi otomatis, sedangkan 2 + 3 benar-benar dihitung lebih dulu menjadi 5, baru dicetak.
Baris yang dimulai dengan # diabaikan Python. Kita memakainya untuk menjelaskan mengapa, bukan apa.
# Ini komentar: Python tidak menjalankannya.
print("Halo") # komentar bisa di ujung baris juga
Kode yang baik berbicara lewat namanya; komentar dipakai saat alasannya tidak jelas dari kode itu sendiri.
Coba jalankan kode berikut. Sengaja salah, supaya kamu kenal wajah error:
print("Halo"
Python akan berhenti dan melaporkan SyntaxError. Ini bukan bencana — ini Python memberitahu bahwa ada tanda kurung yang belum ditutup. Membaca pesan error adalah keterampilan utama. Biasanya baris terakhir pesan itulah intinya.
print("Halo")
Bandingkan: satu huruf tambahan, dan semuanya berjalan.
Python membaca program dari atas ke bawah. Tiap print() dijalankan berurutan:
print("Satu")
print("Dua")
print("Tiga")
Kita akan membahas variabel tuntas di bab berikutnya, tetapi satu contoh kecil di sini akan membantu:
nama = "Eko"
tahun_lahir = 1990
print("Hai,", nama)
print("Usia pada 2026:", 2026 - tahun_lahir)
Tanda = memberi nama pada sebuah nilai. Setelah nama = "Eko", di mana pun kita menulis nama, Python menggantinya dengan "Eko".
17 * 24.panjang = 8 dan lebar = 5, lalu tampilkan luas persegi panjangnya.SyntaxError, jalankan, dan baca pesan errornya. Lalu perbaiki.# 1
print("Eko")
print("Yogyakarta")
# 2
print(17 * 24)
# 3
panjang = 8
lebar = 5
print("Luas:", panjang * lebar)
# 4 — kesalahan yang umum: kurung tak ditutup
# print("Halo"
print("Halo")
print() menampilkan nilai ke layar.# memulai komentar yang diabaikan Python.Di bab berikutnya kita berkenalan serius dengan variabel dan tipe data.
Variabel adalah cara kita memberi nama pada sesuatu agar bisa dipakai lagi. Python tidak menuntut kita mendeklarasikan tipe — ia menebaknya dari nilai — tetapi memahami tipe data tetap wajib, karena tipe menentukan apa yang bisa dan tidak bisa dilakukan.
umur = 25
nama = "Siti"
tinggi = 1.68
menikah = False
Empat baris, empat tipe dasar: int (25), str ("Siti"), float (1.68), dan bool (False). Untuk melihat tipe sesuatu, gunakan type():
print(type(25)) # <class 'int'>
print(type(1.68)) # <class 'float'>
print(type("Siti")) # <class 'str'>
print(type(False)) # <class 'bool'>
int adalah bilangan bulat; float adalah bilangan dengan koma. Pembagian selalu menghasilkan float:
print(10 / 3) # 3.3333333333333335
print(10 // 3) # 3 (pembagian bulat)
print(10 % 3) # 1 (sisa bagi)
print(2 ** 10) # 1024 (pangkat)
Operator // dan % adalah sahabat sehari-hari: satu untuk membagi rata, satu untuk sisa. Bersama, mereka bisa memecah angka menjadi digit:
menit = 145
print(menit // 60, "jam", menit % 60, "menit") # 2 jam 25 menit
String bisa digabung dengan + dan diulang dengan *:
depan = "Eko"
belakang = "Wibowo"
print(depan + " " + belakang)
print("ha" * 3) # hahaha
print(len("Python")) # 6
Kita akan menggali string lebih dalam di Bab 7. Untuk sekarang, cukup ingat bahwa string adalah deretan karakter, dan len() menghitung panjangnya.
bool hanya punya dua nilai: True dan False. Nilai ini muncul dari perbandingan:
print(5 > 3) # True
print(5 == 5) # True (perhatikan: == untuk membandingkan, = untuk mengisi)
print(5 != 5) # False
Jebakan klasik.
=mengisi variabel;==membandingkan. Tertukar satu tanda ini adalah salah satu kesalahan paling sering bagi pemula.
Kadang kita perlu mengubah tipe. Fungsi int(), float(), dan str() melakukannya:
nomor = "42" # ini string, bukan angka
print(nomor + "5") # 425 (menempel, bukan menjumlah!)
print(int(nomor) + 5) # 47 (sekarang benar-benar dijumlah)
print(str(100) + "!") # 100!
print(int(3.9)) # 3 (dipotong, bukan dibulatkan)
Cara paling nyaman mencetak nilai campuran adalah f-string — string berawalan f yang bisa memuat ekspresi di dalam {}:
nama = "Eko"
umur = 36
print(f"Hai {nama}, usiamu {umur} tahun.")
print(f"Setahun lagi: {umur + 1}")
print(f"Pi sekitar {3.14159:.2f}") # 2 angka di belakang koma
f-string akan terus muncul sepanjang buku ini. Kuasai mulai sekarang.
Kadang sebuah variabel belum punya nilai. Di Python, “belum ada” diwakili None:
hasil = None
print(hasil) # None
print(hasil is None) # True
None berbeda dari 0, berbeda dari "". Ia benar-benar “tidak ada”.
200 menit."7" dan 3; jumlahkan sebagai angka, lalu tampilkan hasilnya.berat = 72.5 (kg) dan tinggi = 1.75 (m), lalu hitung indeks massa tubuh berat / tinggi ** 2 dan tampilkan dengan 1 angka di belakang koma.# 1
depan = "Eko"
belakang = "Wibowo"
tahun = 1990
print(f"{depan} {belakang}, lahir {tahun}.")
# 2
total = 200
print(f"{total // 60} jam {total % 60} menit")
# 3
print(int("7") + 3)
# 4
berat = 72.5
tinggi = 1.75
imt = berat / tinggi ** 2
print(f"IMT: {imt:.1f}")
int, float, str, bool, dan None.// membagi bulat, % mengambil sisa, ** memangkatkan.= mengisi, == membandingkan.Kenapa kode Python yang baik terasa ringkas dan enak dibaca? Karena ia memakai idiom — cara menulis yang sudah lazim di kalangan Pythonista. Bab ini mengajarkan komprehensi dan sejumlah kebiasaan yang membuat kode lebih pendek, jelas, dan pythonik.
Cara lama mengisi sebuah list:
kuadrat = []
for x in range(1, 6):
kuadrat.append(x ** 2)
print(kuadrat)
Komprehensi memadatkannya menjadi satu baris:
kuadrat = [x ** 2 for x in range(1, 6)]
print(kuadrat) # [1, 4, 9, 16, 25]
genap = [x for x in range(10) if x % 2 == 0]
print(genap) # [0, 2, 4, 6, 8]
Polanya: [ekspresi for item in iterable], disaring opsional dengan if.
Untuk dict, gunakan {kunci: nilai for ...}; untuk set, {...}:
panjang = {kota: len(kota) for kota in ["jakarta", "bali", "medan"]}
print(panjang)
unik = {huruf.lower() for huruf in "Halo Dunia" if huruf != " "}
print(sorted(unik))
enumerate memberi nomor urut; zip berjalan atas dua list sekaligus:
buah = ["apel", "mangga", "jeruk"]
for nomor, nama in enumerate(buah, start=1):
print(f"{nomor}. {nama}")
nama = ["Eko", "Siti"]
umur = [36, 25]
for n, u in zip(nama, umur):
print(f"{n} berusia {u} tahun")
Keduanya mengembalikan iterator, jadi hemat memori. zip berhenti di list terpendek.
Kondisi sederhana bisa ditulis satu baris; unpacking membongkar urutan ke beberapa variabel:
umur = 20
print("dewasa" if umur >= 18 else "anak")
a, b = 1, 2
a, b = b, a # tukar tanpa variabel bantu
print(a, b)
kepala, *ekor = [1, 2, 3, 4]
print(kepala, ekor) # 1 [2, 3, 4]
f-string bisa mengatur format angka dan perataan:
nilai = 1234567.891
print(f"{nilai:,.2f}") # 1,234,567.89
print(f"{0.87:.1%}") # 87.0%
print(f"{42:05d}") # 00042
print(f"{'kanan':>10}|")
print(f"{'kiri':<10}|")
Operator walrus := memberi nilai sambil menguji:
data = [1, 2, 3, 4, 5, 6]
if (n := len(data)) > 3:
print(f"ada {n} item")
from collections import Counter
kata = "susu roti susu teh roti susu".split()
print(Counter(kata).most_common(2))
pengguna = {"nama": "Eko"}
print(pengguna.get("kota", "tidak diketahui"))
harga = {"beras": 12000, "gula": 15000, "minyak": 18000}, buat dict baru berisi harga setelah diskon 10%.zip + komprehensi dict untuk memasangkan ["a", "b", "c"] dengan [1, 2, 3].["Nasi Goreng", "Mie Ayam", "Sate"] memakai enumerate.hasil = []
for x in range(1, 11):
if x % 3 == 0:
hasil.append(x * x)
# 1
print([x ** 2 for x in range(1, 11) if x % 2 == 1])
# 2
harga = {"beras": 12000, "gula": 15000, "minyak": 18000}
print({nama: int(bayar * 0.9) for nama, bayar in harga.items()})
# 3
kunci = ["a", "b", "c"]
nilai = [1, 2, 3]
print({k: v for k, v in zip(kunci, nilai)})
# 4
for nomor, item in enumerate(["Nasi Goreng", "Mie Ayam", "Sate"], start=1):
print(f"{nomor}. {item}")
# 5
print([x * x for x in range(1, 11) if x % 3 == 0])
enumerate memberi nomor; zip berjalan atas beberapa urutan sekaligus.a if syarat else b untuk kondisi singkat.* menampung sisanya.:= memberi nilai sekaligus menguji.Di bab berikutnya kita memecah program menjadi modul dan paket yang bisa diimpor.