01 — Python Fundamentals
Estimasi: 4 jam Tujuan: Setelah ini kamu paham variabel, tipe data dasar, dan operator — fondasi semua kode Python.
Kenapa Materi Ini Penting?
Python adalah bahasa utama di dunia AI dan data science — bukan salah satu pilihan, tapi satu-satunya yang wajib kamu kuasai. Semua library yang akan kamu pakai di bootcamp nanti (NumPy, Pandas, PyTorch, LangChain) ditulis di atas Python. Kalau fondasi Python-mu kuat sekarang, kamu tidak akan tersandung syntax saat seharusnya fokus belajar konsep AI yang lebih berat. Investasi 4 jam di sini akan menghemat puluhan jam debugging di fase-fase berikutnya.
Peta Konsep Materi
Cara Membaca Diagram
Diagram ini punya 2 layer. Layer atas adalah alur belajar utama (variabel → tipe → operator → I/O → komentar → truthy). Layer bawah adalah detail dari tiap node utama (cabang ke int/float/str/bool, dan cabang ke aritmatika/perbandingan/logika). Drag node untuk lihat hubungan.
Walkthrough Step-by-Step
- Mulai dari Variabel — nama yang merujuk ke data (
nama = "Yazid"). - Setiap variabel punya Tipe Data — bisa numerik (int, float), text (str), boolean, atau None.
- Operator dipakai untuk operasi: aritmatika (+, -, *), perbandingan (==, <, >), atau logika (and, or, not).
- Print & Input untuk komunikasi dengan user, pakai f-string untuk format.
- Komentar kasih konteks ke pembaca kode.
- Truthy/Falsy — Python anggap nilai apapun bisa jadi boolean (0, [], None = False).
Analogi Sehari-hari
Bayangin kamu pindah ke rumah baru. Variabel = label di kotak ("dapur", "kamar"). Tipe data = isi kotak (piring, baju). Operator = aktivitas yang kamu lakukan dengan isinya (campur bumbu, lipat baju). Print = ngobrol sama tetangga. Konsep dasar Python = konsep dasar pindah rumah, struktur dulu baru detail.
Diagram statis Mermaid sebagai fallback:
flowchart TD
A[📦 Variabel] --> B[🔤 Tipe Data]
B --> C[➕ Operator]
C --> D[🖨️ Print & Input]
D --> E[💬 Komentar]
E --> F[✅ Truthy/Falsy]
F --> G[🎯 Chain Comparison]
B --> B1[int / float]
B --> B2[str]
B --> B3[bool / None]
C --> C1[Aritmatika]
C --> C2[Perbandingan]
C --> C3[Logika]
Analogi besar: anggap variabel seperti label nama di kotak. Kotak berisi data, label kasih nama supaya kamu bisa rujuk lagi. Kalau kamu pindahin label ke kotak lain (
x = "halo"), data di kotak lama tetap ada — cuma label-nya pindah.
Bagian 1 — Hello World & REPL
Cara Menjalankan Python
Ada 3 cara:
1. Interactive REPL (Read-Eval-Print Loop)
Buka terminal, ketik:
conda activate ai-prep
python
Akan muncul prompt >>>. Ini Python interactive. Cocok untuk eksperimen cepat.
>>> print("Hello!")
Hello!
>>> 2 + 2
4
>>> exit()
2. Jalankan File .py
Bikin file hello.py:
print("Hello, AI World!")
Jalankan:
python hello.py
3. Jupyter Notebook
jupyter notebook
Cocok untuk eksperimen + visualisasi data. Akan banyak dipakai mulai Fase 4.
Aturan praktis: REPL untuk coba 1-2 baris. Jupyter untuk eksplorasi data. File
.pyuntuk project nyata.
Diagram Alur 3 Cara
flowchart LR
A[👨💻 Kamu] --> B{Pilih cara}
B --> C[💻 REPL]
B --> D[📄 File .py]
B --> E[📓 Jupyter]
C --> C1[Eksperimen 1-2 baris]
D --> D1[Project nyata, reusable]
E --> E1[Eksplorasi data + plot]
Bagian 2 — Variabel
Variabel = nama yang merujuk ke data.
Visualisasi: Variabel = Label di Kotak
flowchart LR
subgraph Memori
K1[📦 'Yazid']
K2[📦 25]
K3[📦 170.5]
K4[📦 True]
end
nama -->|menunjuk| K1
umur -->|menunjuk| K2
tinggi -->|menunjuk| K3
suka_ngoding -->|menunjuk| K4
Ketika kamu tulis nama = "Yazid", Python:
- Bikin object string
"Yazid"di memori - Bikin label
namayang menunjuk ke object tersebut
Kalau nanti nama = "Budi", label dipindah ke object baru. Object lama dibuang (garbage collected).
nama = "Yazid"
umur = 25
tinggi = 170.5
suka_ngoding = True
Aturan Naming
✅ Boleh:
- Huruf, angka, underscore
- Awali dengan huruf atau underscore
- Case-sensitive:
Nama≠nama
❌ Tidak boleh:
- Awali dengan angka (
1namasalah) - Pakai keyword Python (
if,for,class, dll) - Pakai spasi atau karakter spesial
Konvensi (Penting di Industri)
# Variabel & function: snake_case
nama_lengkap = "Budi"
def hitung_total():
pass
# Constant: UPPER_CASE
PI = 3.14159
MAX_RETRIES = 5
# Class: PascalCase
class DataLoader:
pass
# Private (konvensi): awali dengan _
_internal_state = None
Multiple Assignment
# Assign banyak sekaligus
x, y, z = 1, 2, 3
# Swap tanpa variabel temporary (Python style!)
a, b = 10, 20
a, b = b, a # sekarang a=20, b=10
Contoh Lengkap (Runnable)
# variabel_demo.py — copy-paste dan jalankan
nama = "Yazid"
umur = 25
suka_ngoding = True
print(f"{nama} berumur {umur} tahun")
print(f"Suka ngoding? {suka_ngoding}")
# Pindah label ke object baru
nama = "Budi"
print(f"Sekarang nama = {nama}")
# Output:
# Yazid berumur 25 tahun
# Suka ngoding? True
# Sekarang nama = Budi
Bagian 3 — Tipe Data Dasar
Python punya tipe data utama:
| Tipe | Contoh | Deskripsi |
|---|---|---|
int |
42, -7, 1000000 |
Bilangan bulat |
float |
3.14, -0.5, 2.0 |
Bilangan desimal |
str |
"hello", 'AI' |
Teks (string) |
bool |
True, False |
Boolean (Note: kapital) |
None |
None |
Tidak ada nilai (mirip null) |
list |
[1, 2, 3] |
List |
tuple |
(1, 2, 3) |
Tuple (immutable) |
dict |
{"a": 1} |
Dictionary |
set |
{1, 2, 3} |
Set |
List, tuple, dict, set akan dibahas detail di file 04. Sekarang fokus ke 4 tipe pertama.
Cek Tipe Data
x = 42
print(type(x)) # <class 'int'>
y = "hello"
print(type(y)) # <class 'str'>
Konversi Tipe (Type Casting)
# String ke integer
angka_str = "123"
angka_int = int(angka_str) # 123
# Integer ke string
angka = 42
teks = str(angka) # "42"
# Float ke int (potong desimal, BUKAN bulatkan)
int(3.7) # 3
int(3.99) # 3
# String desimal ke float
float("3.14") # 3.14
# Hati-hati!
int("abc") # ValueError!
int("3.14") # ValueError! (str -> int harus integer murni)
int(float("3.14")) # 3 (workaround)
Insight: banyak bug AI/data pemula muncul dari type yang salah. CSV dibaca semua jadi string, kamu lupa convert, model error. Selalu cek tipe saat ragu.
Diagram: Hierarki Tipe Data
Cara Membaca Diagram
Node tengah atas adalah root "Tipe Data Python". Layer kedua adalah 5 kategori utama (Numerik, Text, Boolean, None, Collection). Layer ketiga adalah implementasi konkretnya. Setiap kategori adalah keluarga tipe yang punya behavior mirip.
Walkthrough Step-by-Step
- Numerik — int (
42) untuk bilangan bulat, float (3.14) untuk desimal. Operasi aritmatika berlaku di sini. - Text — str (
"hello"), bisa di-slice, di-concat, di-format. - Boolean —
True/False. Hasil dari operasi perbandingan dan logika. - None — special value untuk "tidak ada nilai". Mirip
nulldi bahasa lain. - Collection — list/tuple (sequence), dict/set (key-based). Akan dibahas detail di file 04.
Analogi Sehari-hari
Tipe data = kategori barang di supermarket. Numerik = bagian beras (semua bisa ditimbang). Text = bagian buku (bisa dibaca, dipotong). Boolean = bagian saklar lampu (cuma 2 state). None = rak kosong yang ditandai. Collection = troli yang isinya bisa banyak barang.
Diagram statis Mermaid sebagai fallback:
flowchart TD
A[🔤 Tipe Data Python] --> B[📊 Numerik]
A --> C[📝 Text]
A --> D[✅ Boolean]
A --> E[❌ None]
A --> F[📦 Collection]
B --> B1[int<br/>42]
B --> B2[float<br/>3.14]
C --> C1[str<br/>'hello']
D --> D1[True / False]
F --> F1[list / tuple]
F --> F2[dict / set]
Bagian 4 — Operator
Aritmatika
a, b = 10, 3
a + b # 13 penjumlahan
a - b # 7 pengurangan
a * b # 30 perkalian
a / b # 3.333... pembagian (selalu float)
a // b # 3 pembagian bulat (floor division)
a % b # 1 modulo (sisa pembagian)
a ** b # 1000 pangkat
Penting:
5 / 2 = 2.5di Python 3 (selalu float).5 // 2 = 2untuk int.
Perbandingan (Hasilnya bool)
a, b = 10, 3
a == b # False sama dengan
a != b # True tidak sama
a > b # True lebih besar
a < b # False lebih kecil
a >= b # True
a <= b # False
Hati-hati:
==(perbandingan) berbeda dengan=(assignment). Pemula sering bingung.
Logika
True and True # True
True and False # False
True or False # True
not True # False
# Pendek-circuit (penting!)
False and func() # func() TIDAK dipanggil (sudah pasti False)
True or func() # func() TIDAK dipanggil (sudah pasti True)
Assignment Shorthand
x = 10
x += 5 # x = x + 5 → 15
x -= 3 # x = x - 3 → 12
x *= 2 # x = x * 2 → 24
x /= 4 # x = x / 4 → 6.0
Bagian 5 — Print & Input
Print Lanjutan
print("Hello", "World") # Hello World (default separator: spasi)
print("Hello", "World", sep="-") # Hello-World
print("Line 1", end=" ") # tanpa newline
print("Line 2") # Line 1 Line 2
# Print variabel
nama = "Budi"
print("Halo,", nama) # Halo, Budi
F-String (Cara Modern, Wajib Pakai)
nama = "Yazid"
umur = 25
# Cara lama (jangan dipakai lagi)
print("Halo, " + nama + ". Umur: " + str(umur))
# Cara modern (f-string)
print(f"Halo, {nama}. Umur: {umur}")
# Format angka
pi = 3.14159265
print(f"Pi: {pi:.2f}") # Pi: 3.14 (2 decimal)
print(f"Pi: {pi:.4f}") # Pi: 3.1416
# Format dengan width
nilai = 95
print(f"Nilai: {nilai:>5}") # "Nilai: 95" (right-align, width 5)
print(f"Nilai: {nilai:0>5}") # "Nilai: 00095" (pad dengan 0)
# Persentase
akurasi = 0.8534
print(f"Akurasi: {akurasi:.2%}") # Akurasi: 85.34%
# Eksekusi expression
print(f"2+2 = {2+2}") # 2+2 = 4
F-string adalah cara standar print di Python modern. Wajib pakai. Lupakan
%formatting dan.format().
Input dari User
nama = input("Siapa namamu? ")
print(f"Halo, {nama}!")
# Input selalu string. Convert kalau perlu angka:
umur_str = input("Umur: ")
umur = int(umur_str) # convert ke int
Bagian 6 — Komentar
# Ini komentar 1 baris
x = 42 # komentar di akhir baris
"""
Komentar multi-baris (sebenarnya ini string,
tapi kalau tidak di-assign jadi komentar de facto).
Pakai untuk docstring.
"""
def fungsi():
"""Ini docstring — penjelasan fungsi.
Akan muncul saat help(fungsi).
"""
pass
Aturan Komentar yang Baik
❌ Jelek:
x += 1 # tambah x dengan 1
(Komentar tidak menambah info — kode sudah jelas)
✅ Baik:
x += 1 # adjust offset karena indexing dari 0
(Komentar jelaskan kenapa, bukan apa)
Rule of thumb: kalau komentar cuma menerjemahkan kode → tidak perlu. Kalau jelaskan alasan → tulis.
Bagian 7 — Truthy & Falsy
Penting di Python: nilai apapun bisa dipakai sebagai boolean.
Falsy values (dianggap False):
False
None
0
0.0
"" # string kosong
[] # list kosong
{} # dict kosong
() # tuple kosong
set() # set kosong
Truthy values: semua selain di atas.
if []:
print("ada isi")
else:
print("kosong") # ini yang print
# Pythonic way to check empty:
data = []
if not data: # truthy/falsy check
print("data kosong")
Bagian 8 — Chain Comparisons (Pythonic Trick)
Python mendukung perbandingan berantai:
umur = 25
# Cara biasa
if umur >= 18 and umur <= 65:
print("usia produktif")
# Cara Python (lebih elegan)
if 18 <= umur <= 65:
print("usia produktif")
Common Mistakes & FAQ
❌ Mistake 1: = vs ==
# SALAH — ini assignment, bukan perbandingan
if x = 5:
print("hi")
# SyntaxError
# BENAR
if x == 5:
print("hi")
❌ Mistake 2: Pakai keyword sebagai nama variabel
list = [1, 2, 3] # ❌ override built-in 'list'
print(list("abc")) # TypeError! 'list' bukan function lagi
Kena bug aneh? Cek apakah pakai nama keyword: list, dict, str, type, id, input, print, sum, min, max.
❌ Mistake 3: Lupa convert tipe
umur = input("Umur: ") # selalu string
if umur > 18: # ❌ TypeError: '>' not supported between str and int
pass
# Fix:
umur = int(input("Umur: "))
if umur > 18:
pass
❌ Mistake 4: Float precision
0.1 + 0.2 == 0.3 # False! Hasilnya 0.30000000000000004
Kenapa? Float di komputer = binary representation, ada error rounding kecil. Untuk perbandingan float, pakai toleransi:
import math
math.isclose(0.1 + 0.2, 0.3) # True
FAQ
Q: Apakah Python case-sensitive?
A: Ya. Nama dan nama adalah dua variabel berbeda. Konsisten pakai snake_case.
Q: Boleh pakai bahasa Indonesia di nama variabel?
A: Boleh secara teknis (umur = 25 valid). Tapi konvensi industri pakai bahasa Inggris (age = 25). Untuk belajar di sini boleh ID; untuk repo public, English.
Q: Beda print dan return?
A: print tampilkan ke layar (untuk manusia). return kasih nilai balik dari function (untuk program). Akan lebih jelas di file 03.
Q: Kenapa Python pakai indentasi, bukan kurung kurawal? A: Filosofi "readability counts". Indentasi paksa kode rapi. Awalnya aneh, tapi lama-lama nyaman.
Cek Pemahaman
- Bisa bedakan
=dan==? - Tahu beda
/dan//? - Bisa pakai f-string untuk print?
- Tahu sebut 5 falsy values?
- Bisa convert tipe (str ↔ int ↔ float)?
- Tahu konvensi naming (snake_case vs PascalCase)?
Challenge 2.1
Challenge 1 — Kalkulator Sederhana
Bikin calculator.py:
Input dua angka dan operator (+, -, *, /).
Output hasil dengan format 2 desimal.
Contoh:
Angka 1: 10
Angka 2: 3
Operator: /
Hasil: 10.00 / 3.00 = 3.33
Challenge 2 — Konversi Suhu
Buat program yang konversi:
- Celsius ke Fahrenheit:
F = C * 9/5 + 32 - Celsius ke Kelvin:
K = C + 273.15
Tampilkan ketiga skala. Format 2 desimal.
Challenge 3 — BMI Calculator
Hitung BMI: BMI = berat / (tinggi_m ** 2)
Kategorisasi:
- < 18.5: Underweight
- 18.5 - 24.9: Normal
- 25.0 - 29.9: Overweight
- ≥ 30: Obese
Output dengan f-string yang rapi.
Challenge 4 — Pythonic Style
Perbaiki kode jelek ini jadi Pythonic:
data = [1, 2, 3]
if len(data) == 0:
pass
if x == True:
pass
if x != None:
pass
Jawaban di akhir.
Challenge 5 — F-String Master
Buat satu print statement yang mengeluarkan tabel rapi:
Nama | Umur | Skor
-----------|------|------
Budi | 25 | 87.5%
Ani | 7 | 9.3%
Pakai variabel + f-string + width formatting.
Jawaban Challenge 4
# Cek list kosong
if not data:
pass
# Cek boolean (jangan compare dengan True)
if x:
pass
# Cek not None (pakai 'is not')
if x is not None:
pass
is dan is not dipakai untuk perbandingan dengan None dan singleton. == untuk nilai.
Selanjutnya: 02-control-flow.md — if/else, loops, dan kontrol alur program.