2Python untuk AI

Python Fundamentals

4 jam13 min baca
Tujuan

Setelah ini kamu paham variabel, tipe data dasar, dan operator — fondasi semua kode Python.

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

  1. Mulai dari Variabel — nama yang merujuk ke data (nama = "Yazid").
  2. Setiap variabel punya Tipe Data — bisa numerik (int, float), text (str), boolean, atau None.
  3. Operator dipakai untuk operasi: aritmatika (+, -, *), perbandingan (==, <, >), atau logika (and, or, not).
  4. Print & Input untuk komunikasi dengan user, pakai f-string untuk format.
  5. Komentar kasih konteks ke pembaca kode.
  6. 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 .py untuk 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:

  1. Bikin object string "Yazid" di memori
  2. Bikin label nama yang 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: Namanama

❌ Tidak boleh:

  • Awali dengan angka (1nama salah)
  • 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

  1. Numerik — int (42) untuk bilangan bulat, float (3.14) untuk desimal. Operasi aritmatika berlaku di sini.
  2. Text — str ("hello"), bisa di-slice, di-concat, di-format.
  3. BooleanTrue / False. Hasil dari operasi perbandingan dan logika.
  4. None — special value untuk "tidak ada nilai". Mirip null di bahasa lain.
  5. 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.5 di Python 3 (selalu float). 5 // 2 = 2 untuk 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("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.