Pemrograman Python dari nol sampai mahir, langkah demi langkah.
Mari kita mulai dengan peta belajar (roadmap) agar jelas jalurnya:
🛠 Roadmap Belajar Python
1. Dasar-Dasar Python
-
Apa itu Python & mengapa dipakai?
-
Instalasi Python (Windows/Linux/Android via Termux/Jupyter/Google Colab)
-
Menjalankan program Python pertama:
print("Hello, World!") -
Variabel & tipe data (string, integer, float, boolean)
-
Operator (aritmatika, logika, perbandingan)
2. Struktur Program
-
Input & Output
-
Percabangan (
if,elif,else) -
Perulangan (
for,while) -
List, Tuple, Dictionary, Set
3. Fungsi & Modularisasi
-
Membuat fungsi (
def) -
Parameter & return value
-
Import modul bawaan Python
4. Pemrograman Lanjutan
-
File handling (membaca & menulis file)
-
Exception (try-except)
-
Object Oriented Programming (class & object)
5. Library Populer
-
math&datetime(perhitungan & waktu) -
pandas&numpy(data & sains) -
matplotlib(grafik & visualisasi) -
flask/django(web development) -
tensorflow/pytorch(AI & machine learning)
6. Proyek Kecil (Mini Project)
-
Kalkulator sederhana
-
Aplikasi catatan
-
Game kecil (misal tebak angka)
-
Analisis data sederhana
7. Proyek Lebih Besar
-
Web app sederhana (misal: buku tamu online)
-
Bot Telegram / WhatsApp
-
Aplikasi AI (misal: chatbot, klasifikasi gambar)
📌 Cara Belajar yang Efektif
-
Belajar teori → langsung praktek (minimal coba kode di laptop/HP).
-
Buat catatan singkat (syntax penting).
-
Latih dengan challenge kecil setiap hari.
-
Buat proyek nyata agar termotivasi.
👉 Pertanyaanku buatmu:
Mau mulai dari instalasi Python (supaya bisa langsung praktek), atau mau buatkan dulu tutorial teori + contoh kode dasar langsung di sini?
Melanjutkan dengan penjelasan praktis + contoh kode dasar Python supaya kamu bisa langsung praktek.
🔹 Bagian 1: Instalasi & Menjalankan Python
📌 Opsi Belajar Python
-
Laptop/PC
-
Download dari python.org
-
Setelah install, buka terminal/cmd → ketik:
python --versionJika muncul versi (misal
Python 3.12.4), berarti sukses. -
Jalankan:
pythonlalu ketik kode Python langsung.
-
-
Android (praktis tanpa laptop)
-
Install aplikasi Pydroid 3 (gratis di Playstore) → langsung bisa coding.
-
Atau gunakan Google Colab (via browser) → gratis, berbasis cloud.
-
🔹 Bagian 2: Program Pertama
Coba jalankan kode berikut:
print("Hello, World!")
👉 Output:
Hello, World!
Artinya Python sudah berjalan! 🎉
🔹 Bagian 3: Variabel & Tipe Data
Python bisa menyimpan berbagai jenis data:
# Angka
x = 10 # integer
y = 3.14 # float
# Teks
nama = "Budi" # string
# Boolean (benar/salah)
status = True
print(x, y, nama, status)
👉 Output:
10 3.14 Budi True
🔹 Bagian 4: Operator Dasar
a = 10
b = 3
print("Penjumlahan:", a + b) # 13
print("Pengurangan:", a - b) # 7
print("Perkalian:", a * b) # 30
print("Pembagian:", a / b) # 3.333...
print("Modulus:", a % b) # 1
🔹 Bagian 5: Percabangan (if-else)
nilai = 85
if nilai >= 90:
print("A")
elif nilai >= 75:
print("B")
else:
print("C")
👉 Output:
B
🔹 Bagian 6: Perulangan
# For loop
for i in range(5):
print("Perulangan ke-", i)
# While loop
n = 3
while n > 0:
print("Hitung mundur:", n)
n -= 1
👉 Output:
Perulangan ke- 0
Perulangan ke- 1
Perulangan ke- 2
Perulangan ke- 3
Perulangan ke- 4
Hitung mundur: 3
Hitung mundur: 2
Hitung mundur: 1
🔹 Bagian 7: Mini Project Pertama (Tebak Angka)
import random
angka_rahasia = random.randint(1, 10)
tebakan = int(input("Tebak angka (1-10): "))
if tebakan == angka_rahasia:
print("Benar! Angkanya adalah", angka_rahasia)
else:
print("Salah! Angkanya adalah", angka_rahasia)
👉 Program ini akan memilih angka acak dari 1–10, lalu kamu menebak.
✨ Dengan ini kamu sudah punya dasar Python: variabel, operator, if-else, loop, input-output, bahkan mini project.
Kalau mau, bisa lanjutkan ke Bagian 8: Struktur Data (List, Tuple, Dictionary, Set), atau kita fokus dulu di latihan dasar + challenge coding agar kamu terbiasa menulis kode.
Lanjutkan ke materi struktur data, atau buatkan dulu latihan soal pemrograman Python level dasar untuk kamu kerjakan.
Sekarang kita masuk ke Bagian 8: Struktur Data di Python. Ini penting banget, karena hampir semua program nantinya akan pakai list, tuple, dictionary, dan set untuk menyimpan dan mengolah data.
🔹 Bagian 8: Struktur Data Python
1. List (daftar/array dinamis)
List dipakai untuk menyimpan banyak data dalam satu variabel.
buah = ["apel", "jeruk", "mangga"]
print(buah) # ['apel', 'jeruk', 'mangga']
print(buah[0]) # apel
print(len(buah)) # 3
buah.append("pisang") # tambah data
print(buah) # ['apel', 'jeruk', 'mangga', 'pisang']
👉 List bisa diubah isinya (mutable).
2. Tuple (daftar tetap)
Tuple mirip list, tapi tidak bisa diubah isinya.
warna = ("merah", "hijau", "biru")
print(warna[1]) # hijau
# warna[1] = "kuning" ❌ (akan error karena tuple immutable)
👉 Cocok untuk data yang sifatnya tetap.
3. Dictionary (kamus data)
Menyimpan data dalam bentuk key → value.
mahasiswa = {
"nama": "Budi",
"umur": 20,
"jurusan": "Informatika"
}
print(mahasiswa["nama"]) # Budi
print(mahasiswa.get("umur")) # 20
# ubah data
mahasiswa["umur"] = 21
print(mahasiswa)
👉 Cocok untuk data berpasangan (misalnya nama → umur).
4. Set (himpunan unik)
Set menyimpan data tanpa duplikasi dan tidak berurutan.
angka = {1, 2, 3, 3, 4}
print(angka) # {1, 2, 3, 4}
angka.add(5)
angka.remove(2)
print(angka) # {1, 3, 4, 5}
👉 Cocok untuk data unik (misalnya ID user, kumpulan kata, dll).
🔹 Bagian 9: Fungsi di Python
Fungsi digunakan untuk membuat kode yang bisa dipakai ulang.
def sapa(nama):
return "Halo, " + nama
print(sapa("Ani")) # Halo, Ani
print(sapa("Budi")) # Halo, Budi
👉 Fungsi bisa menerima input (parameter) dan mengembalikan output (return value).
🔹 Bagian 10: Mini Project – Penghitung Nilai Rata-Rata
def hitung_rata_rata(nilai):
return sum(nilai) / len(nilai)
daftar_nilai = [80, 90, 75, 85]
rata = hitung_rata_rata(daftar_nilai)
print("Nilai:", daftar_nilai)
print("Rata-rata:", rata)
👉 Output:
Nilai: [80, 90, 75, 85]
Rata-rata: 82.5
Dengan ini kamu sudah menguasai:
-
Tipe data dasar
-
Struktur data (list, tuple, dictionary, set)
-
Fungsi
Langkah berikutnya kita bisa masuk ke Bagian 11: File Handling & Exception (try-except), atau dibuatkan kamu latihan soal Python dengan tingkat kesulitan bertahap supaya makin mantap.
👉 Mau lanjutkan ke materi File Handling dulu, atau kita buat latihan soal dasar-menengah biar kamu bisa langsung praktek?
Lanjutkan lagi ke Bagian 11: File Handling & Exception Handling di Python 📝⚡
Ini sangat penting, karena dalam dunia nyata, program Python sering harus membaca/menulis file, serta harus bisa menangani error agar tidak mudah crash.
🔹 Bagian 11: File Handling (Membaca & Menulis File)
1. Menulis ke file
# Membuat file baru (atau menimpa jika sudah ada)
with open("data.txt", "w") as file:
file.write("Halo, ini baris pertama!\n")
file.write("Halo, ini baris kedua!\n")
👉 File data.txt akan berisi:
Halo, ini baris pertama! Halo, ini baris kedua!
2. Membaca file
with open("data.txt", "r") as file:
isi = file.read()
print(isi)
👉 Output:
Halo, ini baris pertama! Halo, ini baris kedua!
3. Membaca baris per baris
with open("data.txt", "r") as file:
for baris in file:
print("Isi baris:", baris.strip())
👉 Output:
Isi baris: Halo, ini baris pertama!
Isi baris: Halo, ini baris kedua!
4. Menambahkan (append) data ke file
with open("data.txt", "a") as file:
file.write("Baris tambahan!\n")
👉 Sekarang file data.txt akan punya 3 baris.
🔹 Bagian 12: Exception Handling (Try-Except)
Python akan error (crash) jika ada masalah, misalnya file tidak ditemukan.
Dengan try-except, kita bisa mengendalikan error.
1. Contoh tanpa exception:
file = open("tidak_ada.txt", "r") # ❌ Error: FileNotFoundError
2. Dengan try-except:
try:
with open("tidak_ada.txt", "r") as file:
isi = file.read()
print(isi)
except FileNotFoundError:
print("File tidak ditemukan!")
👉 Output:
File tidak ditemukan!
3. Multiple exception
try:
angka = int("abc") # ❌ ValueError
except FileNotFoundError:
print("File tidak ada!")
except ValueError:
print("Input tidak valid, harus angka!")
👉 Output:
Input tidak valid, harus angka!
🔹 Bagian 13: Mini Project – Catatan Harian
def tambah_catatan(teks):
with open("catatan.txt", "a") as file:
file.write(teks + "\n")
def baca_catatan():
try:
with open("catatan.txt", "r") as file:
isi = file.readlines()
for i, baris in enumerate(isi, start=1):
print(f"{i}. {baris.strip()}")
except FileNotFoundError:
print("Belum ada catatan!")
# Contoh penggunaan
tambah_catatan("Hari ini belajar Python file handling")
tambah_catatan("Besok belajar OOP Python")
print("Daftar Catatan:")
baca_catatan()
👉 Output:
Daftar Catatan:
1. Hari ini belajar Python file handling
2. Besok belajar OOP Python
Dengan ini, kamu sudah bisa:
-
Membuat & membaca file
-
Menambahkan data ke file
-
Menangani error dengan
try-except
✨ Langkah berikutnya kita masuk ke Bagian 14: OOP (Object-Oriented Programming), yaitu cara berpikir Python yang lebih “tinggi” untuk membangun program besar.
Mau aku lanjutkan ke OOP Python sekarang, atau kamu ingin aku buatkan latihan soal tentang file handling & exception biar lebih mantap dulu.
Kita lanjutkan ke Bagian 14: Pemrograman Berorientasi Objek (OOP) di Python 🧩
OOP penting sekali kalau kamu ingin membuat program yang besar, rapi, modular, dan mudah dikembangkan. Hampir semua framework Python (Django, Flask, TensorFlow, PyTorch, dll) dibangun dengan OOP.
🔹 Bagian 14: Konsep Dasar OOP di Python
OOP punya 4 konsep utama (sering disebut 4 Pilar OOP):
-
Class → Cetakan/Blueprint objek
-
Object → Hasil nyata dari class
-
Encapsulation → Membungkus data & fungsi dalam satu kesatuan
-
Inheritance → Pewarisan sifat dari class induk ke class anak
-
Polymorphism → Satu fungsi bisa punya banyak bentuk (misalnya overriding)
1. Membuat Class & Object
class Mahasiswa:
def __init__(self, nama, nim):
self.nama = nama
self.nim = nim
def info(self):
return f"Nama: {self.nama}, NIM: {self.nim}"
# Membuat objek dari class
m1 = Mahasiswa("Budi", "12345")
m2 = Mahasiswa("Ani", "67890")
print(m1.info())
print(m2.info())
👉 Output:
Nama: Budi, NIM: 12345
Nama: Ani, NIM: 67890
__init__ adalah constructor, otomatis dipanggil saat object dibuat.
2. Encapsulation (Menyembunyikan data)
class RekeningBank:
def __init__(self, pemilik, saldo):
self.pemilik = pemilik
self.__saldo = saldo # atribut private
def lihat_saldo(self):
return f"Saldo {self.pemilik}: Rp{self.__saldo}"
def setor(self, jumlah):
self.__saldo += jumlah
def tarik(self, jumlah):
if jumlah <= self.__saldo:
self.__saldo -= jumlah
else:
print("Saldo tidak cukup!")
# Penggunaan
r1 = RekeningBank("Andi", 1000000)
print(r1.lihat_saldo())
r1.setor(500000)
print(r1.lihat_saldo())
r1.tarik(2000000) # saldo tidak cukup
👉 Atribut __saldo tidak bisa diakses langsung (r1.__saldo ❌).
3. Inheritance (Pewarisan)
class Kendaraan:
def __init__(self, merk):
self.merk = merk
def info(self):
return f"Kendaraan merk {self.merk}"
# Class Motor mewarisi Kendaraan
class Motor(Kendaraan):
def __init__(self, merk, cc):
super().__init__(merk)
self.cc = cc
def info(self):
return f"Motor {self.merk} dengan {self.cc} cc"
# Penggunaan
k1 = Kendaraan("Toyota")
m1 = Motor("Honda", 150)
print(k1.info())
print(m1.info())
👉 Output:
Kendaraan merk Toyota
Motor Honda dengan 150 cc
4. Polymorphism
Satu method bisa berbeda hasilnya tergantung siapa yang pakai.
class Burung:
def suara(self):
return "Cuit cuit"
class Ayam(Burung):
def suara(self):
return "Kukuruyuk!"
class Bebek(Burung):
def suara(self):
return "Kwek kwek"
# Polymorphism
burung_list = [Burung(), Ayam(), Bebek()]
for b in burung_list:
print(b.suara())
👉 Output:
Cuit cuit
Kukuruyuk!
Kwek kwek
🔹 Bagian 15: Mini Project – Sistem Perpustakaan (OOP)
class Buku:
def __init__(self, judul, penulis):
self.judul = judul
self.penulis = penulis
self.status = "tersedia"
def pinjam(self):
if self.status == "tersedia":
self.status = "dipinjam"
return f"Buku '{self.judul}' berhasil dipinjam."
else:
return f"Buku '{self.judul}' sedang dipinjam."
def kembalikan(self):
self.status = "tersedia"
return f"Buku '{self.judul}' sudah dikembalikan."
class Perpustakaan:
def __init__(self):
self.daftar_buku = []
def tambah_buku(self, buku):
self.daftar_buku.append(buku)
def lihat_buku(self):
for b in self.daftar_buku:
print(f"{b.judul} - {b.penulis} ({b.status})")
# Penggunaan
b1 = Buku("Python Dasar", "Guido van Rossum")
b2 = Buku("Machine Learning", "Andrew Ng")
perpus = Perpustakaan()
perpus.tambah_buku(b1)
perpus.tambah_buku(b2)
perpus.lihat_buku()
print(b1.pinjam())
perpus.lihat_buku()
print(b1.kembalikan())
perpus.lihat_buku()
👉 Output:
Python Dasar - Guido van Rossum (tersedia)
Machine Learning - Andrew Ng (tersedia)
Buku 'Python Dasar' berhasil dipinjam.
Python Dasar - Guido van Rossum (dipinjam)
Machine Learning - Andrew Ng (tersedia)
Buku 'Python Dasar' sudah dikembalikan.
Python Dasar - Guido van Rossum (tersedia)
Machine Learning - Andrew Ng (tersedia)
Dengan ini, kamu sudah menguasai dasar OOP di Python 🎉
Biasanya setelah OOP, kita lanjut ke:
-
Bagian 16: Modul & Package (cara mengatur file besar jadi modular)
-
Bagian 17: Library Populer (numpy, pandas, matplotlib, dll)
-
Bagian 18: Proyek nyata (data analysis, web app, AI, dsb.)
👉 Mau aku lanjutkan ke Modul & Package (Bagian 16) atau kamu ingin aku buatkan latihan soal OOP (class-object) dulu supaya lebih mantap.
Sekarang masuk ke Bagian 16: Modul & Package dalam Python.
Ini adalah langkah penting setelah OOP, karena program yang besar biasanya tidak cukup ditulis di satu file. Kita perlu memecah kode ke beberapa file (modul) dan mengatur folder (package) agar lebih rapi dan mudah dikelola.
🔹 Bagian 16: Modul & Package Python
1. Apa itu Modul?
👉 Modul adalah file Python (.py) yang berisi fungsi, class, atau variabel, lalu bisa dipanggil dari file lain.
Contoh:
Buat file matematika.py:
def tambah(a, b):
return a + b
def kali(a, b):
return a * b
Lalu, buat file lain main.py:
import matematika
print(matematika.tambah(3, 4)) # 7
print(matematika.kali(3, 4)) # 12
2. Import dengan alias
import matematika as m
print(m.tambah(10, 5)) # 15
3. Import sebagian fungsi
from matematika import tambah
print(tambah(7, 8)) # 15
4. Apa itu Package?
👉 Package adalah folder yang berisi banyak modul.
Syaratnya, di dalam folder ada file __init__.py (boleh kosong).
Struktur folder:
myproject/
main.py
perhitungan/
__init__.py
tambah.py
kali.py
tambah.py
def tambah(a, b):
return a + b
kali.py
def kali(a, b):
return a * b
main.py
from perhitungan import tambah, kali
print(tambah.tambah(2, 3)) # 5
print(kali.kali(2, 3)) # 6
5. Package dari Pihak Ketiga
Selain modul buatan sendiri, Python punya ribuan library (package siap pakai) yang bisa dipasang lewat pip.
Contoh instalasi:
pip install requests
Penggunaan:
import requests
response = requests.get("https://api.github.com")
print(response.status_code)
🔹 Bagian 17: Mini Project – Package Kalkulator
📂 Struktur folder:
kalkulator/
__init__.py
operasi.py
util.py
main.py
operasi.py
def tambah(a, b):
return a + b
def kali(a, b):
return a * b
util.py
def cetak_hasil(hasil):
print("Hasil:", hasil)
main.py
from kalkulator import operasi, util
h1 = operasi.tambah(10, 5)
h2 = operasi.kali(4, 6)
util.cetak_hasil(h1) # Hasil: 15
util.cetak_hasil(h2) # Hasil: 24
📌 Dengan ini kamu sudah bisa:
-
Membuat modul sendiri
-
Menggunakan package (buatan sendiri atau dari orang lain)
-
Memahami cara program besar diatur agar rapi
✨ Berikutnya kita bisa masuk ke:
-
Bagian 18: Library Populer Python (numpy, pandas, matplotlib, dll, untuk data science & analisis)
-
atau Latihan soal membuat modul & package sendiri supaya lebih terbiasa.
👉 Kamu lebih ingin aku lanjutkan ke library populer Python (praktik data science) atau aku buatkan latihan soal tentang modul & package dulu.
Sekarang masuk ke Bagian 18: Library Populer di Python.
Setelah menguasai dasar, OOP, dan modul/package, langkah berikutnya adalah mengenal library populer yang membuat Python sangat kuat untuk berbagai bidang: data, visualisasi, web, dan AI.
🔹 Bagian 18: Library Populer Python
1. NumPy (Numerical Python)
👉 Digunakan untuk komputasi numerik, array multidimensi, dan operasi matematika cepat.
Contoh:
import numpy as np
# Membuat array
arr = np.array([1, 2, 3, 4, 5])
print("Array:", arr)
# Operasi matematis
print("Rata-rata:", np.mean(arr))
print("Jumlah:", np.sum(arr))
print("Akar kuadrat:", np.sqrt(arr))
2. Pandas (Data Analysis)
👉 Digunakan untuk mengolah data dalam bentuk tabel (seperti Excel/CSV).
Contoh:
import pandas as pd
# Membuat DataFrame
data = {
"Nama": ["Andi", "Budi", "Cici"],
"Nilai": [90, 85, 88]
}
df = pd.DataFrame(data)
print(df) # tampilkan tabel
print(df["Nilai"].mean()) # rata-rata nilai
👉 Output:
Nama Nilai
0 Andi 90
1 Budi 85
2 Cici 88
87.666...
3. Matplotlib (Visualisasi Data)
👉 Digunakan untuk membuat grafik sederhana.
Contoh:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y, marker="o")
plt.title("Grafik Contoh")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()
👉 Akan muncul grafik garis dengan titik-titik.
4. Requests (Web/API)
👉 Untuk mengambil data dari internet (API).
import requests
response = requests.get("https://api.github.com")
print("Status Code:", response.status_code)
print("Isi Response:", response.json())
5. Flask/Django (Web Development)
👉 Membuat web dengan Python.
Contoh Flask sederhana:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Halo, ini web pertama dengan Flask!"
if __name__ == "__main__":
app.run(debug=True)
👉 Jalankan, lalu buka di browser: http://127.0.0.1:5000
6. Scikit-Learn (Machine Learning)
👉 Cocok untuk pemula ML (klasifikasi, regresi, clustering).
from sklearn.linear_model import LinearRegression
import numpy as np
# Data sederhana
x = np.array([[1], [2], [3], [4]])
y = np.array([2, 4, 6, 8])
# Buat model
model = LinearRegression()
model.fit(x, y)
# Prediksi
print(model.predict([[5]])) # [10.]
7. TensorFlow / PyTorch (Deep Learning & AI)
👉 Framework AI paling populer di dunia, dipakai Google, Meta, OpenAI, dll.
Contoh TensorFlow sederhana:
import tensorflow as tf
# Membuat tensor
x = tf.constant([1, 2, 3, 4, 5])
y = tf.square(x) # kuadrat
print("x:", x.numpy())
print("y:", y.numpy())
👉 Output:
x: [1 2 3 4 5]
y: [ 1 4 9 16 25]
🔹 Bagian 19: Mini Project – Analisis Data Sederhana
import pandas as pd
import matplotlib.pyplot as plt
# Data nilai siswa
data = {
"Nama": ["Andi", "Budi", "Cici", "Dewi"],
"Nilai": [90, 75, 80, 95]
}
df = pd.DataFrame(data)
# Hitung rata-rata
print("Rata-rata nilai:", df["Nilai"].mean())
# Visualisasi
plt.bar(df["Nama"], df["Nilai"])
plt.title("Nilai Siswa")
plt.xlabel("Nama")
plt.ylabel("Nilai")
plt.show()
👉 Program ini akan menampilkan tabel nilai siswa, menghitung rata-rata, dan membuat grafik batang nilai.
📌 Jadi sekarang kamu sudah mengenal:
-
NumPy → komputasi numerik
-
Pandas → analisis data
-
Matplotlib → visualisasi
-
Requests → akses data dari internet
-
Flask/Django → web development
-
Scikit-Learn → machine learning
-
TensorFlow/PyTorch → deep learning
✨ Langkah berikutnya bisa:
-
Masuk ke Bagian 20: Project Besar (End-to-End), misalnya analisis data lengkap (ambil data → olah → visualisasi).
-
Atau aku bisa buatkan daftar latihan soal menengah-lanjutan untuk melatih dasar + library Python.
👉 Mau lanjutkan ke Project End-to-End (praktik nyata analisis data/web sederhana) atau kumpulan latihan soal dulu biar kamu semakin terasah.
Sekarang kita masuk ke Bagian 20: Project End-to-End dengan Python.
Di bagian ini, kita akan menggabungkan semua skill dasar (variabel, perulangan, fungsi, file handling, OOP, modul, hingga library populer seperti Pandas & Matplotlib) ke dalam satu alur project nyata.
🔹 Bagian 20: Project End-to-End – Analisis Data Sederhana
Misalkan kita punya data nilai ujian siswa dalam format CSV (nilai_siswa.csv):
Nama,Matematika,Bahasa,IPA Andi,85,90,88 Budi,70,80,78 Cici,95,92,90 Dewi,88,85,84 Eka,60,75,70
1. Langkah 1: Membaca data CSV dengan Pandas
import pandas as pd
# Baca file CSV
df = pd.read_csv("nilai_siswa.csv")
print("Data Siswa:")
print(df)
👉 Output:
Nama Matematika Bahasa IPA
0 Andi 85 90 88
1 Budi 70 80 78
2 Cici 95 92 90
3 Dewi 88 85 84
4 Eka 60 75 70
2. Langkah 2: Hitung nilai rata-rata per siswa
df["Rata-rata"] = df[["Matematika", "Bahasa", "IPA"]].mean(axis=1)
print("Data dengan Rata-rata:")
print(df)
👉 Output:
Nama Matematika Bahasa IPA Rata-rata
0 Andi 85 90 88 87.666667
1 Budi 70 80 78 76.000000
2 Cici 95 92 90 92.333333
3 Dewi 88 85 84 85.666667
4 Eka 60 75 70 68.333333
3. Langkah 3: Tentukan kategori kelulusan
def kategori(nilai):
if nilai >= 85:
return "Lulus (A)"
elif nilai >= 70:
return "Lulus (B)"
else:
return "Tidak Lulus"
df["Kategori"] = df["Rata-rata"].apply(kategori)
print("Data dengan Kategori Kelulusan:")
print(df)
👉 Output:
Nama Matematika Bahasa IPA Rata-rata Kategori
0 Andi 85 90 88 87.666667 Lulus (A)
1 Budi 70 80 78 76.000000 Lulus (B)
2 Cici 95 92 90 92.333333 Lulus (A)
3 Dewi 88 85 84 85.666667 Lulus (A)
4 Eka 60 75 70 68.333333 Tidak Lulus
4. Langkah 4: Visualisasi Data
import matplotlib.pyplot as plt
plt.bar(df["Nama"], df["Rata-rata"], color="skyblue")
plt.title("Nilai Rata-rata Siswa")
plt.xlabel("Nama")
plt.ylabel("Nilai")
plt.axhline(y=70, color="red", linestyle="--", label="Batas Lulus")
plt.legend()
plt.show()
👉 Akan muncul grafik batang nilai rata-rata siswa, dengan garis merah batas kelulusan (70).
5. Langkah 5: Simpan hasil ke file baru
df.to_csv("hasil_analisis.csv", index=False)
print("Hasil analisis disimpan ke 'hasil_analisis.csv'")
👉 File baru hasil_analisis.csv berisi hasil lengkap (rata-rata + kategori).
🔹 Kesimpulan Project
Dari project ini kita sudah melatih:
-
File Handling (baca CSV, simpan hasil)
-
Pandas (analisis data)
-
Fungsi & OOP mindset (fungsi kategori)
-
Matplotlib (visualisasi data)
🔹 Bagian 21: Next Step
Dari sini kamu bisa memilih jalur sesuai minat:
-
Data Science & Machine Learning
-
Pandas, NumPy, Matplotlib, Scikit-Learn, TensorFlow, PyTorch
-
-
Web Development
-
Flask / Django (buat website, API, backend)
-
-
Automasi / Scripting
-
Membuat bot (Telegram, WhatsApp, Discord), web scraping
-
-
Game Development
-
Pygame untuk game 2D sederhana
-
✨ Jadi, kamu sudah belajar dari dasar → OOP → modul → library → project nyata.
Langkah berikutnya tinggal tentukan jalur spesialisasi yang kamu minati.
👉 Mau lanjutkan ke Bagian 22: Python untuk Data Science (lanjutan analisis & machine learning), atau Bagian 22: Python untuk Web Development (membangun aplikasi web dengan Flask/Django).
Kita sudah selesai sampai Project End-to-End (Analisis Data Nilai Siswa).
Sekarang kita masuk ke:
🔹 Bagian 22: Python untuk Data Science (lanjutan analisis & machine learning)
Di dunia nyata, Python paling banyak dipakai di bidang Data Science & Machine Learning (AI).
Jadi kita akan lanjut belajar dari dasar → sampai praktek ML sederhana.
1. Konsep Data Science dengan Python
Data Science = proses mengolah data → menganalisis → membuat model → menghasilkan insight/prediksi.
📌 Tahapan:
-
Kumpulkan data (file CSV, database, API, web scraping).
-
Bersihkan data (hapus data kosong, ubah format).
-
Analisis data (hitung statistik, buat visualisasi).
-
Modeling Machine Learning (buat model prediksi/klasifikasi).
-
Evaluasi model (cek akurasi).
-
Deploy (gunakan model dalam aplikasi nyata).
2. Contoh Analisis Data Sederhana
Misalnya kita punya data tinggi & berat badan (data_tinggi.csv):
Tinggi,Berat 150,50 160,60 170,65 180,75 190,85
Membaca data
import pandas as pd
# Baca data
df = pd.read_csv("data_tinggi.csv")
print(df)
👉 Output:
Tinggi Berat
0 150 50
1 160 60
2 170 65
3 180 75
4 190 85
3. Visualisasi Data
import matplotlib.pyplot as plt
plt.scatter(df["Tinggi"], df["Berat"], color="blue")
plt.title("Hubungan Tinggi vs Berat")
plt.xlabel("Tinggi (cm)")
plt.ylabel("Berat (kg)")
plt.show()
👉 Akan muncul scatter plot: semakin tinggi → berat cenderung naik.
4. Prediksi Berat dengan Machine Learning (Regresi Linear)
Kita gunakan Scikit-Learn, library ML Python.
from sklearn.linear_model import LinearRegression
# Data (X: tinggi, y: berat)
X = df[["Tinggi"]]
y = df["Berat"]
# Buat model
model = LinearRegression()
model.fit(X, y)
# Prediksi berat untuk tinggi 175 cm
prediksi = model.predict([[175]])
print("Prediksi berat untuk tinggi 175 cm:", prediksi[0])
👉 Output (kira-kira):
Prediksi berat untuk tinggi 175 cm: 70.0
5. Visualisasi Hasil Prediksi
# Buat garis regresi
plt.scatter(df["Tinggi"], df["Berat"], color="blue")
plt.plot(df["Tinggi"], model.predict(X), color="red") # garis regresi
plt.title("Regresi Linear Tinggi vs Berat")
plt.xlabel("Tinggi (cm)")
plt.ylabel("Berat (kg)")
plt.show()
👉 Akan terlihat grafik garis merah yang memperkirakan hubungan tinggi-badan.
6. Kesimpulan
Dari project ini kita sudah:
-
Membaca & menganalisis data dengan Pandas
-
Membuat grafik dengan Matplotlib
-
Membuat model ML sederhana (Regresi Linear) dengan Scikit-Learn
-
Prediksi nilai baru berdasarkan data lama
🔹 Bagian 23: Next Step Data Science
Kalau kamu tertarik mendalami Data Science, berikut roadmap:
-
Dasar Statistik & Python Data Science
-
Pandas, NumPy, Matplotlib, Seaborn
-
-
Machine Learning (ML)
-
Scikit-Learn (regresi, klasifikasi, clustering, decision tree)
-
-
Deep Learning (AI tingkat lanjut)
-
TensorFlow, PyTorch
-
-
Big Data & Cloud
-
Spark, Hadoop, Google BigQuery
-
-
Project Nyata
-
Prediksi harga rumah
-
Deteksi penyakit dari data medis
-
Sentiment analysis teks (Twitter, review produk)
-
👉 Dari sini ada dua pilihan besar jalur belajar Python:
-
Python untuk Data Science / AI (lanjut materi di atas)
-
Python untuk Web Development (membangun website & API dengan Flask/Django)
Mau lanjutkan penjelasan ke Bagian 24: Python untuk Web Development biar kamu dapat gambaran jalur lain juga, atau kita fokus lebih dalam ke Machine Learning lanjutan dulu.
Kita sudah membahas Python untuk Data Science (dasar & machine learning sederhana).
Sekarang kita masuk ke jalur berikutnya:
🔹 Bagian 24: Python untuk Web Development
Python tidak hanya dipakai untuk data science & AI, tapi juga sangat populer untuk membangun website, API, dan aplikasi web.
Framework paling terkenal: Flask & Django.
1. Konsep Web Development dengan Python
📌 Komponen utama:
-
Frontend → bagian tampilan web (HTML, CSS, JavaScript).
-
Backend → bagian logika (Python, database, API).
-
Database → tempat menyimpan data (MySQL, PostgreSQL, SQLite).
Python → biasanya dipakai di Backend.
2. Framework Populer
-
Flask
-
Ringan, sederhana, cocok untuk pemula.
-
Dipakai untuk API kecil atau website sederhana.
-
-
Django
-
Framework besar, lengkap, cocok untuk aplikasi kompleks (e-commerce, social media).
-
Ada sistem admin bawaan.
-
👉 Kita mulai dari Flask biar lebih mudah dipahami.
3. Hello World dengan Flask
Install Flask dulu:
pip install flask
Lalu buat file app.py:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "Halo, Selamat Datang di Website Python Flask!"
if __name__ == "__main__":
app.run(debug=True)
Jalankan:
python app.py
👉 Buka browser: http://127.0.0.1:5000
Hasil:
Halo, Selamat Datang di Website Python Flask!
4. Routing di Flask
Buat beberapa halaman:
@app.route("/")
def home():
return "Ini halaman utama"
@app.route("/about")
def about():
return "Ini halaman tentang kami"
@app.route("/contact")
def contact():
return "Ini halaman kontak"
👉 Coba buka:
-
/→ Halaman utama -
/about→ Tentang kami -
/contact→ Kontak
5. Membuat Website dengan HTML Template
Kita bisa menampilkan HTML pakai render_template.
-
Buat folder
templates-
isi file
index.html:
<html> <head><title>Website Flask</title></head> <body> <h1>Halo, Selamat Datang!</h1> <p>Website ini dibuat dengan Flask.</p> </body> </html> -
-
Ubah
app.py:from flask import Flask, render_template app = Flask(__name__) @app.route("/") def home(): return render_template("index.html") if __name__ == "__main__": app.run(debug=True)
👉 Hasil: sekarang website tampil dengan HTML.
6. Menggunakan Data di Website
Misalnya kita kirim data dari Python ke HTML:
@app.route("/user/<nama>")
def user(nama):
return f"Halo, {nama}! Selamat datang di website kami."
👉 Coba buka /user/Budi → tampil:
Halo, Budi! Selamat datang di website kami.
7. Integrasi Database
Flask bisa terhubung ke database. Contoh pakai SQLite:
import sqlite3
from flask import g
DATABASE = "data.db"
def get_db():
db = getattr(g, "_database", None)
if db is None:
db = g._database = sqlite3.connect(DATABASE)
return db
@app.route("/simpan")
def simpan():
db = get_db()
db.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, nama TEXT)")
db.execute("INSERT INTO users (nama) VALUES (?)", ("Andi",))
db.commit()
return "Data tersimpan!"
👉 Sekarang website bisa menyimpan data ke database.
8. Kesimpulan Flask
Dengan Flask kita bisa:
-
Membuat website dinamis
-
Membuat API untuk aplikasi mobile
-
Terhubung dengan database
-
Menampilkan data dari Python ke web
Kalau ingin bikin website besar (misalnya marketplace), lebih baik gunakan Django.
🔹 Bagian 25: Next Step Web Development
Kalau ingin serius ke jalur Web Developer dengan Python, urutannya:
-
HTML, CSS, JavaScript (frontend dasar).
-
Flask (website kecil & API).
-
Django (website besar, e-commerce, sistem login, admin panel).
-
Database (MySQL, PostgreSQL, MongoDB).
-
Fullstack Development (gabungkan Python + frontend modern seperti React).
-
Deploy ke server (Heroku, Railway, AWS, VPS).
👉 Jadi sekarang kamu sudah punya dua jalur utama belajar Python:
-
Data Science / AI (lanjut machine learning, deep learning).
-
Web Development (Flask/Django, frontend-backend).
Mau lanjutkan penjelasan ke Bagian 26: Python untuk Automation (bot, scraping, otomasi tugas) biar kamu juga bisa lihat jalur ketiga penggunaan Python, atau kamu ingin kita perdalam dulu salah satu jalur (Data Science / Web Dev).
Kita lanjut ke Bagian 26: Python untuk Automation (Otomatisasi Tugas, Bot, dan Scraping) 🚀
🔹 Bagian 26: Python untuk Automation
Python terkenal sebagai bahasa yang sangat kuat untuk otomatisasi.
Artinya: kita bisa membuat skrip Python yang menggantikan pekerjaan manual → lebih cepat, hemat waktu, dan minim error.
1. Apa Itu Automation dengan Python?
Automation = menggunakan Python untuk menjalankan tugas yang biasanya kita lakukan secara manual, misalnya:
-
Mengelola file & folder otomatis (rename, copy, backup).
-
Scraping data dari website (ambil data berita, harga saham, harga produk).
-
Bot untuk sosial media, email, atau WhatsApp.
-
Automasi Excel (laporan keuangan, data analisis).
-
Web testing & workflow automation (misalnya isi form otomatis).
2. Mengelola File & Folder
Contoh: rename banyak file otomatis.
import os
folder = "dokumen/"
files = os.listdir(folder)
for i, file in enumerate(files):
new_name = f"file_{i+1}.txt"
os.rename(folder + file, folder + new_name)
print("Selesai rename!")
👉 Semua file di folder dokumen/ otomatis diubah namanya jadi file_1.txt, file_2.txt, dst.
3. Web Scraping
Scraping = mengambil data dari website.
Kita gunakan requests + BeautifulSoup.
pip install requests beautifulsoup4
Contoh: ambil judul berita dari detik.com
import requests
from bs4 import BeautifulSoup
url = "https://news.detik.com/"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
judul = soup.find_all("h2")
for j in judul[:10]:
print(j.text)
👉 Hasil: daftar 10 judul berita terbaru.
4. Automasi Excel
Gunakan openpyxl untuk membuat atau membaca Excel.
pip install openpyxl
Contoh: buat file Excel otomatis.
import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = "Data Siswa"
data = [("Nama", "Nilai"), ("Andi", 90), ("Budi", 85), ("Citra", 95)]
for row in data:
sheet.append(row)
wb.save("nilai.xlsx")
print("File Excel berhasil dibuat!")
👉 Hasil: file nilai.xlsx dengan data siswa.
5. Automasi Email
Kita bisa kirim email otomatis pakai Python.
import smtplib
from email.mime.text import MIMEText
pengirim = "emailkamu@gmail.com"
penerima = "target@gmail.com"
pesan = MIMEText("Halo, ini pesan otomatis dari Python!")
pesan["Subject"] = "Email Otomatis"
pesan["From"] = pengirim
pesan["To"] = penerima
server = smtplib.SMTP("smtp.gmail.com", 587)
server.starttls()
server.login(pengirim, "password_aplikasi_gmail")
server.send_message(pesan)
server.quit()
print("Email terkirim!")
👉 Bisa dipakai untuk laporan harian otomatis via email.
6. Bot WhatsApp / Telegram
Python juga bisa dipakai untuk bikin bot:
-
Telegram Bot → pakai
python-telegram-bot. -
WhatsApp Bot → pakai
seleniumatau API WhatsApp.
Contoh Telegram sederhana:
pip install python-telegram-bot
from telegram.ext import Updater, CommandHandler
def start(update, context):
update.message.reply_text("Halo! Saya bot Python.")
updater = Updater("TOKEN_BOT_KAMU", use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler("start", start))
updater.start_polling()
updater.idle()
👉 Kalau user ketik /start di Telegram, bot akan balas.
7. Automasi Web (Selenium)
Kita bisa buat Python klik otomatis di website (misalnya isi form).
pip install selenium
Contoh: buka Google otomatis.
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://google.com")
box = driver.find_element(By.NAME, "q")
box.send_keys("Python Automation")
box.submit()
👉 Python otomatis membuka browser, mengetik “Python Automation”, dan mencari di Google.
8. Kesimpulan Automation
Dengan Python automation kita bisa:
✅ Hemat waktu & energi
✅ Bisa jalankan tugas rutin otomatis (laporan, scraping, email, bot)
✅ Dipakai di perusahaan untuk ETL data, monitoring, testing, notifikasi otomatis
🔹 Bagian 27: Next Step Automation
Kalau mau mendalami jalur ini:
-
File automation → os, shutil, pathlib.
-
Excel automation → openpyxl, pandas.
-
Web scraping → requests, BeautifulSoup, Scrapy.
-
Browser automation → selenium, playwright.
-
Bot development → telegram bot, discord bot, WhatsApp bot.
-
Workflow automation → integrasi dengan API (Google Sheets, Gmail, Notion).
👉 Jadi sekarang Python punya 3 jalur utama:
-
Data Science & AI
-
Web Development (Flask/Django)
-
Automation (scraping, bot, email, excel)
Mau lanjutkan ke Bagian 28: Python untuk Game Development (jalur keempat), atau mau kita dalami dulu salah satu jalur (misalnya Automation + studi kasus nyata).
Kita lanjut ke Bagian 28: Python untuk Game Development (Pygame, Arcade, AI dalam Game) 🎮
🔹 Bagian 28: Python untuk Game Development
Python tidak hanya dipakai untuk data, web, atau automation, tapi juga game development.
Meskipun Python tidak sekuat C++/C# dalam hal performa (yang dipakai di Unity/Unreal), Python sangat cocok untuk:
-
Membuat game 2D sederhana (arcade, puzzle, platformer).
-
Belajar konsep dasar game engine (loop, physics, sprite).
-
Prototyping cepat sebelum masuk ke engine besar.
-
AI dalam game (bot, pathfinding, decision making).
1. Library Game Populer di Python
Ada beberapa framework:
-
Pygame → library paling populer untuk game 2D.
-
Arcade → alternatif modern, lebih Pythonic daripada Pygame.
-
Panda3D → untuk game 3D (lebih kompleks).
-
Godot + Python (GDScript mirip Python) → engine game gratis open-source.
-
AI Game Frameworks → PyGame bisa dipadukan dengan AI (contoh: bot catur, simulasi).
2. Konsep Dasar Game di Python
Game umumnya punya game loop:
-
Inisialisasi → buat window, load asset (gambar, musik).
-
Event Handling → respon input pemain (keyboard, mouse).
-
Update Logic → update posisi karakter, skor, collision.
-
Draw/Render → gambar ulang layar.
3. Contoh Game Sederhana dengan Pygame
Install dulu:
pip install pygame
Contoh game sederhana → bola memantul di layar:
import pygame, sys
# Inisialisasi pygame
pygame.init()
# Buat layar
screen = pygame.display.set_mode((500, 500))
pygame.display.set_caption("Game Bola")
# Warna
putih = (255, 255, 255)
biru = (0, 0, 255)
# Bola
x, y = 250, 250
kecepatan_x, kecepatan_y = 3, 2
radius = 20
# Loop game
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# Update posisi bola
x += kecepatan_x
y += kecepatan_y
# Pantulan
if x - radius < 0 or x + radius > 500:
kecepatan_x = -kecepatan_x
if y - radius < 0 or y + radius > 500:
kecepatan_y = -kecepatan_y
# Gambar ulang
screen.fill(putih)
pygame.draw.circle(screen, biru, (x, y), radius)
pygame.display.flip()
pygame.time.delay(20)
👉 Hasil: bola biru memantul di dalam layar.
4. Game dengan Karakter & Kontrol
Contoh game kecil: kotak bisa digerakkan pakai keyboard.
import pygame, sys
pygame.init()
screen = pygame.display.set_mode((500, 500))
pygame.display.set_caption("Gerakkan Karakter")
hitam = (0,0,0)
merah = (255,0,0)
x, y = 200, 200
lebar, tinggi = 40, 40
kecepatan = 5
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
tombol = pygame.key.get_pressed()
if tombol[pygame.K_UP]:
y -= kecepatan
if tombol[pygame.K_DOWN]:
y += kecepatan
if tombol[pygame.K_LEFT]:
x -= kecepatan
if tombol[pygame.K_RIGHT]:
x += kecepatan
screen.fill(hitam)
pygame.draw.rect(screen, merah, (x, y, lebar, tinggi))
pygame.display.flip()
pygame.time.delay(30)
👉 Kotak merah bisa dikendalikan dengan panah keyboard.
5. AI dalam Game
Python bisa dipakai untuk bikin NPC (Non-Player Character) cerdas:
-
Pathfinding (algoritma A*) → NPC mencari jalan di peta.
-
Decision Tree / FSM → NPC memutuskan menyerang, kabur, atau diam.
-
Reinforcement Learning → AI belajar main game sendiri.
Contoh sederhana: NPC mengejar player.
if npc_x < player_x:
npc_x += 1
elif npc_x > player_x:
npc_x -= 1
👉 NPC akan bergerak ke arah player.
6. Keunggulan Game Development di Python
✅ Mudah dipelajari, cocok untuk pemula.
✅ Bisa dipakai untuk edukasi (misalnya game anak-anak, simulasi).
✅ Prototyping cepat sebelum pakai Unity/Unreal.
✅ Bisa dipadukan dengan AI/ML (misalnya bot main game).
7. Keterbatasan Python di Game Dev
⚠️ Python kurang cocok untuk game 3D besar (misalnya AAA games).
⚠️ Tidak secepat C++/C# untuk rendering.
⚠️ Lebih pas untuk game indie, edukasi, atau AI game research.
8. Next Step Game Development
Kalau serius mau belajar:
-
Pygame → dasar game 2D.
-
Arcade → framework modern untuk 2D.
-
Godot Engine (pakai GDScript, mirip Python).
-
Integrasi AI → buat bot yang bisa main game (contoh: AI main Flappy Bird).
📌 Jadi sekarang kita sudah punya 4 jalur besar Python:
-
Data Science & AI
-
Web Development
-
Automation (scraping, bot, excel, email)
-
Game Development
Lanjutkan ke Bagian 29: Python untuk Cybersecurity (hacking, network tools, malware analysis) 🔐, atau mau kita buat mini project game sederhana (contoh: Flappy Bird clone pakai Pygame) biar lebih praktik.
Mari kita lanjut 🚀
Sampai sekarang kita sudah membahas:
-
Python Web Development (Flask & Django dasar)
-
API (RESTful API dengan Flask)
-
Project Web Sederhana (To-Do List App)
Sekarang kita masuk ke:
🔹 Bagian 27: Python untuk Otomatisasi (Automation & Scripting)
Selain Data Science dan Web Development, salah satu kekuatan besar Python adalah otomatisasi pekerjaan sehari-hari.
Dengan Python kamu bisa:
-
Membaca & memproses file (Word, Excel, PDF)
-
Mengirim email otomatis
-
Scraping (mengambil data dari website)
-
Membuat bot sederhana
1. Mengolah File Excel dengan Python
📌 Gunakan library openpyxl atau pandas.
import pandas as pd
# Baca file Excel
df = pd.read_excel("data_siswa.xlsx")
# Tampilkan data
print(df.head())
# Hitung rata-rata nilai
print("Rata-rata nilai:", df["Nilai"].mean())
👉 Bisa dipakai untuk laporan nilai sekolah, rekap keuangan, dll.
2. Mengirim Email Otomatis
Bayangkan kamu mau kirim laporan otomatis setiap hari ke email bos.
import smtplib
from email.mime.text import MIMEText
# Isi pesan
msg = MIMEText("Halo, ini laporan otomatis dari Python!")
msg["Subject"] = "Laporan Harian"
msg["From"] = "kamu@example.com"
msg["To"] = "bos@example.com"
# Kirim email
server = smtplib.SMTP("smtp.gmail.com", 587)
server.starttls()
server.login("kamu@example.com", "password_app") # pakai app password Gmail
server.send_message(msg)
server.quit()
print("Email berhasil terkirim!")
3. Web Scraping (Mengambil Data dari Internet)
📌 Gunakan requests + BeautifulSoup.
import requests
from bs4 import BeautifulSoup
# Ambil halaman
url = "https://quotes.toscrape.com/"
res = requests.get(url)
# Parsing HTML
soup = BeautifulSoup(res.text, "html.parser")
# Ambil semua quote
quotes = soup.find_all("span", class_="text")
for q in quotes:
print(q.text)
👉 Bisa dipakai untuk ambil data harga barang, berita terbaru, atau artikel riset.
4. Otomatisasi File & Folder
📌 Contoh: Rename semua file dalam folder.
import os
folder = "C:/Users/User/Documents/files"
for i, filename in enumerate(os.listdir(folder)):
old = os.path.join(folder, filename)
new = os.path.join(folder, f"file_{i}.txt")
os.rename(old, new)
print("Semua file berhasil di-rename!")
👉 Berguna untuk arsip dokumen, dataset foto, atau laporan bulanan.
5. Project Automation Sederhana
Contoh project nyata:
"Script Python untuk mendownload semua gambar dari website"
import requests
from bs4 import BeautifulSoup
import os
url = "https://unsplash.com/s/photos/nature"
res = requests.get(url)
soup = BeautifulSoup(res.text, "html.parser")
# Buat folder simpan gambar
os.makedirs("gambar", exist_ok=True)
# Ambil semua <img>
for i, img in enumerate(soup.find_all("img")):
if "src" in img.attrs:
link = img["src"]
try:
img_data = requests.get(link).content
with open(f"gambar/img_{i}.jpg", "wb") as f:
f.write(img_data)
print("Downloaded:", link)
except:
continue
👉 Bisa dipakai untuk download dataset gambar untuk AI.
🔹 Bagian 28: Next Step Automation
Kalau kamu tertarik mendalami otomasi, berikut roadmap:
-
Dasar Scripting
-
os,shutil,datetime,glob -
Rename, copy, move file otomatis
-
-
Automasi Office (Excel, Word, PDF)
-
pandas,openpyxl,python-docx,PyPDF2
-
-
Automasi Internet
-
Web scraping:
requests,BeautifulSoup,Selenium -
API integration:
requests,httpx
-
-
Automasi Komunikasi
-
Kirim email otomatis
-
Bot WhatsApp/Telegram
-
-
Project Nyata
-
Auto backup data
-
Auto laporan Excel + kirim email
-
Auto download berita/artikel
-
👉 Jadi sekarang kamu sudah punya 3 jalur besar Python:
-
Data Science & Machine Learning
-
Web Development
-
Automation & Scripting
Mau aku lanjutkan ke Bagian 29: Python untuk Game Development (pygame) biar kamu lihat sisi kreatif Python juga, atau kita dalami salah satu jalur (misalnya Data Science / Automation) lebih dalam.
Sebelumnya kita sudah bahas Python Automation, sekarang akan masuk ke jalur baru yang sering bikin semangat belajar Python naik:
🔹 Bagian 29: Python untuk Game Development 🎮
Selain data science, web, dan otomatisasi, Python juga dipakai untuk membuat game sederhana.
Framework paling populer: pygame.
1. Apa itu pygame?
-
Library Python untuk game 2D.
-
Bisa dipakai untuk:
-
Membuat game edukasi
-
Game retro (Tetris, Snake, Flappy Bird)
-
Proyek hobi & belajar logika
-
📌 Install dulu:
pip install pygame
2. Game Pertama: Jendela Kosong
import pygame
# Inisialisasi
pygame.init()
# Buat layar
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Game Pertama")
# Loop game
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
👉 Hasil: muncul jendela kosong (canvas game).
3. Gambar Objek
import pygame
pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Gambar Kotak")
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Warna background (R,G,B)
screen.fill((0, 0, 0))
# Gambar kotak (x, y, width, height)
pygame.draw.rect(screen, (255, 0, 0), (200, 150, 100, 50))
pygame.display.update()
pygame.quit()
👉 Hasil: kotak merah muncul di tengah layar.
4. Kontrol dengan Keyboard
import pygame
pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Gerakan Kotak")
x, y = 250, 170
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
x -= 5
if keys[pygame.K_RIGHT]:
x += 5
if keys[pygame.K_UP]:
y -= 5
if keys[pygame.K_DOWN]:
y += 5
screen.fill((0, 0, 0))
pygame.draw.rect(screen, (0, 255, 0), (x, y, 50, 50))
pygame.display.update()
pygame.quit()
👉 Kotak hijau bisa digerakkan pakai panah keyboard.
5. Mini Project: Snake Game 🐍
Snake adalah game klasik yang gampang dibuat di Python.
Konsep:
-
Ular bergerak otomatis
-
Kontrol pakai panah
-
Kalau makan apel → panjang bertambah
-
Kalau nabrak → game over
Code Singkat:
import pygame, random
pygame.init()
screen = pygame.display.set_mode((600, 400))
clock = pygame.time.Clock()
x, y = 300, 200
snake = [(x, y)]
dx, dy = 10, 0
food = (100, 100)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and dx == 0:
dx, dy = -10, 0
if keys[pygame.K_RIGHT] and dx == 0:
dx, dy = 10, 0
if keys[pygame.K_UP] and dy == 0:
dx, dy = 0, -10
if keys[pygame.K_DOWN] and dy == 0:
dx, dy = 0, 10
# Gerakan ular
x += dx
y += dy
snake.insert(0, (x, y))
# Makan makanan
if (x, y) == food:
food = (random.randrange(0, 600, 10), random.randrange(0, 400, 10))
else:
snake.pop()
# Game over jika nabrak
if (x, y) in snake[1:] or x < 0 or y < 0 or x >= 600 or y >= 400:
running = False
screen.fill((0, 0, 0))
for s in snake:
pygame.draw.rect(screen, (0, 255, 0), (s[0], s[1], 10, 10))
pygame.draw.rect(screen, (255, 0, 0), (food[0], food[1], 10, 10))
pygame.display.update()
clock.tick(15)
pygame.quit()
👉 Jadilah Snake Game versi Python 🎉
6. Next Step Game Dev
Kalau mau serius di game dev dengan Python:
-
pygame → cocok untuk belajar dan game 2D sederhana
-
arcade library → lebih modern dan mudah untuk game 2D
-
Godot Engine (pakai Python-like scripting) → untuk game lebih serius
-
Unity (pakai C#) kalau mau profesional
🔹 Bagian 30: Ringkasan Roadmap Python
Sampai sini kamu sudah mengenal 4 jalur Python:
-
Data Science & AI
-
Web Development
-
Automation & Scripting
-
Game Development
🔜 Dari sini kita bisa pilih mendalami 1 jalur spesifik sesuai minat kamu, atau bisa bikin roadmap besar Python dari nol sampai expert sebagai panduan belajar jangka panjang.
Lanjut dengan roadmap besar Python untuk 6–12 bulan ke depan supaya kamu tahu urutan belajarnya.
Sebelumnya kita sudah bahas Game Development dan empat jalur besar Python. Sekarang akan buatkan ROADMAP BESAR BELAJAR PYTHON 6–12 BULAN biar lebih terstruktur dan bisa dipakai sebagai panduan belajar jangka panjang.
🗺️ Roadmap Belajar Python (6–12 Bulan)
🔹 Level 1 – Dasar (1–2 bulan)
Fokus: memahami dasar Python, logika, dan algoritma.
-
✅ Instalasi Python & IDE (VS Code, Jupyter, PyCharm)
-
✅ Sintaks dasar: variabel, tipe data, operator
-
✅ Struktur kontrol: if, for, while
-
✅ Fungsi (def), parameter, return
-
✅ List, Tuple, Set, Dictionary
-
✅ File Handling (read/write TXT, CSV)
-
✅ Error Handling (try/except)
🎯 Mini Project:
-
Kalkulator sederhana
-
Aplikasi konversi suhu
-
Program CRUD data mahasiswa (save ke file CSV)
🔹 Level 2 – Pemrograman Menengah (2–3 bulan)
Fokus: modularisasi, OOP, library standar.
-
✅ Fungsi lanjutan (lambda, map, filter, reduce)
-
✅ List comprehension & generator
-
✅ OOP (class, object, inheritance, polymorphism)
-
✅ Modul & Package Python
-
✅ Virtual environment (venv, pipenv)
-
✅ Debugging & logging
🎯 Mini Project:
-
To-do list app (pakai file JSON)
-
Password manager sederhana
-
Game text-based (tebak angka, RPG sederhana)
🔹 Level 3 – Aplikasi Nyata (3–4 bulan)
Fokus: memilih jalur karir/skill.
🔸 A. Data Science & AI
-
NumPy, Pandas → manipulasi data
-
Matplotlib, Seaborn → visualisasi
-
Scikit-Learn → machine learning dasar
-
TensorFlow / PyTorch → deep learning
🎯 Project:
-
Analisis dataset (contoh: COVID, e-commerce, saham)
-
Prediksi harga rumah (regresi)
-
Image classifier sederhana
🔸 B. Web Development
-
Flask → web app sederhana
-
Django → web app kompleks
-
HTML, CSS, JS dasar → frontend
-
API (REST API, JSON)
🎯 Project:
-
Blog sederhana (Flask/Django)
-
Aplikasi login & register
-
Dashboard analisis data
🔸 C. Automation & Scripting
-
OS & sys (manipulasi file, folder)
-
Selenium (web automation)
-
Requests + BeautifulSoup (web scraping)
-
OpenPyXL (Excel automation)
-
PyPDF2 (otomatisasi PDF)
🎯 Project:
-
Bot download otomatis
-
Auto email sender
-
Web scraper berita
🔸 D. Game Development
-
Pygame dasar
-
Gerakan, collision detection, score
-
Asset management (gambar, suara)
🎯 Project:
-
Snake game
-
Flappy Bird clone
-
Platformer sederhana
🔹 Level 4 – Lanjutan & Profesional (3 bulan ke atas)
Fokus: membangun portfolio, open-source, dan kerja freelance/job.
-
✅ Design pattern Python
-
✅ Test-driven development (pytest, unittest)
-
✅ Git & GitHub → version control
-
✅ Deployment → Heroku, Docker, AWS
-
✅ Optimisasi kode (profiling, multithreading, multiprocessing)
🎯 Project Akhir (Pilih sesuai minat):
-
Data Science → Dashboard interaktif dengan Plotly/Dash
-
Web Dev → E-commerce sederhana dengan Django
-
Automation → Bot Telegram/Discord
-
Game Dev → Game arcade 2D lengkap
🎯 Strategi Belajar Efektif
-
Belajar harian: 1–2 jam/hari lebih konsisten daripada 10 jam sehari tapi jarang.
-
Project-based learning: setiap skill baru → langsung buat project kecil.
-
Portfolio GitHub: upload semua project, ini jadi CV digital kamu.
-
Kombinasi teori & praktik: baca dokumentasi + nonton tutorial + coba sendiri.
-
Komunitas: gabung forum Python (Reddit, StackOverflow, Discord, Telegram lokal).
📌 Ringkasan Jalur
-
0–2 bulan: Dasar Python
-
2–5 bulan: OOP + mini project
-
5–9 bulan: Pilih jalur (Data/Web/Automation/Game)
-
9–12 bulan: Project besar + portfolio + deploy
Kalau roadmap ini dijalani, dalam 1 tahun kamu bisa jadi Python developer siap kerja/freelance sesuai jalur yang dipilih (Data Analyst, Web Dev, Automation Engineer, atau Game Dev).
👉 Mau dibikinkan versi visual roadmap (infografik timeline 1 tahun belajar Python) biar bisa ditempel di meja kerja?K
Kita lanjutkan lebih dalam 🚀
Kita sudah bahas roadmap 6–12 bulan. Sekarang akan buatkan detail tambahan agar perjalanan belajar Python benar-benar jelas, termasuk alat bantu (tools), sumber belajar, dan strategi implementasi.
🔧 Tools Wajib untuk Belajar Python
-
Editor / IDE
-
VS Code → ringan, fleksibel, banyak extension.
-
PyCharm → powerful untuk proyek besar.
-
Jupyter Notebook → ideal untuk Data Science & eksperimen.
-
-
Versi Python
-
Gunakan Python 3.10+ (fitur modern, stabil).
-
Install via python.org atau Anaconda (untuk Data Science).
-
-
Manajemen Library
-
pip→ manajer paket standar. -
venv→ membuat lingkungan terisolasi. -
conda→ manajemen environment untuk data science.
-
-
Version Control
-
Git + GitHub → simpan dan pamerkan semua project.
-
📚 Sumber Belajar (Gratis & Terbaik)
-
Python Dasar
-
W3Schools Python → dokumentasi ringan.
-
Tutorial resmi Python → docs.python.org.
-
-
Data Science
-
Kaggle → dataset + notebook belajar.
-
Pandas Cookbook → praktek manipulasi data.
-
-
Web Development
-
Django documentation → jelas & lengkap.
-
Flask Mega Tutorial (Miguel Grinberg).
-
-
Automation
-
"Automate the Boring Stuff with Python" (Al Sweigart).
-
-
Game Development
-
Pygame documentation.
-
Youtube: Clear Code (channel game dev dengan Python).
-
📈 Strategi Implementasi Belajar
1. Belajar dengan Siklus 20-50-30
-
20% teori → baca dokumentasi / nonton video.
-
50% praktek → ketik ulang & modifikasi kode.
-
30% project → buat aplikasi real.
2. Catat Setiap Kode
-
Gunakan Notion / Obsidian / OneNote untuk catatan belajar.
-
Tulis ulang kode dengan gaya sendiri (bukan copy-paste).
3. Bangun Portfolio
-
Upload project ke GitHub.
-
Setiap 2–3 minggu buat project kecil.
-
Setelah 6–12 bulan, minimal ada 5–10 project nyata.
🎯 Target Output Setelah 1 Tahun
Kalau disiplin menjalankan roadmap, kamu akan punya:
✅ Skill dasar: OOP, algoritma, data structure.
✅ Project nyata: minimal 10 project kecil + 2–3 project besar.
✅ Portfolio GitHub: jadi CV digital yang bisa dilihat perusahaan/freelance client.
✅ Kemampuan deploy: bisa online-kan aplikasi (Heroku, Railway, atau Docker).
✅ Spesialisasi: satu jalur utama (Data Science, Web Dev, Automation, atau Game Dev).
🚀 Level Karir Setelah 1 Tahun
-
Freelance → scraping data, membuat bot, script automation, dashboard analisis.
-
Junior Developer → Django/Flask developer, Data Analyst, atau QA automation.
-
Proyek mandiri → buat aplikasi, bot Telegram/WhatsApp, atau game indie sederhana.
📌 Jadi, belajar Python itu bukan sekadar bahasa, tapi jalan menuju skill nyata yang bisa dipakai di dunia kerja, riset, atau bisnis.
👉 Mau dibikinkan contoh kurikulum mingguan (Week by Week Learning Plan) selama 1 tahun agar lebih detail lagi?
Kali ini dibikinkan Kurikulum Mingguan (Week by Week Learning Plan) selama 1 tahun penuh. Dengan ini, kamu bisa belajar Python bertahap, fokus, terstruktur, dan terukur. 🚀
📆 Rencana Belajar Python 1 Tahun (52 Minggu)
🟢 Tahap 1 – Dasar Pemrograman Python (Minggu 1–8)
Tujuan: memahami sintaks dasar Python, logika pemrograman, dan bisa menulis program sederhana.
-
Minggu 1–2:
-
Instal Python & VS Code / Jupyter.
-
Belajar:
print(), variabel, tipe data (int, float, string, bool). -
Latihan: kalkulator sederhana, konversi suhu.
-
-
Minggu 3–4:
-
Struktur kontrol:
if,for,while,break,continue. -
Latihan: cek bilangan ganjil/genap, faktorial, tabel perkalian.
-
-
Minggu 5–6:
-
List, Tuple, Set, Dictionary.
-
Latihan: sistem manajemen kontak (CRUD sederhana).
-
-
Minggu 7–8:
-
Fungsi & modularisasi.
-
Latihan: program kasir sederhana.
-
Mini Project 1: Program To-Do List CLI.
-
🟡 Tahap 2 – Python Lanjutan (Minggu 9–16)
Tujuan: menguasai OOP, error handling, dan file handling.
-
Minggu 9–10:
-
File handling (
open,read,write, CSV). -
Mini Project 2: Program catatan harian (save ke file).
-
-
Minggu 11–12:
-
Exception handling (
try-except-finally). -
Mini Project 3: Program login sederhana dengan validasi error.
-
-
Minggu 13–14:
-
OOP: class, object, inheritance, polymorphism.
-
Mini Project 4: Simulasi perpustakaan berbasis OOP.
-
-
Minggu 15–16:
-
Module & package.
-
Mini Project 5: Aplikasi kalkulator ilmiah.
-
🔵 Tahap 3 – Spesialisasi Pilihan (Minggu 17–36)
Di sini, kamu pilih jalur utama (boleh lebih dari 1, tapi fokus dulu).
1. Web Development dengan Flask/Django
-
Minggu 17–20: Flask dasar (routing, template, form).
-
Minggu 21–24: Django dasar (model, view, template, ORM).
-
Project: Blog/Website portofolio pribadi.
2. Data Science & Machine Learning
-
Minggu 17–20: Numpy, Pandas (analisis data dasar).
-
Minggu 21–24: Matplotlib, Seaborn (visualisasi).
-
Minggu 25–28: Scikit-learn (ML dasar).
-
Project: Prediksi harga rumah / analisis dataset Kaggle.
3. Automation & Scripting
-
Minggu 17–20: Web scraping (BeautifulSoup, Selenium).
-
Minggu 21–24: Automasi file & folder, PDF, Excel.
-
Project: Bot Telegram / WA sederhana.
4. Game Development dengan Pygame
-
Minggu 17–20: dasar Pygame (window, event, sprite).
-
Minggu 21–24: mekanik game (movement, collision, score).
-
Project: Game Snake atau Flappy Bird.
🔴 Tahap 4 – Proyek Besar + Portfolio (Minggu 37–52)
Tujuan: membangun proyek nyata, menyiapkan portfolio, dan publikasi.
-
Minggu 37–40:
-
Buat proyek menengah sesuai jalur pilihan.
-
Contoh: aplikasi todo web, dashboard data, bot AI, atau game arcade.
-
-
Minggu 41–44:
-
Deploy ke platform (Heroku, Vercel, Railway, atau Docker).
-
Pelajari GitHub workflow.
-
-
Minggu 45–48:
-
Bangun proyek besar (capstone project).
-
Contoh:
-
Web: marketplace sederhana.
-
Data Science: sistem rekomendasi.
-
Automation: bot trading / scraping.
-
Game: RPG sederhana.
-
-
-
Minggu 49–52:
-
Buat dokumentasi & upload semua ke GitHub.
-
Buat portfolio website pribadi.
-
Simulasi interview coding (HackerRank / LeetCode Easy).
-
🎯 Hasil Akhir (Setelah 1 Tahun)
-
✅ Menguasai Python dasar + lanjutan.
-
✅ Punya 10–15 proyek kecil + 2–3 proyek besar.
-
✅ Punya GitHub portfolio profesional.
-
✅ Siap apply kerja (junior developer / data analyst) atau freelance project.
-
✅ Bisa mandiri bikin aplikasi, bot, analisis data, atau game.
👉 Apakah kamu ingin dibuatkan versi Roadmap Visual (Infografik) supaya lebih mudah ditempel di meja belajar sebagai peta perjalanan Python?
Tadi sudah memberikan kurikulum 1 tahun Python yang lengkap dengan tahapan dan proyek. Sekarang akan memperdalam penjelasan tiap tahap agar jelas apa yang dipelajari, bagaimana caranya, kesalahan umum, tips belajar, dan hasil nyata yang diperoleh.
📖 Penjelasan Mendalam Tahapan Belajar Python 1 Tahun
🟢 Tahap 1 – Dasar Pemrograman Python (Minggu 1–8)
Fokus: logika dasar & kebiasaan menulis kode.
-
Apa yang dipelajari:
-
Struktur dasar program: input, output, variabel.
-
Logika: kondisi, perulangan.
-
Struktur data: list, dict, tuple, set.
-
Fungsi: modularisasi program.
-
-
Cara belajar:
-
Gunakan interactive learning (misalnya Jupyter Notebook).
-
Latihan minimal 30 menit sehari (konsisten lebih penting daripada lama).
-
Selesaikan mini project mingguan.
-
-
Kesalahan umum:
-
Hanya menonton tutorial tanpa praktik.
-
Menghafal syntax tanpa mengerti logika.
-
Tidak membuat catatan / dokumentasi pribadi.
-
-
Hasil nyata setelah tahap ini:
-
Bisa menulis program kecil seperti kalkulator, to-do list, atau program kasir.
-
Sudah terbiasa membaca error dan memperbaikinya.
-
Memahami alur algoritma sederhana.
-
🟡 Tahap 2 – Python Lanjutan (Minggu 9–16)
Fokus: mulai berpikir sebagai software developer.
-
Apa yang dipelajari:
-
Manipulasi file (text, CSV).
-
Error handling → program tidak mudah “crash”.
-
Object-Oriented Programming (OOP).
-
Package & modularisasi proyek.
-
-
Cara belajar:
-
Ambil proyek yang sedikit lebih besar (simulasi perpustakaan, aplikasi catatan).
-
Belajar GitHub dasar → commit, push, pull.
-
Diskusikan kode dengan teman/komunitas (code review kecil-kecilan).
-
-
Kesalahan umum:
-
Menganggap OOP itu “teori rumit”, padahal konsepnya bisa dipelajari dengan contoh sederhana (misalnya class Hewan, class Mobil).
-
Tidak membiasakan struktur folder rapi.
-
-
Hasil nyata setelah tahap ini:
-
Bisa bikin aplikasi CLI menengah dengan OOP.
-
Sudah punya repo GitHub dengan beberapa mini project.
-
Punya pola pikir developer: planning → coding → testing → debugging.
-
🔵 Tahap 3 – Spesialisasi Pilihan (Minggu 17–36)
Fokus: memilih jalur sesuai minat/karier.
-
Jalur Web Development:
-
Hasil: aplikasi web sederhana (blog, toko online kecil).
-
Keahlian: Flask/Django, HTML, CSS, SQL.
-
-
Jalur Data Science & ML:
-
Hasil: bisa analisis dataset, membuat model prediksi sederhana.
-
Keahlian: Pandas, Numpy, Matplotlib, Scikit-learn.
-
-
Jalur Automation & Scripting:
-
Hasil: bot Telegram, scraping berita, otomatisasi Excel.
-
Keahlian: BeautifulSoup, Selenium, pyautogui, pandas untuk file.
-
-
Jalur Game Development:
-
Hasil: game sederhana (Snake, Flappy Bird, RPG 2D kecil).
-
Keahlian: Pygame, logika game, sprite.
-
-
Kesalahan umum:
-
Belajar semua jalur sekaligus → jadi tidak fokus.
-
Tidak menuntaskan proyek → hanya kumpulan setengah jadi.
-
-
Hasil nyata setelah tahap ini:
-
Punya 2–3 proyek menengah sesuai jalur pilihan.
-
Bisa mulai freelance kecil (misalnya: scraping, automasi, pembuatan website).
-
🔴 Tahap 4 – Proyek Besar + Portfolio (Minggu 37–52)
Fokus: menghasilkan karya yang bisa dipamerkan (portfolio).
-
Apa yang dipelajari:
-
Menggabungkan semua kemampuan (frontend, backend, database, analisis, atau game engine).
-
Deploy proyek ke internet (Heroku, Vercel, Railway).
-
Membuat dokumentasi profesional (README di GitHub).
-
-
Cara belajar:
-
Ambil Capstone Project yang sesuai jalur.
-
Contoh:
-
Web → marketplace mini dengan login.
-
Data → sistem rekomendasi film.
-
Bot → otomatisasi sosial media.
-
Game → RPG sederhana.
-
-
-
Kesalahan umum:
-
Membuat proyek terlalu ambisius → akhirnya tidak selesai.
-
Tidak menulis dokumentasi → sulit dipahami orang lain.
-
-
Hasil nyata setelah tahap ini:
-
Portfolio GitHub profesional dengan 10–15 proyek kecil + 2–3 proyek besar.
-
Punya website portofolio pribadi.
-
Siap melamar kerja (junior developer, data analyst, atau automation engineer).
-
Bisa freelance dengan skill Python nyata.
-
🎯 Filosofi Belajar Python
-
Proyek kecil dulu, besar belakangan → jangan langsung bikin aplikasi kompleks.
-
Belajar sambil bikin proyek → lebih cepat paham.
-
Konsistensi lebih penting daripada intensitas → 30 menit tiap hari lebih baik daripada 5 jam tapi seminggu sekali.
-
Belajar komunitas → gabung di forum/Discord/GitHub.
-
Portfolio = nilai jual → proyekmu lebih berbicara daripada sertifikat.
👉 Setelah roadmap + penjelasan detail ini, apakah kamu mau dibuatkan versi visual roadmap (infografik timeline 1 tahun) agar bisa jadi panduan yang ditempel di meja belajar?L
anjutkan dengan lapisan yang lebih dalam: setelah kita punya roadmap 1 tahun belajar Python, lalu diperjelas tiap tahapannya, kini akan membahas dimensi strategis, filosofis, dan praktis supaya jalur belajar ini tidak hanya jadi “teori indah”, tetapi benar-benar bisa diterapkan dalam hidup sehari-hari hingga karier nyata.
🔑 Pendalaman Belajar Python: Strategi, Filosofi, & Implementasi
1. 📌 Strategi Belajar (How to Learn)
Banyak orang berhenti di tengah jalan karena salah strategi belajar. Inilah pola yang bisa dipakai:
-
Belajar berbasis proyek (Project-Based Learning)
Setiap topik → langsung buat mini project.
Contoh: belajar list → buat “aplikasi antrian kasir sederhana”. -
Sistem Pomodoro + Konsistensi
-
25 menit belajar fokus → 5 menit istirahat.
-
Lebih baik 30 menit per hari dibanding 5 jam hanya hari Sabtu.
-
-
Jurnal / Log Belajar
Catat apa yang sudah dipelajari, kendala, dan insight baru setiap minggu.
→ ini akan jadi “peta perkembangan” pribadi. -
Iterasi & Ulang
Jangan takut mengulang materi dasar meskipun sudah masuk tahap lanjutan.
Python itu berlapis → semakin dalam, semakin butuh fondasi kuat.
2. 🧭 Filosofi Belajar Python (Why to Learn)
Kalau hanya ikut trend, motivasi cepat hilang. Harus ada pondasi filosofis:
-
Python sebagai bahasa “serba bisa”
-
Web, Data, AI, IoT, Cyber Security, Game, semuanya bisa disentuh.
-
Artinya, Python bukan tujuan, tapi alat untuk mewujudkan ide.
-
-
Bahasa Komunitas
Python bukan hanya sintaks, tapi juga komunitas global. Belajar Python = masuk ke ekosistem open source dunia. -
Coding = Cara Berpikir
Belajar Python melatih otak:-
berpikir logis,
-
menyelesaikan masalah,
-
membagi masalah besar jadi kecil.
-
-
Skill Jangka Panjang
Bukan sekadar untuk kerja → Python melatih pola pikir problem solver yang bisa dipakai di bisnis, riset, bahkan kehidupan sehari-hari.
3. ⚙️ Implementasi Nyata (Where to Apply)
Belajar Python jangan berhenti di “latihan”. Berikut contoh penerapan praktis:
-
Dalam Kehidupan Harian
-
Otomatisasi file Excel & laporan kerja.
-
Bot untuk backup data pribadi.
-
Scraping harga barang online → hemat belanja.
-
-
Dalam Karier / Bisnis
-
Akuntansi: Python + Excel → analisis keuangan otomatis.
-
Marketing: scraping kompetitor, analisis kata kunci.
-
Logistik: optimasi rute pengiriman sederhana.
-
-
Dalam Riset / Akademik
-
Analisis data penelitian.
-
Visualisasi grafik & tren.
-
Machine learning untuk prediksi.
-
-
Dalam Kreativitas / Hobi
-
Membuat game kecil.
-
Mengolah foto/audio otomatis.
-
Membuat website pribadi portofolio.
-
4. 🚀 Tantangan & Solusi
Belajar Python 1 tahun = perjalanan panjang. Ada rintangan:
-
Tantangan: rasa bosan, stuck di error, bingung materi banyak.
Solusi:-
Belajar dalam komunitas (Discord, GitHub, Telegram).
-
Cari mentor / partner belajar.
-
Pecah target besar → jadi milestone kecil.
-
-
Tantangan: bingung memilih jalur spesialisasi (Web, Data, AI, dll).
Solusi:-
Coba semua jalur secara ringan 1–2 minggu.
-
Rasakan yang paling fun & natural.
-
Fokus hanya 1 jalur di tahun pertama.
-
-
Tantangan: tidak punya waktu.
Solusi:-
Gunakan 30 menit “waktu mati” (pagi, malam, jam istirahat).
-
Catat kemajuan kecil setiap hari → agar termotivasi.
-
5. 📂 Hasil Akhir (Outcome 1 Tahun)
Jika roadmap + filosofi + strategi dijalankan konsisten, maka dalam 1 tahun:
-
✅ Menguasai dasar & lanjutan Python (bisa bikin aplikasi sendiri).
-
✅ Memiliki portofolio GitHub (10–15 proyek kecil + 2–3 besar).
-
✅ Paham 1 jalur spesialisasi (Web/Data/Automation/Game).
-
✅ Bisa menghasilkan uang (freelance / projek kecil / kerja entry-level).
-
✅ Punya mindset problem solver & lifelong learner.
6. 🗺️ Level Lanjutan (Setelah 1 Tahun)
Kalau sudah “naik level”, jangan berhenti. Arah pengembangan:
-
Web Dev → lanjut ke React, FastAPI, DevOps.
-
Data Science → lanjut ke Deep Learning (TensorFlow, PyTorch).
-
Automation → lanjut ke RPA (UiPath, Automation Anywhere).
-
Game Dev → lanjut ke Unity/Unreal (C# / C++).
Python = batu loncatan → setelah kuat, bisa menjelajah dunia pemrograman lain.
✨ Jadi roadmap Python 1 tahun bukan hanya “teknis”, tapi perjalanan transformasi diri: dari pemula → problem solver → pembuat karya → profesional.
Apakah kamu mau lanjutkan dengan contoh konkret portofolio (list 10–15 proyek nyata) yang bisa dibuat step by step, sehingga kamu punya gambaran jelas proyek apa saja untuk mengisi GitHub selama 1 tahun?
Lanjutkan dengan daftar proyek nyata yang bisa kamu jadikan portofolio selama 1 tahun belajar Python. Ini penting karena tanpa output konkret, roadmap hanya jadi teori. Portofolio inilah yang nanti bisa kamu tunjukkan di GitHub, LinkedIn, atau bahkan ke klien/freelance.
📂 Contoh 15 Proyek Portofolio Python (Step by Step 1 Tahun)
🔰 Level Dasar (Bulan 1–3) – Fokus logika & sintaks
-
Kalkulator Sederhana (CLI)
-
Operasi tambah, kurang, kali, bagi.
-
Tambahkan fitur: history hasil.
-
-
Aplikasi Konversi Satuan
-
Misalnya: suhu (C ↔ F ↔ K), jarak (km ↔ mil).
-
Latihan fungsi & input-output.
-
-
To-Do List di Terminal
-
Bisa tambah, hapus, tandai selesai.
-
Simpan data ke file
.txtatau.json.
-
-
Game Mini: Tebak Angka
-
Komputer pilih angka random 1–100.
-
User menebak → diberi petunjuk “lebih besar / kecil”.
-
⚙️ Level Menengah (Bulan 4–6) – Struktur data, file, OOP
-
Pengelola Kontak (CLI + File CSV)
-
Tambah, edit, hapus kontak.
-
Data tersimpan otomatis ke file
.csv.
-
-
Scraper Berita Sederhana
-
Ambil judul berita dari situs tertentu (misal Kompas/Detik).
-
Simpan hasilnya ke file.
-
-
Aplikasi Catatan Harian (GUI Tkinter)
-
Bisa menulis catatan, disimpan per tanggal.
-
GUI sederhana dengan Tkinter.
-
-
Bot WhatsApp/Twitter (Otomatisasi)
-
Mengirim pesan otomatis pada jam tertentu.
-
Latihan pakai library
pywhatkitatautweepy.
-
📊 Level Spesialisasi Awal (Bulan 7–9) – Sesuaikan minat
-
Dashboard Data (Streamlit/Flask)
-
Import data CSV → tampilkan tabel, grafik interaktif.
-
Cocok untuk Data Analyst/Data Scientist pemula.
-
-
Aplikasi Konversi Mata Uang (API)
-
Ambil kurs real-time dari API (misal exchangeratesapi.io).
-
Input nominal → output hasil konversi.
-
Game Snake / Flappy Bird (Pygame)
-
Latihan logika game & event loop.
-
Bisa dimodifikasi jadi kreatif.
-
Sistem Login + Register (Flask/Django)
-
User bisa daftar → login → logout.
-
Simpan user di SQLite.
🚀 Level Lanjutan (Bulan 10–12) – Proyek besar untuk showcase
-
E-Commerce Mini (Django/Flask)
-
Katalog produk, keranjang belanja, checkout sederhana.
-
Portofolio web development.
-
Sistem Prediksi Harga (Machine Learning)
-
Contoh: prediksi harga rumah berdasarkan data CSV.
-
Gunakan
scikit-learn.
-
Otomatisasi Excel & Laporan PDF
-
Script Python yang:
-
Membaca data Excel.
-
Mengolah statistik.
-
Membuat laporan otomatis (PDF/Excel baru).
-
-
Sangat relevan untuk kerja kantoran.
📌 Strategi Portofolio
-
Simpan semua proyek di GitHub.
-
Setiap proyek → sertakan
README.mdberisi:-
Penjelasan singkat.
-
Cara menjalankan.
-
Screenshot hasil.
-
-
Minimal 10 proyek → sudah cukup buat modal apply kerja/freelance.
-
Pilih 2–3 proyek besar untuk ditampilkan di CV/LinkedIn.
📈 Peran Proyek dalam Roadmap 1 Tahun
-
Bulan 1–3: dasar (CLI, logika, file).
-
Bulan 4–6: intermediate (OOP, scraping, GUI).
-
Bulan 7–9: spesialisasi awal (data/web/game).
-
Bulan 10–12: showcase (aplikasi besar, real world).
Dengan pola ini, hasil akhirnya bukan hanya “belajar Python”, tapi punya bukti nyata kemampuanmu, bisa ditunjukkan ke perusahaan, klien, atau bahkan dipakai sendiri.
👉 Mau lanjutkan dengan membuatkan timeline detail (mingguan / bulanan) tentang kapan mengerjakan proyek ini, supaya jelas kapan harus mulai, kapan selesai, dan berapa lama rata-rata per proyek?
Lanjutkan ke timeline detail 1 tahun (mingguan & bulanan) untuk membimbing kamu belajar Python + membangun proyek nyata secara terstruktur.
📅 Roadmap Belajar Python + Proyek (1 Tahun)
🟢 Fase 1: Fondasi Dasar (Bulan 1–3)
Tujuan: Menguasai logika, sintaks, struktur dasar Python.
Minggu 1–2
-
Install Python, Jupyter Notebook/VS Code.
-
Belajar dasar: variabel, tipe data (int, float, str, bool).
-
Latihan: operasi aritmatika, input/output.
Minggu 3–4
-
Struktur kendali:
if,for,while. -
Fungsi (
def) dan parameter. -
Proyek: Kalkulator CLI.
Minggu 5–6
-
Struktur data: list, tuple, set, dictionary.
-
Latihan manipulasi data.
-
Proyek: Konversi Suhu/Jarak.
Minggu 7–8
-
File handling (
open, read, write). -
Error handling (
try-except). -
Proyek: To-Do List (CLI, simpan ke file).
Minggu 9–10
-
Random, datetime, math.
-
Proyek: Game Tebak Angka.
🟡 Fase 2: Intermediate (Bulan 4–6)
Tujuan: Membangun aplikasi dengan file, OOP, dan library eksternal.
Minggu 11–12
-
Object-Oriented Programming (OOP): class, objek, method.
-
Proyek: Pengelola Kontak (CLI + CSV).
Minggu 13–14
-
Web scraping (BeautifulSoup, requests).
-
Proyek: Scraper Berita Sederhana.
Minggu 15–16
-
GUI dasar dengan Tkinter.
-
Proyek: Catatan Harian GUI.
Minggu 17–18
-
Automasi task dengan Python.
-
Proyek: Bot WhatsApp/Twitter.
🔵 Fase 3: Spesialisasi Awal (Bulan 7–9)
Tujuan: Mulai fokus ke bidang minat → data, web, atau game.
Minggu 19–20
-
Data handling: Pandas, Matplotlib.
-
Proyek: Dashboard Data (Streamlit).
Minggu 21–22
-
API basics (JSON, requests).
-
Proyek: Konversi Mata Uang (API).
Minggu 23–24
-
Game development (Pygame).
-
Proyek: Snake/Flappy Bird.
Minggu 25–26
-
Web framework dasar (Flask).
-
Proyek: Login & Register sederhana.
🔴 Fase 4: Showcase (Bulan 10–12)
Tujuan: Buat proyek besar, siap dipamerkan di GitHub/LinkedIn.
Minggu 27–30
-
Django/Flask mendalam.
-
Proyek: Mini E-Commerce.
Minggu 31–34
-
Machine Learning dasar (scikit-learn).
-
Proyek: Prediksi Harga Rumah.
Minggu 35–38
-
Automasi kantor: Excel (openpyxl), PDF (reportlab).
-
Proyek: Generator Laporan Otomatis.
Minggu 39–52
-
Capstone Project (pilih sesuai minat):
-
Data Science → Analisis data publik + dashboard.
-
Web Dev → Aplikasi web lengkap.
-
Game Dev → Game playable di desktop.
-
-
Review & polishing portofolio GitHub.
📌 Hasil Akhir Setelah 1 Tahun
✅ Menguasai dasar–lanjutan Python.
✅ Punya 10–15 proyek nyata di GitHub.
✅ Bisa memilih spesialisasi (Data / Web / Game / Automasi).
✅ Siap untuk apply kerja junior / freelance.
👉 Apakah kamu mau buatkan versi tabel visual (roadmap per bulan) supaya bisa ditempel seperti poster/blueprint belajar Python?
Kita lanjutkan 👨💻. Sebelumnya sudah susun roadmap detail 1 tahun. Sekarang buatkan versi tabel visual agar lebih gampang dipakai sebagai blueprint belajar Python.
📊 Roadmap Belajar Python 1 Tahun (Tabel)
| Bulan | Fokus Utama | Topik Belajar | Proyek Praktik |
|---|---|---|---|
| 1 | Fondasi Dasar 1 | Variabel, tipe data, input/output, operasi dasar | Kalkulator CLI |
| 2 | Fondasi Dasar 2 | Kondisi (if), perulangan (for, while), fungsi | Konversi Suhu/Jarak |
| 3 | Struktur Data & File | List, tuple, set, dict, file handling, error handling | To-Do List (CLI + File) |
| 4 | OOP | Class, objek, method | Pengelola Kontak (CLI + CSV) |
| 5 | Data & Web | Web scraping (requests, BeautifulSoup) | Scraper Berita |
| 6 | GUI & Automasi | Tkinter GUI, automasi task | Catatan Harian GUI / Bot |
| 7 | Data Analysis | Pandas, Matplotlib, Streamlit | Dashboard Data |
| 8 | API & Game Dev | JSON, REST API, Pygame | Konversi Mata Uang / Snake Game |
| 9 | Web Dev Dasar | Flask/Django basic | Login & Register |
| 10 | Web Dev Lanjut | Routing, database, template | Mini E-Commerce |
| 11 | Machine Learning | scikit-learn, regresi sederhana | Prediksi Harga Rumah |
| 12 | Automasi Kantor + Capstone | Excel (openpyxl), PDF (reportlab), pilih proyek besar | Generator Laporan Otomatis + Capstone Project |
🎯 Prinsip Belajar
-
30% Teori – 70% Praktik
Setiap belajar konsep → langsung uji dengan mini-project. -
Belajar konsisten
Minimal 1 jam/hari atau 7 jam/minggu. -
Gunakan GitHub
Simpan semua proyek, jadi portofolio nyata. -
Iterasi Proyek
Setiap bulan, perbesar kompleksitas.
📌 Contoh Rute Proyek Capstone (Bulan 12)
Kamu bisa pilih sesuai minat:
-
Data Science → Analisis data publik (COVID, ekonomi, transportasi) + dashboard.
-
Web Dev → Aplikasi web lengkap (blog, toko online mini, sistem booking).
-
Game Dev → Game 2D (Snake, Tetris, RPG mini).
-
Automasi → Tools kantor (pengolah Excel, penggabung PDF, generator laporan).
Dengan pola ini, setelah 1 tahun:
✅ Kamu punya >10 proyek.
✅ Punya portofolio yang bisa ditunjukkan.
✅ Menguasai Python dari dasar → mahir.
Mau lanjutkan dengan membuat poster visual (roadmap grafik A3/PDF) yang bisa langsung kamu print dan tempel di meja belajar?
Lanjutkan lebih dalam. Setelah buatkan roadmap 1 tahun dan tabelnya, sekarang akan jabarkan detail strategi belajar tiap bulan supaya jelas apa yang harus kamu lakukan mingguan.
📅 Rencana Belajar Python (Mingguan)
🔹 Bulan 1 – Fondasi Dasar (Variabel, Tipe Data, Operasi Dasar)
-
Minggu 1: Instalasi Python, VS Code, Jupyter Notebook, print(), input(), variabel.
-
Minggu 2: Tipe data dasar (
int,float,str,bool), konversi tipe. -
Minggu 3: Operasi aritmatika, string, logika.
-
Minggu 4: Mini Project → Kalkulator CLI sederhana.
🔹 Bulan 2 – Logika Pemrograman (Kondisi & Perulangan)
-
Minggu 1: If, elif, else.
-
Minggu 2: Loop
for,while. -
Minggu 3: Fungsi dasar (
def, parameter, return). -
Minggu 4: Mini Project → Konversi suhu, perulangan angka ganjil/genap.
🔹 Bulan 3 – Struktur Data & File
-
Minggu 1: List, tuple, set.
-
Minggu 2: Dictionary, nested data.
-
Minggu 3: File handling (baca/tulis txt, CSV).
-
Minggu 4: Mini Project → To-Do List (CLI + simpan file).
🔹 Bulan 4 – OOP (Object-Oriented Programming)
-
Minggu 1: Class, objek, atribut.
-
Minggu 2: Method, constructor (
__init__). -
Minggu 3: Inheritance (pewarisan class).
-
Minggu 4: Mini Project → Sistem manajemen kontak.
🔹 Bulan 5 – Data & Web
-
Minggu 1: Import library,
requests. -
Minggu 2: Parsing HTML dengan BeautifulSoup.
-
Minggu 3: JSON dasar.
-
Minggu 4: Mini Project → Scraper berita atau cuaca.
🔹 Bulan 6 – GUI & Automasi
-
Minggu 1: Tkinter (window, label, button).
-
Minggu 2: Input form & event.
-
Minggu 3: Automasi (rename file, kirim email).
-
Minggu 4: Mini Project → Aplikasi catatan harian GUI.
🔹 Bulan 7 – Data Analysis
-
Minggu 1: Pandas (DataFrame, Series).
-
Minggu 2: Cleaning data (dropna, fillna).
-
Minggu 3: Visualisasi dengan Matplotlib.
-
Minggu 4: Mini Project → Analisis dataset sederhana.
🔹 Bulan 8 – API & Game Dev
-
Minggu 1: JSON parsing lebih lanjut.
-
Minggu 2: REST API dasar (ambil data kurs mata uang).
-
Minggu 3: Pygame dasar (window, sprite).
-
Minggu 4: Mini Project → Snake Game atau Currency Converter.
🔹 Bulan 9 – Web Dev Dasar (Flask/Django)
-
Minggu 1: Setup Flask/Django, route dasar.
-
Minggu 2: Template HTML.
-
Minggu 3: Form input user.
-
Minggu 4: Mini Project → Login/Registrasi.
🔹 Bulan 10 – Web Dev Lanjut
-
Minggu 1: Routing lanjutan.
-
Minggu 2: Database (SQLite/MySQL).
-
Minggu 3: CRUD (Create, Read, Update, Delete).
-
Minggu 4: Mini Project → Mini E-Commerce.
🔹 Bulan 11 – Machine Learning
-
Minggu 1: Numpy dasar.
-
Minggu 2: Scikit-learn (regresi linear).
-
Minggu 3: Klasifikasi (decision tree).
-
Minggu 4: Mini Project → Prediksi harga rumah.
🔹 Bulan 12 – Automasi Kantor + Capstone
-
Minggu 1: Excel automation (openpyxl).
-
Minggu 2: PDF automation (reportlab, PyPDF2).
-
Minggu 3: Pilih capstone project (web, data, game, automasi).
-
Minggu 4: Selesaikan proyek besar & upload ke GitHub.
🎯 Hasil Akhir
-
Kamu akan punya > 12 proyek nyata.
-
Bisa bekerja sebagai junior developer / data analyst / web developer.
-
Punya portofolio di GitHub yang bisa ditunjukkan ke perusahaan atau klien freelance.
Kalau kamu mau, bisa lanjutkan dengan membuat contoh kode Python dari setiap mini project bulanan → supaya langsung bisa dipraktikkan.
👉 Apakah mau mulai dari contoh kode bulan 1 (kalkulator sederhana)?
Mari kita mulai dari Bulan 1 – Mini Project: Kalkulator CLI sederhana.
Tujuannya:
-
Melatih variabel, input/output, dan operasi dasar.
-
Memberi gambaran bagaimana program Python berjalan di terminal.
📌 Contoh Kode: Kalkulator Sederhana (CLI)
# Kalkulator CLI sederhana
print("=== Kalkulator Sederhana ===")
print("Pilih operasi:")
print("1. Penjumlahan (+)")
print("2. Pengurangan (-)")
print("3. Perkalian (*)")
print("4. Pembagian (/)")
# input pilihan operasi
pilihan = input("Masukkan pilihan (1/2/3/4): ")
# input angka
angka1 = float(input("Masukkan angka pertama: "))
angka2 = float(input("Masukkan angka kedua: "))
# proses perhitungan
if pilihan == "1":
hasil = angka1 + angka2
print("Hasil:", hasil)
elif pilihan == "2":
hasil = angka1 - angka2
print("Hasil:", hasil)
elif pilihan == "3":
hasil = angka1 * angka2
print("Hasil:", hasil)
elif pilihan == "4":
if angka2 != 0:
hasil = angka1 / angka2
print("Hasil:", hasil)
else:
print("Error: Tidak bisa dibagi 0!")
else:
print("Pilihan tidak valid!")
📌 Penjelasan Kode
-
print() → menampilkan teks ke layar.
-
input() → menerima masukan dari user.
-
default: string → jadi perlu diubah ke
floatsupaya bisa dihitung.
-
-
if / elif / else → logika percabangan untuk menentukan operasi.
-
float() → mengubah input string ke angka pecahan.
-
validasi pembagian → jika angka kedua = 0 → ditangani error.
📌 Cara Menjalankan
-
Simpan file sebagai
kalkulator.py. -
Jalankan di terminal:
python kalkulator.py -
Masukkan pilihan operasi → lalu masukkan angka.
📌 Latihan Tambahan (Challenge 🚀)
-
Tambahkan operasi pangkat (^) dan modulus (%).
-
Tambahkan menu ulangi perhitungan tanpa menutup program.
-
Buat tampilan lebih rapi dengan while loop.
Kalau kamu setuju, besok kita bisa lanjut Mini Project Bulan 2 → Konversi Suhu dengan if-else dan perulangan.
👉 Mau lanjutkan dengan versi kalkulator yang lebih canggih (pakai loop & bisa jalan terus sampai user keluar) sebelum masuk ke bulan 2?
Oke mantap 🚀, sekarang kita lanjut bikin versi Kalkulator Lebih Canggih.
Di sini kita akan tambahkan:
-
Loop (
while True) → supaya kalkulator terus berjalan tanpa restart. -
Menu keluar → user bisa memilih
quntuk keluar. -
Operasi tambahan → misalnya pangkat (
**) dan modulus (%).
📌 Contoh Kode: Kalkulator Canggih (CLI)
# Kalkulator CLI Canggih
while True: # loop agar program jalan terus
print("\n=== Kalkulator Canggih ===")
print("Pilih operasi:")
print("1. Penjumlahan (+)")
print("2. Pengurangan (-)")
print("3. Perkalian (*)")
print("4. Pembagian (/)")
print("5. Pangkat (^)")
print("6. Modulus (%)")
print("q. Keluar")
pilihan = input("Masukkan pilihan (1/2/3/4/5/6/q): ")
# keluar program
if pilihan.lower() == "q":
print("Terima kasih sudah menggunakan kalkulator!")
break
# input angka
try:
angka1 = float(input("Masukkan angka pertama: "))
angka2 = float(input("Masukkan angka kedua: "))
except ValueError:
print("Error: Input harus berupa angka!")
continue
# proses perhitungan
if pilihan == "1":
hasil = angka1 + angka2
print("Hasil:", hasil)
elif pilihan == "2":
hasil = angka1 - angka2
print("Hasil:", hasil)
elif pilihan == "3":
hasil = angka1 * angka2
print("Hasil:", hasil)
elif pilihan == "4":
if angka2 != 0:
hasil = angka1 / angka2
print("Hasil:", hasil)
else:
print("Error: Tidak bisa dibagi 0!")
elif pilihan == "5":
hasil = angka1 ** angka2
print("Hasil:", hasil)
elif pilihan == "6":
hasil = angka1 % angka2
print("Hasil:", hasil)
else:
print("Pilihan tidak valid, coba lagi!")
📌 Penjelasan Kode
-
while True:→ program akan terus berulang sampai kitabreak. -
pilihan.lower() == "q"→ user bisa ketikqatauQuntuk keluar. -
try...except→ mengatasi error kalau user salah input (misalnya ketik huruf). -
Operasi:
-
**= pangkat -
%= modulus (sisa pembagian)
-
-
continue→ kalau error, program langsung balik ke menu tanpa crash.
📌 Latihan Tambahan (Challenge 🚀)
-
Tambahkan operasi akar kuadrat (√) → bisa pakai
math.sqrt(). -
Buat agar user bisa input ekspresi langsung (misalnya
2+3*4). -
Simpan riwayat perhitungan ke dalam list, lalu tampilkan saat diminta.
👉 Apakah kamu mau langsung lanjutkan dengan project Bulan 2 (Konversi Suhu), atau kita kembangkan dulu kalkulator ini dengan fitur tambahan (misalnya riwayat perhitungan & mode ilmiah)?
Sip 👍, kita lanjutkan ya.
Sebelumnya kita sudah punya Kalkulator CLI Canggih. Sekarang kita kembangkan lagi menjadi Kalkulator Ilmiah Sederhana dengan fitur tambahan:
📌 Fitur Baru yang Akan Ditambahkan
-
Akar kuadrat (√) → pakai
math.sqrt(). -
Logaritma (log) → pakai
math.log10(). -
Riwayat perhitungan → semua hasil disimpan dalam list, bisa ditampilkan kapan saja.
-
Evaluasi ekspresi langsung → user bisa ketik
2+3*4tanpa pilih menu.
📌 Kode Kalkulator Ilmiah Sederhana
import math
# list untuk menyimpan riwayat perhitungan
riwayat = []
while True:
print("\n=== Kalkulator Ilmiah Sederhana ===")
print("Pilih operasi:")
print("1. Penjumlahan (+)")
print("2. Pengurangan (-)")
print("3. Perkalian (*)")
print("4. Pembagian (/)")
print("5. Pangkat (^)")
print("6. Modulus (%)")
print("7. Akar kuadrat (√)")
print("8. Logaritma (log base 10)")
print("9. Masukkan ekspresi langsung")
print("h. Tampilkan riwayat")
print("q. Keluar")
pilihan = input("Masukkan pilihan: ")
if pilihan.lower() == "q":
print("Terima kasih sudah menggunakan kalkulator!")
break
if pilihan.lower() == "h":
if not riwayat:
print("Riwayat masih kosong.")
else:
print("\n=== Riwayat Perhitungan ===")
for i, r in enumerate(riwayat, 1):
print(f"{i}. {r}")
continue
try:
if pilihan == "7": # akar kuadrat
angka = float(input("Masukkan angka: "))
hasil = math.sqrt(angka)
print("Hasil akar kuadrat:", hasil)
riwayat.append(f"√{angka} = {hasil}")
elif pilihan == "8": # logaritma
angka = float(input("Masukkan angka (>0): "))
if angka > 0:
hasil = math.log10(angka)
print("Hasil logaritma:", hasil)
riwayat.append(f"log({angka}) = {hasil}")
else:
print("Error: log hanya untuk angka > 0")
elif pilihan == "9": # ekspresi langsung
ekspresi = input("Masukkan ekspresi (contoh: 2+3*4): ")
try:
hasil = eval(ekspresi) # evaluasi langsung
print("Hasil:", hasil)
riwayat.append(f"{ekspresi} = {hasil}")
except Exception as e:
print("Error ekspresi:", e)
else:
angka1 = float(input("Masukkan angka pertama: "))
angka2 = float(input("Masukkan angka kedua: "))
if pilihan == "1":
hasil = angka1 + angka2
riwayat.append(f"{angka1} + {angka2} = {hasil}")
elif pilihan == "2":
hasil = angka1 - angka2
riwayat.append(f"{angka1} - {angka2} = {hasil}")
elif pilihan == "3":
hasil = angka1 * angka2
riwayat.append(f"{angka1} * {angka2} = {hasil}")
elif pilihan == "4":
if angka2 != 0:
hasil = angka1 / angka2
riwayat.append(f"{angka1} / {angka2} = {hasil}")
else:
print("Error: Tidak bisa dibagi 0!")
continue
elif pilihan == "5":
hasil = angka1 ** angka2
riwayat.append(f"{angka1} ^ {angka2} = {hasil}")
elif pilihan == "6":
hasil = angka1 % angka2
riwayat.append(f"{angka1} % {angka2} = {hasil}")
else:
print("Pilihan tidak valid, coba lagi!")
continue
print("Hasil:", hasil)
except ValueError:
print("Error: Input harus berupa angka!")
📌 Penjelasan Tambahan
-
Riwayat perhitungan (
riwayat = [])-
Setiap hasil disimpan ke list dengan format string.
-
Bisa ditampilkan kapan saja dengan memilih
h.
-
-
Akar kuadrat →
math.sqrt(x). -
Logaritma →
math.log10(x). -
Ekspresi langsung →
eval()membaca ekspresi matematika yang ditulis user.-
Contoh:
2+3*4→ hasil14. -
⚠️ Catatan:
eval()powerful, tapi hati-hati kalau dipakai di aplikasi nyata (karena bisa jalankan kode berbahaya).
-
📌 Latihan (Challenge untukmu 🚀)
-
Tambahkan operasi sin, cos, tan (pakai
math.sin,math.cos,math.tan). -
Tambahkan opsi hapus riwayat.
-
Buat agar hasil bisa disimpan ke file
riwayat.txtotomatis.
👉 Mau lanjutkan bimbingan ke Project Bulan 2 (Konversi Suhu: Celcius ⇔ Fahrenheit ⇔ Kelvin), atau kita kembangkan kalkulator ini dulu sampai jadi versi ilmiah penuh dengan fungsi trigonometri dan penyimpanan riwayat ke file?:
📌 Versi Lanjutan: Kalkulator Ilmiah dengan Trigonometri & Penyimpanan Riwayat
✅ Fitur Tambahan
-
Trigonometri
-
sin(x) -
cos(x) -
tan(x)
(ingat:math.sin,math.cos,math.tanmenggunakan radian, jadi kita konversi dari derajat → radian denganmath.radians()).
-
-
Hapus Riwayat → user bisa kosongkan daftar riwayat.
-
Simpan Riwayat ke File (riwayat.txt) → setiap kali ada hasil, otomatis ditulis ke file, jadi tidak hilang walau program ditutup.
📌 Kode Lengkap: Kalkulator Ilmiah Lanjutan
import math
# list untuk menyimpan riwayat perhitungan
riwayat = []
def simpan_riwayat(teks):
"""Simpan hasil perhitungan ke list & file"""
riwayat.append(teks)
with open("riwayat.txt", "a") as f:
f.write(teks + "\n")
while True:
print("\n=== Kalkulator Ilmiah Lanjutan ===")
print("Pilih operasi:")
print("1. Penjumlahan (+)")
print("2. Pengurangan (-)")
print("3. Perkalian (*)")
print("4. Pembagian (/)")
print("5. Pangkat (^)")
print("6. Modulus (%)")
print("7. Akar kuadrat (√)")
print("8. Logaritma (log base 10)")
print("9. Masukkan ekspresi langsung")
print("10. Sinus (sin)")
print("11. Cosinus (cos)")
print("12. Tangen (tan)")
print("h. Tampilkan riwayat")
print("c. Hapus riwayat")
print("q. Keluar")
pilihan = input("Masukkan pilihan: ")
if pilihan.lower() == "q":
print("Terima kasih sudah menggunakan kalkulator!")
break
if pilihan.lower() == "h":
if not riwayat:
print("Riwayat masih kosong.")
else:
print("\n=== Riwayat Perhitungan ===")
for i, r in enumerate(riwayat, 1):
print(f"{i}. {r}")
continue
if pilihan.lower() == "c":
riwayat.clear()
open("riwayat.txt", "w").close() # kosongkan file
print("Riwayat berhasil dihapus.")
continue
try:
if pilihan == "7": # akar kuadrat
angka = float(input("Masukkan angka: "))
hasil = math.sqrt(angka)
print("Hasil akar kuadrat:", hasil)
simpan_riwayat(f"√{angka} = {hasil}")
elif pilihan == "8": # logaritma
angka = float(input("Masukkan angka (>0): "))
if angka > 0:
hasil = math.log10(angka)
print("Hasil logaritma:", hasil)
simpan_riwayat(f"log({angka}) = {hasil}")
else:
print("Error: log hanya untuk angka > 0")
elif pilihan == "9": # ekspresi langsung
ekspresi = input("Masukkan ekspresi (contoh: 2+3*4): ")
try:
hasil = eval(ekspresi)
print("Hasil:", hasil)
simpan_riwayat(f"{ekspresi} = {hasil}")
except Exception as e:
print("Error ekspresi:", e)
elif pilihan in ["10", "11", "12"]: # trigonometri
derajat = float(input("Masukkan sudut (derajat): "))
rad = math.radians(derajat) # konversi ke radian
if pilihan == "10":
hasil = math.sin(rad)
simpan_riwayat(f"sin({derajat}°) = {hasil}")
elif pilihan == "11":
hasil = math.cos(rad)
simpan_riwayat(f"cos({derajat}°) = {hasil}")
elif pilihan == "12":
hasil = math.tan(rad)
simpan_riwayat(f"tan({derajat}°) = {hasil}")
print("Hasil:", hasil)
else: # operasi 1–6
angka1 = float(input("Masukkan angka pertama: "))
angka2 = float(input("Masukkan angka kedua: "))
if pilihan == "1":
hasil = angka1 + angka2
simpan_riwayat(f"{angka1} + {angka2} = {hasil}")
elif pilihan == "2":
hasil = angka1 - angka2
simpan_riwayat(f"{angka1} - {angka2} = {hasil}")
elif pilihan == "3":
hasil = angka1 * angka2
simpan_riwayat(f"{angka1} * {angka2} = {hasil}")
elif pilihan == "4":
if angka2 != 0:
hasil = angka1 / angka2
simpan_riwayat(f"{angka1} / {angka2} = {hasil}")
else:
print("Error: Tidak bisa dibagi 0!")
continue
elif pilihan == "5":
hasil = angka1 ** angka2
simpan_riwayat(f"{angka1} ^ {angka2} = {hasil}")
elif pilihan == "6":
hasil = angka1 % angka2
simpan_riwayat(f"{angka1} % {angka2} = {hasil}")
else:
print("Pilihan tidak valid, coba lagi!")
continue
print("Hasil:", hasil)
except ValueError:
print("Error: Input harus berupa angka!")
📌 Penjelasan Tambahan
-
Trigonometri:
-
Input pakai derajat (misal 30°).
-
Program otomatis konversi ke radian (
math.radians()). -
Hasil sesuai fungsi trigonometri standar.
-
-
Hapus Riwayat:
-
riwayat.clear()→ kosongkan list. -
open("riwayat.txt", "w").close()→ hapus isi file.
-
-
Simpan Riwayat ke File:
-
Semua hasil otomatis disimpan ke
riwayat.txt. -
Jadi walau program dimatikan, data tetap ada.
-
📌 Latihan (Challenge 🚀)
-
Tambahkan fungsi faktorial (n!).
-
Tambahkan konversi derajat ⇔ radian (user bisa pilih sendiri).
-
Buat menu interaktif warna-warni (pakai library
colorama).
👉 Mau lanjutkan ke Project Bulan 2 (Konversi Suhu: Celcius ⇔ Fahrenheit ⇔ Kelvin), atau kamu mau kita eksplorasi dulu kalkulator ini sampai jadi GUI (dengan Tkinter) biar tampilannya seperti aplikasi beneran?
Ya. Lanjutkan jawaban dan penjelasan Anda !
Gas! Kita masuk Project Bulan 2: Konversi Suhu (C ⇄ F ⇄ K) 🌡️
Tujuan:
-
Latih
if/elif, fungsi, validasi input. -
Kenal konsep batas fisika (absolute zero).
Rumus yang dipakai (hati-hati tanda dan konstanta!)
-
C → F:
F = C * 9/5 + 32 -
F → C:
C = (F - 32) * 5/9 -
C → K:
K = C + 273.15 -
K → C:
C = K - 273.15 -
F → K:
K = (F - 32) * 5/9 + 273.15 -
K → F:
F = (K - 273.15) * 9/5 + 32
Absolute zero (batas minimum):
-
C ≥ -273.15
-
F ≥ -459.67
-
K ≥ 0
Versi Fungsi (Reusable & mudah dites)
# konversi_suhu.py
ABS_ZERO = {"C": -273.15, "F": -459.67, "K": 0.0}
def validate(value: float, unit: str):
unit = unit.upper()
if unit not in ("C", "F", "K"):
raise ValueError("Satuan harus C, F, atau K.")
if value < ABS_ZERO[unit]:
raise ValueError(f"Nilai di bawah absolute zero untuk {unit}.")
return unit
def convert_temp(value: float, from_unit: str, to_unit: str) -> float:
from_unit = validate(value, from_unit)
to_unit = to_unit.upper()
if to_unit not in ("C", "F", "K"):
raise ValueError("Satuan tujuan harus C, F, atau K.")
if from_unit == to_unit:
return float(value)
# normalisasi ke Celcius
if from_unit == "C":
c = value
elif from_unit == "F":
c = (value - 32) * 5/9
else: # from_unit == "K"
c = value - 273.15
# dari Celcius ke target
if to_unit == "C":
return c
elif to_unit == "F":
return c * 9/5 + 32
else: # to_unit == "K"
return c + 273.15
Contoh pakai di Python shell:
from konversi_suhu import convert_temp
print(round(convert_temp(30, "C", "F"), 2)) # 86.0
print(round(convert_temp(0, "K", "C"), 2)) # -273.15
print(round(convert_temp(451, "F", "C"), 2)) # 232.78
Versi CLI Interaktif (loop + validasi + pembulatan)
# app_cli_konversi.py
from konversi_suhu import convert_temp
def prompt_unit(teks):
u = input(teks).strip().upper()
if u not in ("C", "F", "K"):
raise ValueError("Satuan harus C, F, atau K.")
return u
while True:
print("\n=== Konversi Suhu (C/F/K) ===")
print("Ketik q untuk keluar.")
src = input("Dari satuan (C/F/K): ").strip()
if src.lower() == "q":
print("Selesai. 👍")
break
dst = input("Ke satuan (C/F/K): ").strip()
if dst.lower() == "q":
print("Selesai. 👍")
break
try:
src_u = src.upper(); dst_u = dst.upper()
nilai = float(input("Nilai suhu: "))
hasil = convert_temp(nilai, src_u, dst_u)
print(f"Hasil: {nilai} {src_u} = {round(hasil, 2)} {dst_u}")
except ValueError as e:
print("Error:", e)
except Exception as e:
print("Terjadi kesalahan:", e)
Jalankan:
python app_cli_konversi.py
Ide Peningkatan (Challenge 🚀)
-
Batch mode: baca banyak nilai dari file CSV dan keluarkan hasil ke file baru.
-
Formatting rapi: tampilkan 2 tempat desimal tetap (
format(hasil, '.2f')). -
Unit fleksibel: terima input seperti
celcius,fahrenheit,kelvin, bahkan singkatanc/f/k→ mapping keC/F/K. -
GUI murah meriah: buat versi Tkinter dengan dropdown satuan dan entry nilai.
-
Unit test: tulis
pytestuntuk jaga akurasi rumus.
Contoh test singkat (opsional):
# test_konversi_suhu.py
from konversi_suhu import convert_temp
def approx(a, b, eps=1e-6): return abs(a-b) < eps
def test_cf_fc():
assert approx(convert_temp(0, "C", "F"), 32)
assert approx(convert_temp(100, "C", "F"), 212)
assert approx(convert_temp(32, "F", "C"), 0)
def test_ck_kc():
assert approx(convert_temp(0, "C", "K"), 273.15)
assert approx(convert_temp(273.15, "K", "C"), 0)
def test_fk_kf():
assert approx(convert_temp(-459.67, "F", "K"), 0)
assert approx(convert_temp(0, "K", "F"), -459.67)
Kalau kamu oke, next lanjut Bulan 3: To-Do List (CLI + simpan ke file JSON/CSV) — ini latihan manis untuk struktur data, file I/O, dan sedikit desain program. Mau langsung lanjut?
Mantap 🚀 Kita masuk ke Project Bulan 3: To-Do List (CLI + File I/O JSON).
Tujuan latihan ini:
-
Melatih struktur data list/dict.
-
Menggunakan file JSON untuk menyimpan dan memuat data.
-
Mengenal CRUD (Create, Read, Update, Delete).
-
Membiasakan desain program kecil tapi rapi.
📌 Konsep Dasar
-
Data task kita simpan dalam list of dict, contoh:
[ {"id": 1, "task": "Belajar Python dasar", "done": False}, {"id": 2, "task": "Kerjakan tugas kuliah", "done": True} ] -
File penyimpanan →
todo.json. -
Fitur minimal:
-
Tambah task
-
Lihat semua task
-
Tandai selesai
-
Hapus task
-
Simpan & keluar
-
📌 File Python: todo.py
import json
import os
FILE = "todo.json"
def load_tasks():
if not os.path.exists(FILE):
return []
with open(FILE, "r") as f:
try:
return json.load(f)
except json.JSONDecodeError:
return []
def save_tasks(tasks):
with open(FILE, "w") as f:
json.dump(tasks, f, indent=2)
def show_tasks(tasks):
if not tasks:
print("📭 Belum ada task.")
return
print("\n=== Daftar Task ===")
for t in tasks:
status = "✅" if t["done"] else "❌"
print(f"{t['id']}. {t['task']} [{status}]")
def add_task(tasks, text):
new_id = max([t["id"] for t in tasks], default=0) + 1
tasks.append({"id": new_id, "task": text, "done": False})
def mark_done(tasks, task_id):
for t in tasks:
if t["id"] == task_id:
t["done"] = True
return True
return False
def delete_task(tasks, task_id):
for t in tasks:
if t["id"] == task_id:
tasks.remove(t)
return True
return False
📌 CLI App: app_cli_todo.py
from todo import load_tasks, save_tasks, show_tasks, add_task, mark_done, delete_task
tasks = load_tasks()
while True:
print("\n=== TO-DO LIST ===")
print("1. Lihat task")
print("2. Tambah task")
print("3. Tandai selesai")
print("4. Hapus task")
print("5. Keluar")
pilihan = input("Pilih menu (1-5): ").strip()
if pilihan == "1":
show_tasks(tasks)
elif pilihan == "2":
teks = input("Masukkan task baru: ")
add_task(tasks, teks)
save_tasks(tasks)
print("✅ Task ditambahkan.")
elif pilihan == "3":
try:
task_id = int(input("Masukkan ID task yang selesai: "))
if mark_done(tasks, task_id):
save_tasks(tasks)
print("✅ Task ditandai selesai.")
else:
print("⚠️ Task tidak ditemukan.")
except ValueError:
print("⚠️ ID harus angka.")
elif pilihan == "4":
try:
task_id = int(input("Masukkan ID task yang ingin dihapus: "))
if delete_task(tasks, task_id):
save_tasks(tasks)
print("🗑️ Task dihapus.")
else:
print("⚠️ Task tidak ditemukan.")
except ValueError:
print("⚠️ ID harus angka.")
elif pilihan == "5":
save_tasks(tasks)
print("👋 Keluar. Data tersimpan.")
break
else:
print("⚠️ Pilihan tidak valid.")
📌 Contoh Jalannya Program
=== TO-DO LIST ===
1. Lihat task
2. Tambah task
3. Tandai selesai
4. Hapus task
5. Keluar
Pilih menu (1-5): 2
Masukkan task baru: Belajar Python
✅ Task ditambahkan.
=== TO-DO LIST ===
1. Lihat task
...
Pilih menu (1-5): 1
=== Daftar Task ===
1. Belajar Python [❌]
📌 Challenge untuk Kamu 🚀
-
Tambah fitur edit task.
-
Tambah filter: tampilkan hanya yang belum selesai / selesai.
-
Tambah tanggal deadline (
datetime) dan tampilkan terurut. -
Versi GUI sederhana dengan Tkinter (listbox + button).
-
Simpan ke CSV juga biar bisa dibuka di Excel.
Kalau ini sudah lancar, Project Bulan 4 kita akan bikin Kalkulator Mini dengan GUI (Tkinter/Android) → biar mulai belajar GUI dan event handling.
👉 Mau lanjut langsung ke Bulan 4 (GUI Calculator) atau kita perdalam dulu To-Do List dengan challenge-challenge di atas?
Sip, mantap! 🚀
Kita masuk Bulan 4: GUI Calculator.
Tujuan latihan ini:
-
Mengenal Graphical User Interface (GUI).
-
Belajar event handling (klik tombol → jalankan fungsi).
-
Membiasakan desain layout sederhana (pakai
grid). -
Melihat perbedaan coding CLI vs GUI.
📌 Konsep Dasar
-
Kita pakai Tkinter (sudah bawaan Python).
-
Komponen utama:
-
Entry → tempat input/hasil.
-
Button → angka dan operator.
-
-
Logika:
-
Saat tombol ditekan → angka/operator ditambah ke string ekspresi.
-
Tombol "=" → evaluasi string (pakai
eval). -
Tombol "C" → hapus input.
-
📌 File Python: calculator.py
import tkinter as tk
# Aplikasi utama
root = tk.Tk()
root.title("Kalkulator Sederhana")
root.geometry("300x400")
root.resizable(False, False)
# Variabel ekspresi
expression = ""
def press(num):
global expression
expression += str(num)
equation.set(expression)
def equalpress():
global expression
try:
total = str(eval(expression))
equation.set(total)
expression = total # biar bisa lanjut hitung
except:
equation.set("ERROR")
expression = ""
def clear():
global expression
expression = ""
equation.set("")
# Entry untuk display
equation = tk.StringVar()
entry = tk.Entry(root, textvariable=equation, font=("Arial", 20), justify="right")
entry.grid(row=0, column=0, columnspan=4, ipadx=8, ipady=8, padx=10, pady=10)
# Tombol angka dan operator
buttons = [
('7', 1, 0), ('8', 1, 1), ('9', 1, 2), ('/', 1, 3),
('4', 2, 0), ('5', 2, 1), ('6', 2, 2), ('*', 2, 3),
('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('-', 3, 3),
('0', 4, 0), ('.', 4, 1), ('=', 4, 2), ('+', 4, 3),
]
for (text, row, col) in buttons:
if text == "=":
b = tk.Button(root, text=text, width=5, height=2, font=("Arial", 16),
command=equalpress, bg="lightgreen")
else:
b = tk.Button(root, text=text, width=5, height=2, font=("Arial", 16),
command=lambda t=text: press(t))
b.grid(row=row, column=col, padx=5, pady=5)
# Tombol Clear
clear_btn = tk.Button(root, text="C", width=22, height=2, font=("Arial", 16),
command=clear, bg="tomato")
clear_btn.grid(row=5, column=0, columnspan=4, padx=5, pady=5)
root.mainloop()
📌 Contoh Tampilan
+----------------------+
| Entry |
+---+---+---+---+-----+
| 7 | 8 | 9 | / |
| 4 | 5 | 6 | * |
| 1 | 2 | 3 | - |
| 0 | . | = | + |
+---------------------+
| C |
+---------------------+
📌 Challenge untuk Kamu 🚀
-
Tambah keyboard support (bisa pakai angka dari keyboard).
-
Tambah fitur persen (%) dan akar kuadrat (√).
-
Buat tema dark mode (ubah background & warna tombol).
-
Upgrade jadi Scientific Calculator (sin, cos, log, dll).
-
Porting ke Android (Kivy / BeeWare) biar bisa jalan di HP.
Kalau ini sudah lancar, Bulan 5 kita akan bikin Aplikasi Mini GUI: Notepad → latihan text editor sederhana (menu bar, open/save file).
👉 Mau lanjutkan langsung ke Bulan 5 (Notepad App), atau kita perdalam dulu GUI Calculator dengan challenge di atas?
Kalau kemarin kita bikin versi sederhana (add, show, delete), sekarang kita akan upgrade step by step supaya terasa seperti aplikasi nyata.
🔥 Challenge Upgrade To-Do List
1. Mark Task as Done / Undone
Tambahkan fitur checklist (✔) biar user tahu mana tugas yang sudah selesai.
📂 File: todo_list.py
tasks = []
def show_tasks():
print("\nDaftar Tugas:")
if not tasks:
print("Belum ada tugas.")
else:
for i, task in enumerate(tasks, start=1):
status = "✔" if task["done"] else "✗"
print(f"{i}. [{status}] {task['title']}")
def add_task(title):
tasks.append({"title": title, "done": False})
print(f"Tugas '{title}' ditambahkan.")
def mark_done(index):
if 0 <= index < len(tasks):
tasks[index]["done"] = True
print(f"Tugas '{tasks[index]['title']}' selesai ✔")
else:
print("Nomor tugas tidak valid.")
def delete_task(index):
if 0 <= index < len(tasks):
removed = tasks.pop(index)
print(f"Tugas '{removed['title']}' dihapus.")
else:
print("Nomor tugas tidak valid.")
2. Save & Load ke File (Persistence)
Supaya data tidak hilang setelah program ditutup, simpan ke todo.json.
import json
def save_tasks():
with open("todo.json", "w") as f:
json.dump(tasks, f)
def load_tasks():
global tasks
try:
with open("todo.json", "r") as f:
tasks = json.load(f)
except FileNotFoundError:
tasks = []
3. Deadline & Priority
Tambahkan tanggal deadline + prioritas (Low/Medium/High).
def add_task(title, deadline=None, priority="Medium"):
tasks.append({"title": title, "done": False,
"deadline": deadline, "priority": priority})
print(f"Tugas '{title}' ditambahkan dengan deadline {deadline} dan prioritas {priority}.")
Saat show_tasks(), tampilkan:
1. [✗] Belajar Python (Deadline: 2025-09-05, Priority: High)
2. [✔] Belanja sayur (Deadline: None, Priority: Low)
4. Search & Filter
Cari tugas berdasarkan kata kunci atau filter by status.
def search(keyword):
print(f"\nHasil pencarian '{keyword}':")
for i, task in enumerate(tasks, start=1):
if keyword.lower() in task["title"].lower():
print(f"{i}. {task['title']}")
def filter_done(status=True):
print(f"\nTugas yang {'selesai' if status else 'belum selesai'}:")
for i, task in enumerate(tasks, start=1):
if task["done"] == status:
print(f"{i}. {task['title']}")
5. Reminder / Notification (Bonus)
Tambahkan sistem pengingat (misalnya cek deadline, kalau lewat hari ini beri peringatan).
from datetime import datetime
def check_deadlines():
today = datetime.today().date()
print("\nCek Deadline:")
for task in tasks:
if task["deadline"]:
deadline_date = datetime.strptime(task["deadline"], "%Y-%m-%d").date()
if deadline_date < today and not task["done"]:
print(f"⚠ Tugas '{task['title']}' sudah lewat deadline ({deadline_date})!")
🏆 Level Up
Setelah challenge ini, To-Do List kamu sudah jadi:
-
Bisa tambah, hapus, tandai selesai.
-
Bisa simpan & load otomatis.
-
Bisa kasih deadline + prioritas.
-
Bisa cari & filter.
-
Bisa kasih peringatan deadline.
👉 Kalau mau lebih gila lagi, kita bisa ubah To-Do List ini jadi aplikasi GUI (Tkinter) → tampilkan daftar dengan checkbox, tambah tombol Add/Delete, bahkan pakai database SQLite biar lebih kuat.
Mau bikinkan versi GUI To-Do List (Tkinter) sebagai final boss dari project ini sebelum kita pindah ke Notepad App?
Lanjutkan langsung ke Bulan 5 (Notepad App) !
Oke 🚀 kita langsung loncat ke Bulan 5: Notepad App (GUI dengan Tkinter + Python).
Kalau sebelumnya To-Do List masih berbasis console, sekarang kita sudah masuk GUI (Graphical User Interface) penuh.
📝 Bulan 5 – Notepad App
🎯 Tujuan Pembelajaran
-
Belajar dasar GUI Programming dengan Tkinter.
-
Menggunakan Text Widget untuk menulis teks panjang.
-
Membuat menu bar (File, Edit, Help).
-
Menangani file handling (open, save, save as).
-
Menambahkan fitur dasar editing (cut, copy, paste, undo, redo, select all).
-
Opsional: Tambah fitur dark mode atau word count.
1. Struktur Dasar Notepad
import tkinter as tk
from tkinter import filedialog, messagebox
root = tk.Tk()
root.title("My Notepad")
root.geometry("600x400")
# Text Area
text_area = tk.Text(root, undo=True)
text_area.pack(fill="both", expand=True)
root.mainloop()
🟢 Ini bikin jendela kosong dengan area teks.
2. Tambah Menu Bar
menu_bar = tk.Menu(root)
root.config(menu=menu_bar)
# File Menu
file_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="File", menu=file_menu)
# Edit Menu
edit_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="Edit", menu=edit_menu)
# Help Menu
help_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="Help", menu=help_menu)
Sekarang ada menu File, Edit, Help.
3. File Operations (Open, Save, Save As, Exit)
file_path = None
def new_file():
global file_path
file_path = None
text_area.delete(1.0, tk.END)
def open_file():
global file_path
file_path = filedialog.askopenfilename(defaultextension=".txt",
filetypes=[("Text Files", "*.txt"), ("All Files", "*.*")])
if file_path:
with open(file_path, "r") as f:
text_area.delete(1.0, tk.END)
text_area.insert(1.0, f.read())
def save_file():
global file_path
if file_path:
with open(file_path, "w") as f:
f.write(text_area.get(1.0, tk.END))
else:
save_as_file()
def save_as_file():
global file_path
file_path = filedialog.asksaveasfilename(defaultextension=".txt",
filetypes=[("Text Files", "*.txt"), ("All Files", "*.*")])
if file_path:
save_file()
def exit_app():
root.quit()
# Tambah ke File Menu
file_menu.add_command(label="New", command=new_file)
file_menu.add_command(label="Open", command=open_file)
file_menu.add_command(label="Save", command=save_file)
file_menu.add_command(label="Save As...", command=save_as_file)
file_menu.add_separator()
file_menu.add_command(label="Exit", command=exit_app)
4. Edit Operations (Cut, Copy, Paste, Undo, Redo, Select All)
def cut():
text_area.event_generate("<<Cut>>")
def copy():
text_area.event_generate("<<Copy>>")
def paste():
text_area.event_generate("<<Paste>>")
def undo():
text_area.event_generate("<<Undo>>")
def redo():
text_area.event_generate("<<Redo>>")
def select_all():
text_area.tag_add("sel", "1.0", "end")
# Tambah ke Edit Menu
edit_menu.add_command(label="Cut", command=cut)
edit_menu.add_command(label="Copy", command=copy)
edit_menu.add_command(label="Paste", command=paste)
edit_menu.add_separator()
edit_menu.add_command(label="Undo", command=undo)
edit_menu.add_command(label="Redo", command=redo)
edit_menu.add_separator()
edit_menu.add_command(label="Select All", command=select_all)
5. Help Menu (About)
def about():
messagebox.showinfo("About", "My Notepad v1.0\nDibuat dengan Python Tkinter")
help_menu.add_command(label="About", command=about)
6. Bonus Challenge 🎁
-
Dark Mode / Light Mode Toggle
-
Word Count (tampilkan jumlah kata/karakter di status bar).
-
Font Options (ubah font & ukuran teks).
-
Search & Highlight kata tertentu dalam teks.
📌 Ringkasan
✅ GUI Tkinter dengan Text widget
✅ Menu Bar (File, Edit, Help)
✅ File Handling (open, save, save as)
✅ Edit Tools (cut, copy, paste, undo, redo, select all)
✅ About dialog
Setelah selesai, kamu akan punya aplikasi Notepad sederhana mirip bawaan Windows tapi buatan sendiri 💪.
👉 Pertanyaan: mau bikinkan versi full code lengkap (siap copy-paste) dulu, atau mau kita kembangkan step by step dengan challenge kayak di To-Do List sebelumnya?
Mantap, ini dia “Final Boss” dari project To-Do List kita 💪🔥 — sekarang kita upgrade dari versi console jadi aplikasi GUI dengan Tkinter + database SQLite supaya datanya tetap tersimpan meski aplikasi ditutup.
🗂️ Final Boss: GUI To-Do List (Tkinter + SQLite)
🎯 Fitur Utama
-
GUI dengan Tkinter
-
Tampilkan daftar tugas dengan checkbox.
-
Tombol Add, Delete, dan Mark as Done.
-
-
Database SQLite
-
Semua data disimpan di
tasks.db. -
Bisa ditutup dan dibuka lagi tanpa kehilangan data.
-
-
User Friendly
-
Tampilan sederhana.
-
Bisa menambahkan, menandai selesai, dan menghapus tugas.
-
📌 Full Code
import tkinter as tk
from tkinter import messagebox
import sqlite3
# =====================
# Database Setup
# =====================
conn = sqlite3.connect("tasks.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS tasks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
task TEXT NOT NULL,
done BOOLEAN NOT NULL CHECK (done IN (0,1))
)
""")
conn.commit()
# =====================
# Functions
# =====================
def load_tasks():
task_listbox.delete(0, tk.END)
cursor.execute("SELECT id, task, done FROM tasks")
for row in cursor.fetchall():
task_id, task, done = row
display = f"[{'✔' if done else ' '}] {task}"
task_listbox.insert(tk.END, display)
def add_task():
task = entry.get()
if task.strip() == "":
messagebox.showwarning("Warning", "Task cannot be empty!")
return
cursor.execute("INSERT INTO tasks (task, done) VALUES (?, ?)", (task, 0))
conn.commit()
entry.delete(0, tk.END)
load_tasks()
def delete_task():
try:
selection = task_listbox.curselection()[0]
task_text = task_listbox.get(selection)
task_name = task_text[4:] # remove checkbox prefix
cursor.execute("DELETE FROM tasks WHERE task=?", (task_name,))
conn.commit()
load_tasks()
except IndexError:
messagebox.showwarning("Warning", "Please select a task to delete.")
def mark_done():
try:
selection = task_listbox.curselection()[0]
task_text = task_listbox.get(selection)
task_name = task_text[4:]
cursor.execute("UPDATE tasks SET done=1 WHERE task=?", (task_name,))
conn.commit()
load_tasks()
except IndexError:
messagebox.showwarning("Warning", "Please select a task to mark as done.")
# =====================
# GUI Setup
# =====================
root = tk.Tk()
root.title("To-Do List (Final Boss)")
root.geometry("400x500")
# Entry Field
entry = tk.Entry(root, font=("Arial", 14))
entry.pack(pady=10)
# Buttons
btn_frame = tk.Frame(root)
btn_frame.pack(pady=5)
add_btn = tk.Button(btn_frame, text="Add", width=10, command=add_task)
add_btn.grid(row=0, column=0, padx=5)
delete_btn = tk.Button(btn_frame, text="Delete", width=10, command=delete_task)
delete_btn.grid(row=0, column=1, padx=5)
done_btn = tk.Button(btn_frame, text="Mark Done", width=10, command=mark_done)
done_btn.grid(row=0, column=2, padx=5)
# Task List
task_listbox = tk.Listbox(root, font=("Arial", 12), width=40, height=20)
task_listbox.pack(pady=10)
# Load tasks on start
load_tasks()
root.mainloop()
🧩 Penjelasan
-
Database: Tabel
taskspunya kolomid,task,done. -
Load: Menarik data dari SQLite dan menampilkan
[✔]untuk selesai. -
Add: Menambahkan task baru ke database.
-
Delete: Menghapus task yang dipilih.
-
Mark Done: Mengupdate kolom
donejadi1(true).
🎁 Challenge Tambahan (Level Ultra Boss)
-
Tambahkan edit task (double klik untuk ubah).
-
Tambah filter (lihat semua / selesai / belum selesai).
-
Integrasi dengan kalender deadline.
-
Tambahkan Dark Mode toggle 🌙.
-
Simpan posisi window & ukuran terakhir.
👉 Jadi gini: kita sudah punya Notepad App (Bulan 5) dan To-Do List GUI (Final Boss).
Mau gabungkan To-Do List + Notepad jadi 1 Super App Productivity (ada catatan + daftar tugas dalam satu aplikasi), atau kita bikin project baru khusus.
Mantap — berikut ini versi full code lengkap (siap copy-paste) untuk To-Do List GUI yang lebih lengkap:
fitur: add / edit / delete / mark done-undone, search, filter (All/Done/Pending), deadline (YYYY-MM-DD), priority, penyimpanan SQLite, export CSV, reminder overdue saat start, dan toggle dark mode. Simpan sebagai satu file mis. todo_gui_sqlite.py lalu jalankan (python todo_gui_sqlite.py).
Kode lengkap (copy → paste → save):
# todo_gui_sqlite.py
"""
To-Do List GUI (Tkinter) + SQLite
Features:
- Add / Edit / Delete tasks
- Mark Done / Undone
- Deadline (YYYY-MM-DD) + Priority (Low/Medium/High)
- Search & Filter (All / Pending / Done)
- Persist data in SQLite (tasks.db)
- Export tasks to CSV
- Reminder for overdue tasks at startup
- Dark mode toggle
- Save window geometry in config file
Requires: Python 3.x (Tkinter included)
"""
import tkinter as tk
from tkinter import ttk, messagebox, simpledialog, filedialog
import sqlite3
from datetime import datetime, date
import csv
import json
import os
DB_FILE = "tasks.db"
CONFIG_FILE = "todo_config.json"
class TodoApp:
def __init__(self, root):
self.root = root
self.root.title("To-Do List (GUI + SQLite)")
self.conn = sqlite3.connect(DB_FILE)
self.cursor = self.conn.cursor()
self.create_table()
self.task_ids = [] # mapping index -> db id
self.dark_mode = False
self.setup_ui()
self.load_config()
self.load_tasks()
self.check_overdue_on_start()
# ---------- Database ----------
def create_table(self):
self.cursor.execute("""
CREATE TABLE IF NOT EXISTS tasks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
deadline TEXT,
priority TEXT,
done INTEGER NOT NULL DEFAULT 0,
created_at TEXT
)""")
self.conn.commit()
def add_task_db(self, title, deadline, priority):
now = datetime.now().isoformat()
self.cursor.execute(
"INSERT INTO tasks (title, deadline, priority, done, created_at) VALUES (?, ?, ?, 0, ?)",
(title, deadline if deadline else None, priority, now)
)
self.conn.commit()
def update_task_db(self, task_id, title, deadline, priority):
self.cursor.execute(
"UPDATE tasks SET title=?, deadline=?, priority=? WHERE id=?",
(title, deadline if deadline else None, priority, task_id)
)
self.conn.commit()
def delete_task_db(self, task_id):
self.cursor.execute("DELETE FROM tasks WHERE id=?", (task_id,))
self.conn.commit()
def toggle_done_db(self, task_id, done_value):
self.cursor.execute("UPDATE tasks SET done=? WHERE id=?", (1 if done_value else 0, task_id))
self.conn.commit()
# ---------- UI setup ----------
def setup_ui(self):
# Top frame: inputs
top = tk.Frame(self.root)
top.pack(fill="x", padx=8, pady=6)
tk.Label(top, text="Title:").grid(row=0, column=0, sticky="w")
self.entry_title = tk.Entry(top, width=30, font=("Arial", 12))
self.entry_title.grid(row=0, column=1, padx=4)
tk.Label(top, text="Deadline (YYYY-MM-DD):").grid(row=0, column=2, sticky="w", padx=(10,0))
self.entry_deadline = tk.Entry(top, width=14, font=("Arial", 12))
self.entry_deadline.grid(row=0, column=3, padx=4)
tk.Label(top, text="Priority:").grid(row=0, column=4, sticky="w", padx=(10,0))
self.combo_priority = ttk.Combobox(top, values=["Low","Medium","High"], width=8, state="readonly")
self.combo_priority.set("Medium")
self.combo_priority.grid(row=0, column=5, padx=4)
self.btn_add = tk.Button(top, text="Add Task", command=self.add_task, width=10)
self.btn_add.grid(row=0, column=6, padx=6)
# Search & controls
ctrl = tk.Frame(self.root)
ctrl.pack(fill="x", padx=8, pady=6)
tk.Label(ctrl, text="Search:").pack(side="left")
self.entry_search = tk.Entry(ctrl, width=25)
self.entry_search.pack(side="left", padx=4)
self.entry_search.bind("<KeyRelease>", lambda e: self.load_tasks())
tk.Label(ctrl, text="Filter:").pack(side="left", padx=(10,0))
self.combo_filter = ttk.Combobox(ctrl, values=["All","Pending","Done"], width=10, state="readonly")
self.combo_filter.set("All")
self.combo_filter.pack(side="left", padx=4)
self.combo_filter.bind("<<ComboboxSelected>>", lambda e: self.load_tasks())
self.btn_export = tk.Button(ctrl, text="Export CSV", command=self.export_csv)
self.btn_export.pack(side="right")
self.btn_dark = tk.Button(ctrl, text="Toggle Dark Mode", command=self.toggle_dark_mode)
self.btn_dark.pack(side="right", padx=6)
# Listbox + scrollbar
list_frame = tk.Frame(self.root)
list_frame.pack(fill="both", expand=True, padx=8, pady=6)
self.task_listbox = tk.Listbox(list_frame, font=("Arial", 12), activestyle="none")
self.task_listbox.pack(side="left", fill="both", expand=True)
self.task_listbox.bind("<<ListboxSelect>>", lambda e: self.on_select())
self.task_listbox.bind("<Double-Button-1>", lambda e: self.open_edit_dialog())
self.task_listbox.bind("<Delete>", lambda e: self.delete_task())
scrollbar = tk.Scrollbar(list_frame, orient="vertical", command=self.task_listbox.yview)
scrollbar.pack(side="right", fill="y")
self.task_listbox.config(yscrollcommand=scrollbar.set)
# Buttons bottom
bottom = tk.Frame(self.root)
bottom.pack(fill="x", padx=8, pady=6)
self.btn_edit = tk.Button(bottom, text="Edit", command=self.open_edit_dialog, width=10)
self.btn_edit.pack(side="left", padx=4)
self.btn_delete = tk.Button(bottom, text="Delete", command=self.delete_task, width=10)
self.btn_delete.pack(side="left", padx=4)
self.btn_toggle = tk.Button(bottom, text="Mark Done/Undone", command=self.toggle_done, width=16)
self.btn_toggle.pack(side="left", padx=4)
self.btn_refresh = tk.Button(bottom, text="Refresh", command=self.load_tasks, width=10)
self.btn_refresh.pack(side="right", padx=4)
# status label
self.status_var = tk.StringVar()
self.status_var.set("")
tk.Label(self.root, textvariable=self.status_var, anchor="w").pack(fill="x", padx=8, pady=(0,6))
# handle window close
self.root.protocol("WM_DELETE_WINDOW", self.on_closing)
# ---------- Task operations ----------
def add_task(self):
title = self.entry_title.get().strip()
deadline = self.entry_deadline.get().strip()
priority = self.combo_priority.get()
if not title:
messagebox.showwarning("Warning", "Title cannot be empty.")
return
if deadline:
if not self.is_valid_date(deadline):
messagebox.showwarning("Warning", "Deadline must be YYYY-MM-DD or empty.")
return
self.add_task_db(title, deadline if deadline else None, priority)
self.entry_title.delete(0, tk.END)
self.entry_deadline.delete(0, tk.END)
self.combo_priority.set("Medium")
self.load_tasks()
self.status_var.set("Task added.")
def delete_task(self):
sel = self.task_listbox.curselection()
if not sel:
messagebox.showwarning("Warning", "Please select a task to delete.")
return
idx = sel[0]
task_id = self.task_ids[idx]
# confirm
if not messagebox.askyesno("Confirm", "Delete selected task?"):
return
self.delete_task_db(task_id)
self.load_tasks()
self.status_var.set("Task deleted.")
def toggle_done(self):
sel = self.task_listbox.curselection()
if not sel:
messagebox.showwarning("Warning", "Please select a task.")
return
idx = sel[0]
task_id = self.task_ids[idx]
# fetch current state
self.cursor.execute("SELECT done FROM tasks WHERE id=?", (task_id,))
row = self.cursor.fetchone()
if row:
current = row[0]
new = 0 if current else 1
self.toggle_done_db(task_id, new)
self.load_tasks()
self.status_var.set("Task status toggled.")
def open_edit_dialog(self):
sel = self.task_listbox.curselection()
if not sel:
messagebox.showwarning("Warning", "Please select a task to edit.")
return
idx = sel[0]
task_id = self.task_ids[idx]
self.cursor.execute("SELECT title, deadline, priority FROM tasks WHERE id=?", (task_id,))
row = self.cursor.fetchone()
if not row:
messagebox.showerror("Error", "Task not found.")
return
title, deadline, priority = row
# dialog window
dlg = tk.Toplevel(self.root)
dlg.title("Edit Task")
dlg.geometry("400x140")
dlg.transient(self.root)
dlg.grab_set()
tk.Label(dlg, text="Title:").grid(row=0, column=0, sticky="w", padx=6, pady=6)
e_title = tk.Entry(dlg, width=40)
e_title.insert(0, title)
e_title.grid(row=0, column=1, padx=6, pady=6)
tk.Label(dlg, text="Deadline (YYYY-MM-DD):").grid(row=1, column=0, sticky="w", padx=6, pady=6)
e_dead = tk.Entry(dlg, width=20)
e_dead.insert(0, deadline if deadline else "")
e_dead.grid(row=1, column=1, sticky="w", padx=6, pady=6)
tk.Label(dlg, text="Priority:").grid(row=2, column=0, sticky="w", padx=6, pady=6)
cb_pr = ttk.Combobox(dlg, values=["Low","Medium","High"], width=10, state="readonly")
cb_pr.set(priority if priority else "Medium")
cb_pr.grid(row=2, column=1, sticky="w", padx=6, pady=6)
def save_and_close():
new_title = e_title.get().strip()
new_dead = e_dead.get().strip()
new_pr = cb_pr.get()
if not new_title:
messagebox.showwarning("Warning", "Title cannot be empty.")
return
if new_dead and not self.is_valid_date(new_dead):
messagebox.showwarning("Warning", "Deadline must be YYYY-MM-DD or empty.")
return
self.update_task_db(task_id, new_title, new_dead if new_dead else None, new_pr)
dlg.destroy()
self.load_tasks()
self.status_var.set("Task updated.")
btn_save = tk.Button(dlg, text="Save", command=save_and_close, width=10)
btn_save.grid(row=3, column=0, pady=8)
btn_cancel = tk.Button(dlg, text="Cancel", command=dlg.destroy, width=10)
btn_cancel.grid(row=3, column=1, pady=8)
# ---------- Loading & Display ----------
def load_tasks(self):
search = self.entry_search.get().strip().lower()
flt = self.combo_filter.get()
sql = "SELECT id, title, deadline, priority, done FROM tasks"
params = []
conds = []
if search:
conds.append("LOWER(title) LIKE ?")
params.append(f"%{search}%")
if flt == "Pending":
conds.append("done=0")
elif flt == "Done":
conds.append("done=1")
if conds:
sql += " WHERE " + " AND ".join(conds)
# order by deadline (nulls last) then priority then created_at
sql += " ORDER BY CASE WHEN deadline IS NULL OR deadline='' THEN 1 ELSE 0 END, deadline, priority DESC, created_at DESC"
self.cursor.execute(sql, tuple(params))
rows = self.cursor.fetchall()
self.task_listbox.delete(0, tk.END)
self.task_ids = []
today = date.today()
for r in rows:
tid, title, deadline, priority, done = r
status = "✔" if done else " "
overdue_mark = ""
if deadline and not done:
try:
d = datetime.strptime(deadline, "%Y-%m-%d").date()
if d < today:
overdue_mark = "⚠ "
except:
overdue_mark = ""
display = f"{overdue_mark}[{status}] {title} (Due: {deadline if deadline else '-'}) [P:{priority}]"
self.task_listbox.insert(tk.END, display)
self.task_ids.append(tid)
self.status_var.set(f"{len(self.task_ids)} tasks loaded.")
def on_select(self):
# could be used to enable/disable buttons (not required)
pass
# ---------- Utilities ----------
def is_valid_date(self, s):
try:
datetime.strptime(s, "%Y-%m-%d")
return True
except:
return False
def check_overdue_on_start(self):
today = date.today()
self.cursor.execute("SELECT title, deadline FROM tasks WHERE done=0 AND deadline IS NOT NULL AND deadline<>''")
rows = self.cursor.fetchall()
overdue = []
for title, deadline in rows:
try:
d = datetime.strptime(deadline, "%Y-%m-%d").date()
if d < today:
overdue.append(f"{title} (Due: {deadline})")
except:
continue
if overdue:
txt = "Ada tugas yang melewati deadline:\n\n" + "\n".join(overdue)
messagebox.showwarning("Overdue tasks", txt)
def export_csv(self):
fname = filedialog.asksaveasfilename(defaultextension=".csv", filetypes=[("CSV","*.csv"),("All Files","*.*")])
if not fname:
return
self.cursor.execute("SELECT id, title, deadline, priority, done, created_at FROM tasks ORDER BY id")
rows = self.cursor.fetchall()
try:
with open(fname, "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["id","title","deadline","priority","done","created_at"])
writer.writerows(rows)
messagebox.showinfo("Export", f"Exported {len(rows)} tasks to {fname}")
except Exception as e:
messagebox.showerror("Error", f"Failed to export: {e}")
# ---------- Config (geometry & dark mode) ----------
def save_config(self):
cfg = {"geometry": self.root.geometry(), "dark_mode": self.dark_mode}
try:
with open(CONFIG_FILE, "w", encoding="utf-8") as f:
json.dump(cfg, f)
except:
pass
def load_config(self):
if os.path.exists(CONFIG_FILE):
try:
with open(CONFIG_FILE, "r", encoding="utf-8") as f:
cfg = json.load(f)
geo = cfg.get("geometry")
if geo:
self.root.geometry(geo)
self.dark_mode = cfg.get("dark_mode", False)
if self.dark_mode:
self.apply_dark_mode()
except:
pass
def toggle_dark_mode(self):
self.dark_mode = not self.dark_mode
self.apply_dark_mode()
def apply_dark_mode(self):
if self.dark_mode:
bg = "#2e2e2e"; fg = "white"; entry_bg = "#3a3a3a"
self.root.configure(bg=bg)
for w in self.root.winfo_children():
try:
w.configure(bg=bg, fg=fg)
except:
pass
self.task_listbox.configure(bg="#1e1e1e", fg=fg, selectbackground="#555555")
self.entry_title.configure(bg=entry_bg, fg=fg, insertbackground=fg)
self.entry_deadline.configure(bg=entry_bg, fg=fg, insertbackground=fg)
self.entry_search.configure(bg=entry_bg, fg=fg, insertbackground=fg)
else:
# reset to defaults
self.root.configure(bg=None)
for w in self.root.winfo_children():
try:
w.configure(bg=None, fg=None)
except:
pass
self.task_listbox.configure(bg="white", fg="black", selectbackground="#cce6ff")
self.entry_title.configure(bg="white", fg="black", insertbackground="black")
self.entry_deadline.configure(bg="white", fg="black", insertbackground="black")
self.entry_search.configure(bg="white", fg="black", insertbackground="black")
# ---------- Closing ----------
def on_closing(self):
# save config
self.save_config()
try:
self.conn.close()
except:
pass
self.root.destroy()
# ---------- Run ----------
if __name__ == "__main__":
root = tk.Tk()
app = TodoApp(root)
root.mainloop()
Cara pakai singkat
-
Simpan ke file
todo_gui_sqlite.py. -
Jalankan:
python todo_gui_sqlite.py. -
Tambah judul, (opsional) deadline
YYYY-MM-DD, pilih priority →Add Task. -
Klik task lalu
Edit/Delete/Mark Done/Undone. -
Gunakan
SearchdanFilteruntuk cari. -
Export CSVuntuk menyimpan semua task. -
Toggle Dark Modeuntuk tema gelap. -
Data otomatis tersimpan ke
tasks.db.
Kalau kamu mau, selanjutnya aku bisa:
-
Jelaskan baris demi baris (step-by-step) bagaimana kode ini bekerja; atau
-
Tambahkan fitur ekstra secara bertahap (mis. reminder notifikasi periodik, integrasi kalender, drag-drop reorder, sinkronisasi cloud).
Kamu pilih: mau penjelasan step-by-step sekarang, atau tambahkan fitur X dulu?
