1. Pengenalan Python
Python adalah bahasa pemrograman interpreted, high-level, general-purpose yang menekankan pada keterbacaan kode dengan menggunakan indentasi yang signifikan.
Karakteristik Utama Python:
- Interpreted - Tidak perlu kompilasi, langsung dijalankan
- Dynamic typing - Tipe data ditentukan saat runtime
- Indentation-based - Blok kode menggunakan indentasi, bukan kurung kurawal
- Batteries included - Standard library yang sangat lengkap
- Multi-paradigm - Mendukung OOP, functional, procedural
- Easy to learn - Sintaks sederhana mirip bahasa Inggris
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Menampilkan teks ke console
print("Hello, World!")
print("Selamat belajar Python!")
# Variabel sederhana
nama = "Python"
tahun = 1991
print(f"{nama} dirilis tahun {tahun}") # f-string (format string)
# Input dari user
nama_user = input("Siapa nama kamu? ")
print(f"Halo, {nama_user}! Selamat datang di Python.")
print() untuk output dan input() untuk input.
Tidak perlu ; di akhir baris. Indentasi (spasi/tab) sangat penting di Python!
2. Instalasi & Environment
Cara Install Python:
1. Download installer dari https://www.python.org/downloads/
2. Jalankan installer
3. PASTIKAN centang "Add Python to PATH"
4. Pilih "Install Now" atau kustomisasi
5. Verifikasi dengan membuka CMD dan ketik: python --version
sudo apt update
sudo apt install python3 python3-pip
python3 --version
# Via Homebrew
brew install python3
# Atau download installer dari python.org
Package Manager: pip
pip adalah package manager untuk Python, digunakan untuk menginstall library tambahan.
# Install package
pip install nama_package
# Install package versi tertentu
pip install nama_package==1.2.3
# Uninstall package
pip uninstall nama_package
# List installed packages
pip list
# Freeze requirements (untuk project)
pip freeze > requirements.txt
# Install dari requirements file
pip install -r requirements.txt
Virtual Environment:
Virtual environment digunakan untuk mengisolasi dependency setiap project.
# Buat virtual environment
python -m venv nama_env
# Aktifkan (Windows)
nama_env\Scripts\activate
# Aktifkan (Linux/macOS)
source nama_env/bin/activate
# Nonaktifkan
deactivate
IDE yang direkomendasikan:
3. Sintaks Dasar Python
Aturan dasar penulisan Python:
- • File Python berekstensi
.py - • Tidak perlu titik koma (;) di akhir statement
- • Blok kode menggunakan indentasi (biasanya 4 spasi), bukan kurung kurawal
- • Komentar:
#untuk single line - • Multi-line comment menggunakan triple quotes
""" ... """ - • Case-sensitive (huruf besar/kecil dibedakan)
- • Dynamic typing - tidak perlu deklarasi tipe data
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Ini adalah multi-line comment / docstring.
Bisa digunakan untuk dokumentasi modul, fungsi, atau class.
"""
# Ini komentar single line
# Variable assignment (tanpa deklarasi tipe)
nama = "Python"
versi = 3.11
tahun_rilis = 1991
is_populer = True
# Output ke console
print("Hello, World!") # Ini juga komentar
# Input dari user
nama_user = input("Siapa nama Anda? ")
# Conditional dengan indentasi
if nama_user:
print(f"Halo, {nama_user}!")
else:
print("Halo, anonymous!")
# Fungsi sederhana dengan indentasi
def sapa(nama):
"""Fungsi untuk menyapa"""
pesan = f"Halo, {nama}!"
return pesan
# Memanggil fungsi
hasil = sapa("Budi")
print(hasil)
# Tidak perlu main function khusus, langsung dieksekusi
print("Program selesai")
python nama_file.py untuk menjalankan program.
Atau beri shebang #!/usr/bin/env python3 di Linux/macOS agar bisa langsung dijalankan.
4. Variabel & Tipe Data
Tipe data dasar di Python:
| Tipe | Kelas | Contoh | Deskripsi |
|---|---|---|---|
int | int | 10, -5, 1000000 | Integer (bilangan bulat) |
float | float | 3.14, 2.5, -0.001 | Bilangan desimal |
complex | complex | 3+4j, 2j | Bilangan kompleks |
str | str | "hello", 'world' | String (teks) |
bool | bool | True, False | Boolean (true/false) |
NoneType | NoneType | None | Tidak ada nilai |
list | list | [1,2,3], ["a","b"] | List (mutable, berurutan) |
tuple | tuple | (1,2,3), ("a","b") | Tuple (immutable, berurutan) |
dict | dict | {"nama":"Budi", "umur":20} | Dictionary (key-value) |
set | set | {1,2,3}, {"a","b"} | Set (unik, tidak berurutan) |
Aturan penamaan variabel:
- Bisa huruf, angka, underscore (_)
- Tidak boleh diawali angka
- Case-sensitive (umur != Umur)
- Tidak boleh menggunakan keyword Python (if, else, while, dll)
- Konvensi: snake_case untuk variabel dan fungsi
Dynamic Typing:
Python adalah dynamic typing, artinya tipe data ditentukan saat runtime dan bisa berubah.
# Deklarasi variabel (tanpa tipe)
nama = "Budi"
umur = 20
tinggi = 175.5
menikah = False
hobi = None # null
print(f"Nama: {nama}, tipe: {type(nama)}")
print(f"Umur: {umur}, tipe: {type(umur)}")
print(f"Tinggi: {tinggi}, tipe: {type(tinggi)}")
print(f"Menikah: {menikah}, tipe: {type(menikah)}")
print(f"Hobi: {hobi}, tipe: {type(hobi)}")
# Dynamic typing - variabel bisa berubah tipe
x = 10
print(f"x = {x}, tipe: {type(x)}")
x = "sepuluh"
print(f"x = {x}, tipe: {type(x)}")
x = 3.14
print(f"x = {x}, tipe: {type(x)}")
# Multiple assignment
a, b, c = 1, 2, 3
print(f"a={a}, b={b}, c={c}")
# Assignment dengan nilai sama
x = y = z = 100
print(f"x={x}, y={y}, z={z}")
# Konstanta (konvensi UPPER_CASE)
PI = 3.14159
MAX_USERS = 1000
# Tetap bisa diubah, tapi konvensi menunjukkan konstanta
# Type conversion (casting)
angka_str = "123"
angka_int = int(angka_str)
angka_float = float(angka_str)
print(f"String '{angka_str}' jadi int: {angka_int}, float: {angka_float}")
# Cek tipe data
print(isinstance(umur, int)) # True
print(isinstance(nama, str)) # True
# Mengambil input (selalu string)
usia_input = input("Masukkan usia: ")
usia = int(usia_input) # konversi ke int
print(f"Tahun depan usia: {usia + 1}")
type() untuk mengecek tipe data variabel.
Gunakan isinstance() untuk mengecek apakah suatu variabel instance dari tipe tertentu.
5. Operator
Jenis-jenis operator di Python:
Aritmatika
+ tambah
- kurang
* kali
/ bagi (float)
// floor division
% modulus
** pangkat
Perbandingan
== sama dengan
!= tidak sama
> lebih besar
< lebih kecil
>= lebih besar sama dengan
<= lebih kecil sama dengan
Logika
and AND
or OR
not NOT
Penugasan
= assignment
+= a += b
-= a -= b
*= a *= b
/= a /= b
//= a //= b
%= a %= b
**= a **= b
Keanggotaan
in ada di dalam
not in tidak ada di dalam
Identitas
is object yang sama
is not object berbeda
Bitwise
& AND
| OR
^ XOR
~ NOT
<< left shift
>> right shift
# Operator Aritmatika
a, b = 10, 3
print(f"{a} + {b} = {a + b}")
print(f"{a} - {b} = {a - b}")
print(f"{a} * {b} = {a * b}")
print(f"{a} / {b} = {a / b}") # 3.3333...
print(f"{a} // {b} = {a // b}") # 3 (floor division)
print(f"{a} % {b} = {a % b}") # 1 (modulus)
print(f"{a} ** {b} = {a ** b}") # 1000 (10^3)
# Operator Perbandingan (menghasilkan boolean)
print(f"{a} == {b}: {a == b}")
print(f"{a} != {b}: {a != b}")
print(f"{a} > {b}: {a > b}")
print(f"{a} < {b}: {a < b}")
# Operator Logika
x, y = True, False
print(f"x and y: {x and y}")
print(f"x or y: {x or y}")
print(f"not x: {not x}")
# Operator Keanggotaan
list_buah = ["apel", "jeruk", "mangga"]
print("apel" in list_buah) # True
print("durian" not in list_buah) # True
# Operator Identitas
list1 = [1, 2, 3]
list2 = [1, 2, 3]
list3 = list1
print(f"list1 is list2: {list1 is list2}") # False (objek berbeda)
print(f"list1 is list3: {list1 is list3}") # True (objek sama)
print(f"list1 == list2: {list1 == list2}") # True (nilai sama)
# Operator Ternary (conditional expression)
umur = 18
status = "dewasa" if umur >= 17 else "anak-anak"
print(f"Status: {status}")
# Operator Walrus (:=) - Python 3.8+
# Assignment dalam expression
if (n := len([1, 2, 3, 4, 5])) > 3:
print(f"Panjang list adalah {n}, lebih dari 3")
# Operator Bitwise
a, b = 5, 3 # 5 = 0101, 3 = 0011
print(f"{a} & {b} = {a & b}") # 1 (0001)
print(f"{a} | {b} = {a | b}") # 7 (0111)
print(f"{a} ^ {b} = {a ^ b}") # 6 (0110)
print(f"~{a} = {~a}") # -6 (komplemen dua)
print(f"{a} << 1 = {a << 1}") # 10 (1010)
print(f"{a} >> 1 = {a >> 1}") # 2 (0010)
++ dan -- operator.
Gunakan i += 1 untuk increment.
6. String
String di Python adalah urutan karakter yang immutable (tidak bisa diubah setelah dibuat).
Cara membuat string:
str1 = 'Hello' # petik satu str2 = "World" # petik dua str3 = '''Multi-line # triple quotes string'''
Escape characters:
\n newline
\t tab
\\ backslash
\' petik satu
\" petik dua
String methods umum:
upper(),lower()- ubah huruf besar/kecilstrip()- hapus whitespace di awal/akhirsplit()- pecah string menjadi listjoin()- gabung list menjadi stringreplace()- ganti substringfind()- cari posisi substringstartswith(),endswith()- cek awal/akhir
# String literals
s1 = 'Hello'
s2 = "World"
s3 = '''This is a
multi-line
string'''
s4 = """Also multi-line
with double quotes"""
print(s1, s2)
print(s3)
# Concatenation
gabung = s1 + " " + s2
print(gabung) # Hello World
# Repetition
garis = "-" * 20
print(garis)
# String indexing (0-based)
teks = "Python"
print(f"teks[0] = {teks[0]}") # P
print(f"teks[-1] = {teks[-1]}") # n (indeks negatif dari belakang)
# Slicing [start:end:step]
print(f"teks[1:4] = {teks[1:4]}") # yth (indeks 1-3)
print(f"teks[:3] = {teks[:3]}") # Pyt (dari awal)
print(f"teks[3:] = {teks[3:]}") # hon (sampai akhir)
print(f"teks[::-1] = {teks[::-1]}") # nohtyP (reverse)
# String methods
kalimat = " Hello, Python Programming! "
print(f"upper: '{kalimat.upper()}'")
print(f"lower: '{kalimat.lower()}'")
print(f"strip: '{kalimat.strip()}'")
print(f"replace: '{kalimat.replace('Python', 'Java')}'")
# Split dan Join
data = "apel,jeruk,mangga,durian"
buah_list = data.split(',')
print(f"split: {buah_list}")
gabung_ulang = " - ".join(buah_list)
print(f"join: {gabung_ulang}")
# Cek string
email = "user@example.com"
print(f"email contains '@': {'@' in email}")
print(f"email startswith 'user': {email.startswith('user')}")
print(f"email endswith '.com': {email.endswith('.com')}")
# Format string (beberapa cara)
nama = "Budi"
umur = 20
# 1. f-string (Python 3.6+) - RECOMMENDED
print(f"Nama: {nama}, Umur: {umur}")
# 2. format() method
print("Nama: {}, Umur: {}".format(nama, umur))
# 3. % formatting (old style)
print("Nama: %s, Umur: %d" % (nama, umur))
# 4. Template string (jarang)
from string import Template
t = Template("Nama: $nama, Umur: $umur")
print(t.substitute(nama=nama, umur=umur))
# String length
print(f"Panjang string: {len(kalimat)}")
# Escape characters
print("Line 1\nLine 2") # newline
print("Column 1\tColumn 2") # tab
print("She said, \"Hello\"") # petik dalam string
# Raw string (ignore escape)
print(r"Line 1\nLine 2") # \n tidak di-escape
# Multiline string
multiline = """
Baris 1
Baris 2
Baris 3
"""
print(multiline)
7. List & Tuple
List
List adalah urutan item yang mutable (bisa diubah). List menggunakan kurung siku [].
buah = ["apel", "jeruk", "mangga"]
List methods:
append()- tambah item di akhirinsert()- tambah di posisi tertenturemove()- hapus item pertama yang matchpop()- hapus dan return item di indeksindex()- cari indeks itemsort()- urutkan listreverse()- balik urutan
Tuple
Tuple mirip list, tapi immutable (tidak bisa diubah). Tuple menggunakan kurung biasa ().
koordinat = (10, 20)
# Membuat list
buah = ["apel", "jeruk", "mangga"]
angka = [1, 2, 3, 4, 5]
campuran = ["teks", 123, 3.14, True]
list_dalam_list = [[1,2], [3,4], [5,6]]
print(f"buah: {buah}")
print(f"angka: {angka}")
print(f"campuran: {campuran}")
# Akses item (indexing)
print(f"buah[0]: {buah[0]}")
print(f"buah[-1]: {buah[-1]}") # item terakhir
# Slicing list
print(f"angka[1:4]: {angka[1:4]}")
print(f"angka[:3]: {angka[:3]}")
print(f"angka[::2]: {angka[::2]}") # step 2
# Mengubah item (karena mutable)
buah[1] = "durian"
print(f"setelah diubah: {buah}")
# List methods
buah.append("nanas")
print(f"after append: {buah}")
buah.insert(1, "strawberry")
print(f"after insert: {buah}")
buah.remove("apel")
print(f"after remove: {buah}")
item_terakhir = buah.pop()
print(f"pop: {item_terakhir}, sisa: {buah}")
angka.sort()
print(f"sorted ascending: {angka}")
angka.sort(reverse=True)
print(f"sorted descending: {angka}")
angka.reverse()
print(f"reversed: {angka}")
# List comprehension
kuadrat = [x**2 for x in range(1, 6)]
print(f"kuadrat 1-5: {kuadrat}")
genap = [x for x in range(1, 11) if x % 2 == 0]
print(f"bilangan genap 1-10: {genap}")
# Operasi list
list1 = [1, 2, 3]
list2 = [4, 5, 6]
gabung = list1 + list2
print(f"concatenation: {gabung}")
repeat = [0] * 5
print(f"repetition: {repeat}")
# Cek keberadaan
print(f"apakah 3 ada di list1? {3 in list1}")
print(f"apakah 10 ada di list1? {10 in list1}")
# Panjang list
print(f"panjang buah: {len(buah)}")
# Iterasi list
for item in buah:
print(f"- {item}")
for i, item in enumerate(buah):
print(f"{i}: {item}")
# Copy list (hati-hati)
list_asli = [1, 2, 3]
list_reference = list_asli # ini referensi, bukan copy
list_copy = list_asli.copy() # copy benar
list_slicing = list_asli[:] # copy dengan slicing
list_asli[0] = 99
print(f"asli: {list_asli}")
print(f"reference: {list_reference}") # ikut berubah
print(f"copy: {list_copy}") # tidak berubah
# Membuat tuple
point = (10, 20)
warna = (255, 128, 0)
campuran = ("teks", 123, True)
kosong = ()
single = (5,) # koma penting untuk tuple satu elemen
print(f"point: {point}")
print(f"warna: {warna}")
print(f"campuran: {campuran}")
# Akses item (sama seperti list)
print(f"point[0]: {point[0]}")
print(f"point[-1]: {point[-1]}")
# Slicing
print(f"warna[1:]: {warna[1:]}")
# Tuple immutable - tidak bisa diubah!
# point[0] = 5 # ERROR!
# Tuple bisa berisi mutable object
t = ([1,2], [3,4])
t[0].append(99) # ini OK, yang diubah isi list, bukan tuple
print(f"t: {t}")
# Packing and unpacking
koordinat = 100, 200 # tuple packing
x, y = koordinat # tuple unpacking
print(f"x={x}, y={y}")
# Swap variable pakai tuple
a, b = 5, 10
a, b = b, a
print(f"a={a}, b={b}")
# Return multiple values dari function
def get_dimensions():
return 1920, 1080
width, height = get_dimensions()
print(f"{width}x{height}")
# Tuple methods
t = (1, 2, 3, 2, 4, 2)
print(f"count 2: {t.count(2)}")
print(f"index of 3: {t.index(3)}")
# Kapan pakai tuple vs list
# - Gunakan tuple untuk data yang tidak berubah (immutable)
# - Gunakan list untuk data yang berubah
# Tuple sebagai key dictionary (list tidak bisa)
lokasi = {(40.7128, -74.0060): "New York", (51.5074, -0.1278): "London"}
print(lokasi[(40.7128, -74.0060)])
# Named tuple (seperti struct sederhana)
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(f"p.x={p.x}, p.y={p.y}")
8. Dictionary & Set
Dictionary
Dictionary adalah struktur data key-value (mapping). Menggunakan kurung kurawal {}.
siswa = {"nama": "Budi", "umur": 20}
Dictionary methods:
keys()- semua keysvalues()- semua valuesitems()- semua pasangan (key, value)get()- ambil value (aman, tidak error jika key tidak ada)update()- update dengan dictionary lainpop()- hapus key dan return value
Set
Set adalah kumpulan item unik (tidak ada duplikat) dan tidak berurutan.
angka = {1, 2, 3, 4, 5}
Set operations:
union()atau|- gabunganintersection()atau&- irisandifference()atau-- selisihsymmetric_difference()atau^- irisan terbalik
# Membuat dictionary
siswa = {
"nama": "Budi",
"umur": 20,
"jurusan": "Informatika",
"nilai": [85, 90, 78]
}
print(f"siswa: {siswa}")
# Akses value
print(f"nama: {siswa['nama']}")
print(f"umur: {siswa['umur']}")
# get() - aman (tidak error jika key tidak ada)
print(f"alamat: {siswa.get('alamat', 'tidak ada')}")
# Mengubah value
siswa["umur"] = 21
print(f"setelah diubah: {siswa}")
# Menambah key baru
siswa["alamat"] = "Jakarta"
print(f"setelah ditambah: {siswa}")
# Hapus key
del siswa["nilai"]
print(f"setelah dihapus: {siswa}")
# pop() - hapus dan return value
jurusan = siswa.pop("jurusan")
print(f"jurusan yang dihapus: {jurusan}")
print(f"sisa: {siswa}")
# Dictionary methods
print(f"keys: {list(siswa.keys())}")
print(f"values: {list(siswa.values())}")
print(f"items: {list(siswa.items())}")
# Iterasi dictionary
for key, value in siswa.items():
print(f"{key}: {value}")
# Cek key
print(f"apakah ada key 'nama'? {'nama' in siswa}")
print(f"apakah ada key 'umur'? {'umur' in siswa}")
# Dictionary comprehension
kuadrat = {x: x**2 for x in range(1, 6)}
print(f"kuadrat: {kuadrat}")
# Nested dictionary
mahasiswa = {
"budi": {"umur": 20, "ipk": 3.5},
"ani": {"umur": 21, "ipk": 3.8},
"citra": {"umur": 19, "ipk": 3.9}
}
print(f"IPK Budi: {mahasiswa['budi']['ipk']}")
# Merge dictionaries (Python 3.9+)
d1 = {"a": 1, "b": 2}
d2 = {"c": 3, "d": 4}
d3 = d1 | d2 # union operator
print(f"merged: {d3}")
# update()
d1.update(d2)
print(f"after update: {d1}")
# Default dictionary
from collections import defaultdict
dd = defaultdict(int) # default value 0 untuk int
dd["a"] += 1
dd["b"] += 2
print(f"defaultdict: {dict(dd)}")
# Membuat set
angka = {1, 2, 3, 4, 5}
buah = {"apel", "jeruk", "mangga"}
campuran = {1, "teks", 3.14, True}
print(f"angka: {angka}")
print(f"buah: {buah}")
# Set otomatis menghilangkan duplikat
duplikat = {1, 2, 2, 3, 3, 3, 4}
print(f"duplikat: {duplikat}") # {1, 2, 3, 4}
# Membuat set dari list
list_angka = [1, 2, 2, 3, 3, 4]
set_dari_list = set(list_angka)
print(f"set dari list: {set_dari_list}")
# Menambah item
buah.add("durian")
print(f"after add: {buah}")
# Menambah multiple items
buah.update(["nanas", "strawberry"])
print(f"after update: {buah}")
# Menghapus item
buah.remove("apel") # error jika tidak ada
buah.discard("apel") # aman, tidak error
buah.pop() # hapus item acak
buah.clear() # hapus semua
# Set operations
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
print(f"A: {A}")
print(f"B: {B}")
print(f"Union (A | B): {A | B}")
print(f"Intersection (A & B): {A & B}")
print(f"Difference (A - B): {A - B}")
print(f"Difference (B - A): {B - A}")
print(f"Symmetric diff (A ^ B): {A ^ B}")
# Cek subset/superset
C = {1, 2, 3}
print(f"C subset A? {C.issubset(A)}")
print(f"A superset C? {A.issuperset(C)}")
print(f"Disjoint? {A.isdisjoint(B)}") # False (ada irisan)
# Set comprehension
genap = {x for x in range(1, 11) if x % 2 == 0}
print(f"genap: {genap}")
# Frozenset (immutable set)
fs = frozenset([1, 2, 3])
# fs.add(4) # ERROR! frozenset tidak bisa diubah
# Menghapus duplikat dari list
nama = ["budi", "ani", "budi", "citra", "ani"]
unik = list(set(nama))
print(f"nama unik: {unik}")
# Mencari item yang sama di dua list
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
sama = set(list1) & set(list2)
print(f"item yang sama: {sama}")
9. Control Flow (Percabangan)
if-elif-else
if kondisi1:
# kode
elif kondisi2:
# kode
else:
# kode
Python tidak memiliki switch statement seperti C/Java. Gunakan if-elif-else atau match-case (Python 3.10+).
match-case (Python 3.10+)
Mirip switch di bahasa lain, tapi lebih powerful (pattern matching).
# if-elif-else dasar
nilai = 85
if nilai >= 90:
grade = 'A'
print("Excellent!")
elif nilai >= 80:
grade = 'B'
print("Good job!")
elif nilai >= 70:
grade = 'C'
print("Not bad")
elif nilai >= 60:
grade = 'D'
print("Need improvement")
else:
grade = 'E'
print("Failed")
print(f"Grade: {grade}")
# Multiple kondisi dengan and/or
umur = 20
memiliki_sim = True
if umur >= 17 and memiliki_sim:
print("Boleh mengemudi")
elif umur >= 17 and not memiliki_sim:
print("Belum punya SIM")
else:
print("Belum cukup umur")
# Ternary operator
status = "dewasa" if umur >= 17 else "anak-anak"
print(f"Status: {status}")
# Truthy and Falsy values
# Falsy: None, False, 0, 0.0, '' (string kosong), [], {}, set(), ()
nama = ""
if nama:
print(f"Halo, {nama}")
else:
print("Nama tidak diisi")
# Nested if
x = 10
y = 5
if x > 0:
if y > 0:
print("x dan y positif")
else:
print("x positif, y negatif")
else:
print("x negatif")
# Menggunakan in untuk multiple checks
huruf = 'a'
if huruf in 'aeiou':
print(f"{huruf} adalah vokal")
else:
print(f"{huruf} adalah konsonan")
# Short-circuit evaluation
def divide(a, b):
if b != 0 and a/b > 10:
return "Besar"
return "Kecil"
print(divide(20, 2))
# match-case dasar (seperti switch)
def get_day_name(day):
match day:
case 1:
return "Senin"
case 2:
return "Selasa"
case 3:
return "Rabu"
case 4:
return "Kamis"
case 5:
return "Jumat"
case 6:
return "Sabtu"
case 7:
return "Minggu"
case _: # default case
return "Hari tidak valid"
print(get_day_name(3))
# Match dengan multiple patterns
def check_value(x):
match x:
case 0:
print("Nol")
case 1 | 2 | 3: # multiple patterns
print("Kecil")
case 4 | 5 | 6:
print("Sedang")
case _:
print("Besar")
check_value(2)
# Match dengan kondisi (guard)
def process_number(x):
match x:
case x if x < 0:
print(f"{x} negatif")
case x if x == 0:
print("Nol")
case x if x > 0:
print(f"{x} positif")
process_number(-5)
# Match dengan tuple (destructuring)
point = (10, 20)
match point:
case (0, 0):
print("Origin")
case (0, y):
print(f"X=0, Y={y}")
case (x, 0):
print(f"X={x}, Y=0")
case (x, y):
print(f"X={x}, Y={y}")
# Match dengan object
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(10, 20)
match p:
case Point(x=0, y=0):
print("Origin")
case Point(x=x, y=y):
print(f"Point at ({x}, {y})")
# Match dengan list
items = ["apple", 5, 3.14]
match items:
case [str(name), int(quantity), float(price)]:
print(f"Product: {name}, Qty: {quantity}, Price: {price}")
case _:
print("Format tidak sesuai")
10. Perulangan (Loops)
for loop
for loop di Python digunakan untuk iterasi over sequence (list, tuple, string, range, dll).
for item in sequence:
# kode
while loop
while kondisi:
# kode
Kontrol loop:
break- keluar dari loopcontinue- skip iterasi saat inielsepada loop - dijalankan jika loop selesai tanpa break
# For loop dengan range
print("range(5):")
for i in range(5): # 0-4
print(i, end=" ")
print()
print("\nrange(1, 6):")
for i in range(1, 6): # 1-5
print(i, end=" ")
print()
print("\nrange(1, 10, 2):") # step 2
for i in range(1, 10, 2):
print(i, end=" ")
print()
# For loop dengan list
buah = ["apel", "jeruk", "mangga", "durian"]
print("\nDaftar buah:")
for buah_item in buah:
print(f"- {buah_item}")
# For loop dengan enumerate (dapat index)
print("\nDengan index:")
for i, buah_item in enumerate(buah):
print(f"{i}: {buah_item}")
# For loop dengan string
kata = "Python"
print("\nKarakter dalam 'Python':")
for char in kata:
print(char, end=" ")
print()
# For loop dengan dictionary
siswa = {"nama": "Budi", "umur": 20, "jurusan": "Informatika"}
print("\nIterasi dictionary:")
for key, value in siswa.items():
print(f"{key}: {value}")
# For loop dengan zip (iterasi multiple sequences)
nama = ["Budi", "Ani", "Citra"]
umur = [20, 21, 19]
for n, u in zip(nama, umur):
print(f"{n} berumur {u} tahun")
# Nested for loop
print("\nTabel perkalian 3x3:")
for i in range(1, 4):
for j in range(1, 4):
print(f"{i*j:4}", end="")
print()
# While loop dasar
print("While loop:")
counter = 1
while counter <= 5:
print(f"Counter: {counter}")
counter += 1
# While dengan input user
print("\nTebak angka (0 untuk berhenti):")
angka = -1
while angka != 0:
angka = int(input("Masukkan angka: "))
if angka != 0:
print(f"Anda memasukkan {angka}")
# Break
print("\nBreak contoh:")
for i in range(1, 11):
if i == 5:
break
print(i, end=" ")
print("\nLoop berhenti di 5")
# Continue
print("\nContinue contoh (skip angka genap):")
for i in range(1, 11):
if i % 2 == 0:
continue
print(i, end=" ")
print()
# Else pada loop
print("\nLoop dengan else:")
for i in range(1, 4):
print(i)
else:
print("Loop selesai tanpa break")
print("\nLoop dengan break dan else:")
for i in range(1, 4):
if i == 2:
break
print(i)
else:
print("Tidak dijalankan karena break")
# Infinite loop (hati-hati!)
# while True:
# print("Forever...")
# while dengan kondisi kompleks
import random
target = random.randint(1, 10)
tebakan = 0
percobaan = 0
print("\nGame tebak angka (1-10):")
while tebakan != target:
tebakan = int(input("Tebakan Anda: "))
percobaan += 1
if tebakan < target:
print("Terlalu kecil")
elif tebakan > target:
print("Terlalu besar")
print(f"Benar! Anda menebak dalam {percobaan} percobaan")
# List comprehension (for loop dalam list)
kuadrat = [x**2 for x in range(1, 6)]
print(f"\nList comprehension: {kuadrat}")
# Generator expression (hemat memory)
genap = (x for x in range(1, 11) if x % 2 == 0)
print("Generator:", end=" ")
for num in genap:
print(num, end=" ")
print()
11. Functions
Definisi fungsi:
def nama_fungsi(parameter1, parameter2):
"""Docstring (opsional)"""
# body
return nilai
Jenis parameter:
- Positional arguments - berdasarkan posisi
- Keyword arguments - berdasarkan nama parameter
- Default parameters - nilai default jika tidak diberikan
- *args - variable-length positional arguments
- **kwargs - variable-length keyword arguments
Return value:
Fungsi bisa mengembalikan nilai dengan return. Jika tidak ada return, mengembalikan None.
# Fungsi sederhana
def sapa():
"""Fungsi untuk menyapa"""
print("Halo, selamat datang!")
sapa() # panggil fungsi
# Fungsi dengan parameter
def sapa_orang(nama):
print(f"Halo, {nama}!")
sapa_orang("Budi")
sapa_orang("Ani")
# Fungsi dengan return value
def tambah(a, b):
return a + b
hasil = tambah(5, 3)
print(f"5 + 3 = {hasil}")
# Multiple return values
def operasi_dasar(a, b):
tambah = a + b
kurang = a - b
kali = a * b
bagi = a / b
return tambah, kurang, kali, bagi # return tuple
t, k, kali, b = operasi_dasar(10, 3)
print(f"10+3={t}, 10-3={k}, 10*3={kali}, 10/3={b:.2f}")
# Default parameter
def pangkat(angka, pangkat=2):
return angka ** pangkat
print(f"3^2 = {pangkat(3)}")
print(f"3^3 = {pangkat(3, 3)}")
# Keyword arguments
def biodata(nama, umur, kota):
print(f"Nama: {nama}")
print(f"Umur: {umur}")
print(f"Kota: {kota}")
biodata(umur=20, nama="Budi", kota="Jakarta") # urutan bisa diubah
# *args (arbitrary positional arguments)
def jumlahkan(*args):
"""Menjumlahkan semua argumen"""
total = 0
for angka in args:
total += angka
return total
print(f"jumlah(1,2,3) = {jumlahkan(1, 2, 3)}")
print(f"jumlah(1,2,3,4,5) = {jumlahkan(1, 2, 3, 4, 5)}")
# **kwargs (arbitrary keyword arguments)
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(nama="Budi", umur=20, pekerjaan="Developer")
# Kombinasi
def complex_func(a, b, *args, **kwargs):
print(f"a={a}, b={b}")
print(f"args: {args}")
print(f"kwargs: {kwargs}")
complex_func(1, 2, 3, 4, 5, x=10, y=20)
# Lambda (anonymous function)
kuadrat = lambda x: x**2
print(f"kuadrat 5: {kuadrat(5)}")
# Lambda dengan multiple arguments
tambah = lambda a, b: a + b
print(f"tambah 3,5: {tambah(3, 5)}")
# Fungsi sebagai parameter
def apply_func(func, value):
return func(value)
print(apply_func(lambda x: x*2, 10))
print(apply_func(lambda x: x**3, 3))
# Fungsi di dalam fungsi (inner function)
def luar(x):
def dalam(y):
return y * x
return dalam
kali_2 = luar(2)
kali_3 = luar(3)
print(f"kali_2(5) = {kali_2(5)}")
print(f"kali_3(5) = {kali_3(5)}")
# Decorator sederhana
def decorator(func):
def wrapper(*args, **kwargs):
print("Sebelum fungsi dijalankan")
hasil = func(*args, **kwargs)
print("Setelah fungsi dijalankan")
return hasil
return wrapper
@decorator
def say_hello(nama):
print(f"Halo, {nama}!")
say_hello("Budi")
# Fungsi rekursif
def faktorial(n):
if n <= 1:
return 1
return n * faktorial(n - 1)
print(f"5! = {faktorial(5)}")
# Fungsi fibonacci
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
print("Fibonacci 0-5:")
for i in range(6):
print(f"fib({i}) = {fibonacci(i)}")
# Fungsi dengan type hints (Python 3.5+)
def greet(nama: str, umur: int) -> str:
return f"{nama} berumur {umur} tahun"
print(greet("Budi", 20))
# Docstring
def hitung_luas_persegi_panjang(panjang, lebar):
"""
Menghitung luas persegi panjang.
Args:
panjang (float): panjang persegi
lebar (float): lebar persegi
Returns:
float: luas persegi panjang
"""
return panjang * lebar
help(hitung_luas_persegi_panjang) # menampilkan docstring
12. Modules & Packages
Module
Module adalah file Python (.py) yang berisi fungsi, class, dan variabel yang bisa diimpor.
Cara import module:
import math from math import sqrt, pi import numpy as np from mymodule import * # tidak direkomendasikan
Package
Package adalah folder yang berisi module-module Python dan file __init__.py.
Struktur package:
mypackage/
__init__.py
module1.py
module2.py
subpackage/
__init__.py
module3.py
Standard Library populer:
math- fungsi matematikarandom- generate angka randomdatetime- tanggal dan waktuos- operasi sistemsys- system-specific parametersjson- bekerja dengan JSONre- regular expressioncollections- data structures tambahan
# Import module standar
import math
import random
import datetime
import os
import sys
import json
# math module
print(f"pi = {math.pi}")
print(f"sqrt(16) = {math.sqrt(16)}")
print(f"sin(90) = {math.sin(math.radians(90))}")
# random module
print(f"Random 0-1: {random.random()}")
print(f"Random int 1-10: {random.randint(1, 10)}")
print(f"Random choice: {random.choice(['apel', 'jeruk', 'mangga'])}")
# datetime module
sekarang = datetime.datetime.now()
print(f"Sekarang: {sekarang}")
print(f"Tanggal: {sekarang.strftime('%d/%m/%Y')}")
print(f"Waktu: {sekarang.strftime('%H:%M:%S')}")
# os module
print(f"Current directory: {os.getcwd()}")
print(f"Files: {os.listdir('.')[:5]}") # 5 file pertama
# sys module
print(f"Python version: {sys.version}")
print(f"Platform: {sys.platform}")
# json module
data = {"nama": "Budi", "umur": 20, "hobi": ["coding", "membaca"]}
json_str = json.dumps(data, indent=2)
print(f"JSON:\n{json_str}")
data_kembali = json.loads(json_str)
print(f"Data kembali: {data_kembali}")
# Import dengan alias
import math as m
print(f"pi (alias): {m.pi}")
# Import fungsi spesifik
from math import sqrt, pow
print(f"sqrt(25): {sqrt(25)}")
print(f"pow(2,3): {pow(2, 3)}")
# Membuat module sendiri
# Buat file mymodule.py:
"""
# mymodule.py
def halo(nama):
return f"Halo, {nama}!"
PI = 3.14159
"""
# Import module sendiri
# import mymodule
# print(mymodule.halo("Budi"))
# print(mymodule.PI)
# __name__ == "__main__"
if __name__ == "__main__":
print("File ini dijalankan langsung")
else:
print("File ini diimpor sebagai module")
# Membuat package sederhana
"""
mypackage/
__init__.py
matematika.py
string_util.py
"""
# isi __init__.py (bisa kosong)
# from .matematika import tambah, kali
# from .string_util import upper, lower
# Install package dengan pip
# pip install requests
# pip install numpy pandas matplotlib
# Contoh import third-party package
try:
import requests
response = requests.get("https://api.github.com")
print(f"Status code: {response.status_code}")
except ImportError:
print("requests tidak terinstall. Install dengan: pip install requests")
# Mengetahui lokasi module
import math
print(f"Lokasi module math: {math.__file__}")
# Mengetahui fungsi dalam module
print(dir(math)[:10]) # 10 fungsi pertama dalam math
# Reload module
import importlib
import mymodule
importlib.reload(mymodule)
- Object-Oriented Programming (OOP) di Python
- File I/O
- Exception Handling
- Generators dan Decorators
- Context Managers (with statement)
- Multithreading & Multiprocessing
- Web Development dengan Flask/Django
- Data Science dengan NumPy, Pandas, Matplotlib