PYTHON FOR OIL and GAS: STOP DOING IT MANUALLY
- Description
- Curriculum
- Reviews
-
8Mini Project 1Text lesson
🟡 Level: Menengah | ⏱ Estimasi waktu: 100 menit praktik (evaluasi, tanpa materi teori baru)
Pendahuluan
Selamat sampai di titik tengah semester pertama! Sejauh Pertemuan 1 sampai 7, kamu sudah mempelajari fondasi lengkap pemrograman Python: variabel & tipe data, input/output, percabangan, perulangan, struktur data list & dictionary, dan fungsi. Pertemuan ini tidak memperkenalkan materi baru — sepenuhnya didedikasikan untuk mempraktikkan SEMUA konsep tersebut sekaligus dalam satu proyek utuh.
Mini Project 1 mensimulasikan tugas nyata yang mungkin kamu temui di lapangan: membangun program monitoring sederhana berbasis command-line interface (CLI) — program yang berjalan lewat terminal, menerima input dari operator, dan menghasilkan laporan status proses secara otomatis.
Kerjakan proyek ini secara mandiri terlebih dahulu sebelum melihat bagian "Contoh Solusi Referensi" di akhir modul. Proses mencoba dan salah (trial and error) adalah bagian penting dari belajar pemrograman — jangan terburu-buru melihat jawaban.
Prasyarat
• Sudah menyelesaikan Pertemuan 1-7 secara berurutan.
• Familiar dengan variabel, if/elif/else, for/while, list, dictionary, dan fungsi (def/return).
Deskripsi Proyek
Bangun sebuah program bernama monitoring_proses.py yang berfungsi sebagai sistem monitoring parameter proses sederhana untuk sebuah unit kilang fiktif. Program ini akan menerima beberapa data pengukuran dari operator (lewat input()), menyimpannya sebagai riwayat, menganalisis status setiap pembacaan, dan menampilkan laporan ringkas di akhir.
Spesifikasi Fungsional
Program yang kamu bangun WAJIB memenuhi seluruh poin berikut:
1. Program menyapa pengguna di awal dan meminta nama operator yang bertugas.
2. Program meminta pengguna memasukkan JUMLAH data yang ingin dicatat (misalnya 5 pembacaan).
3. Untuk setiap pembacaan, program meminta input suhu (°C) dan tekanan (bar) dari operator.
4. Setiap pembacaan disimpan sebagai dictionary (berisi nomor urut, suhu, tekanan, dan status), lalu dikumpulkan dalam sebuah list.
5. Program memiliki fungsi terpisah untuk menentukan status setiap pembacaan: NORMAL (suhu ≤ 80 dan tekanan ≤ 8), WARNING (suhu 80-90 atau tekanan 8-10), atau DANGER (suhu > 90 atau tekanan > 10).
6. Setelah semua data dimasukkan, program menampilkan LAPORAN RINGKAS: seluruh riwayat pembacaan, jumlah kejadian tiap status (NORMAL/WARNING/DANGER), suhu rata-rata, dan suhu tertinggi beserta nomor pembacaannya.
7. Jika ada minimal satu pembacaan berstatus DANGER, tampilkan pesan peringatan tambahan di akhir laporan.
Struktur Data yang Disarankan
Gunakan pola list of dictionaries seperti yang sudah dipelajari di Pertemuan 6 — setiap elemen list mewakili satu pembacaan lengkap:
riwayat = [
{"no": 1, "suhu": 78.5, "tekanan": 2.1, "status": "NORMAL"},
{"no": 2, "suhu": 85.0, "tekanan": 8.5, "status": "WARNING"},
# ...dan seterusnya
]
Contoh Output yang Diharapkan
=== Sistem Monitoring Proses Kilang ===
Nama operator: Andi
Jumlah data yang akan dicatat: 3
--- Pembacaan 1 ---
Masukkan suhu (°C): 78.5
Masukkan tekanan (bar): 2.1
Status: NORMAL
--- Pembacaan 2 ---
Masukkan suhu (°C): 88.0
Masukkan tekanan (bar): 9.0
Status: WARNING
--- Pembacaan 3 ---
Masukkan suhu (°C): 93.5
Masukkan tekanan (bar): 7.5
Status: DANGER
=== LAPORAN RINGKAS — Operator: Andi ===
Total pembacaan : 3
NORMAL : 1
WARNING : 1
DANGER : 1
Suhu rata-rata : 86.7 °C
Suhu tertinggi : 93.5 °C (Pembacaan 3)
⚠️ PERINGATAN: Terdapat pembacaan berstatus DANGER!
Segera lakukan pemeriksaan lapangan.
Panduan Pengerjaan (Kerangka Program)
Ikuti kerangka berikut sebagai panduan — isi bagian bertanda # TODO dengan kodemu sendiri:
# monitoring_proses.py
def cek_status(suhu, tekanan):
# TODO: kembalikan "NORMAL", "WARNING", atau "DANGER"
# berdasarkan aturan suhu dan tekanan
pass
def input_pembacaan(nomor):
# TODO: minta input suhu & tekanan dari pengguna,
# panggil cek_status(), lalu return dictionary satu pembacaan
pass
def buat_laporan(riwayat, nama_operator):
# TODO: hitung jumlah tiap status, suhu rata-rata,
# suhu tertinggi, lalu tampilkan laporan ringkas
pass
# --- Program Utama ---
print("=== Sistem Monitoring Proses Kilang ===")
nama_operator = input("Nama operator: ")
jumlah = int(input("Jumlah data yang akan dicatat: "))
riwayat = []
for i in range(jumlah):
print(f"n--- Pembacaan {i+1} ---")
pembacaan = input_pembacaan(i + 1)
riwayat.append(pembacaan)
buat_laporan(riwayat, nama_operator)
💡 Tips Pengerjaan
Kerjakan fungsi satu per satu dan uji masing-masing secara terpisah sebelum menggabungkannya. Mulai dari cek_status() — coba panggil manual dengan beberapa nilai contoh (cek_status(85, 9)) untuk memastikan logikanya benar sebelum melanjutkan ke fungsi berikutnya.
Kriteria Penilaian
Kriteria
Bobot
Indikator Ketercapaian
Kesesuaian fungsional (7 poin spesifikasi terpenuhi)
40%
Semua spesifikasi fungsional pada bagian sebelumnya berjalan tanpa error
Penggunaan fungsi (modularisasi)
20%
Logika program dipecah ke dalam fungsi-fungsi terpisah, bukan ditulis sebagai satu blok panjang
Penggunaan struktur data yang tepat
15%
Riwayat pembacaan disimpan sebagai list of dictionaries, bukan variabel terpisah-pisah
Format output & keterbacaan
15%
Output rapi, mudah dibaca, memakai f-string dengan format angka yang konsisten
Penanganan kasus DANGER
10%
Program menampilkan peringatan tambahan yang sesuai ketika status DANGER terdeteksi
Latihan Pengembangan (Opsional)
Jika sudah menyelesaikan spesifikasi wajib dan ingin tantangan tambahan:
• Tambahkan validasi input: jika operator memasukkan suhu negatif, minta input ulang dengan pesan error yang jelas.
• Tambahkan parameter ketiga (level_tangki_persen) ke dalam logika status.
• Simpan laporan akhir ke dalam file .txt menggunakan fungsi open() (akan dibahas lebih formal di Pertemuan 9).
Contoh Solusi Referensi
⚠️ Baca sebelum melanjutkan
Bagian ini berisi salah satu kemungkinan solusi lengkap. Gunakan HANYA untuk memeriksa pekerjaanmu setelah mencoba sendiri, atau jika benar-benar buntu. Solusimu tidak harus identik persis dengan ini — yang penting semua spesifikasi fungsional terpenuhi.
# monitoring_proses.py — Contoh Solusi Referensi
def cek_status(suhu, tekanan):
if suhu > 90 or tekanan > 10:
return "DANGER"
elif suhu > 80 or tekanan > 8:
return "WARNING"
else:
return "NORMAL"
def input_pembacaan(nomor):
suhu = float(input("Masukkan suhu (°C): "))
tekanan = float(input("Masukkan tekanan (bar): "))
status = cek_status(suhu, tekanan)
print(f"Status: {status}")
return {"no": nomor, "suhu": suhu, "tekanan": tekanan, "status": status}
def buat_laporan(riwayat, nama_operator):
total = len(riwayat)
jumlah_normal = sum(1 for r in riwayat if r["status"] == "NORMAL")
jumlah_warning = sum(1 for r in riwayat if r["status"] == "WARNING")
jumlah_danger = sum(1 for r in riwayat if r["status"] == "DANGER")
semua_suhu = [r["suhu"] for r in riwayat]
suhu_rata = sum(semua_suhu) / total
suhu_max = max(semua_suhu)
pembacaan_max = next(r["no"] for r in riwayat if r["suhu"] == suhu_max)
print(f"n=== LAPORAN RINGKAS — Operator: {nama_operator} ===")
print(f"Total pembacaan : {total}")
print(f"NORMAL : {jumlah_normal}")
print(f"WARNING : {jumlah_warning}")
print(f"DANGER : {jumlah_danger}")
print(f"Suhu rata-rata : {suhu_rata:.1f} °C")
print(f"Suhu tertinggi : {suhu_max:.1f} °C (Pembacaan {pembacaan_max})")
if jumlah_danger > 0:
print("n⚠️ PERINGATAN: Terdapat pembacaan berstatus DANGER!")
print(" Segera lakukan pemeriksaan lapangan.")
# --- Program Utama ---
print("=== Sistem Monitoring Proses Kilang ===")
nama_operator = input("Nama operator: ")
jumlah = int(input("Jumlah data yang akan dicatat: "))
riwayat = []
for i in range(jumlah):
print(f"n--- Pembacaan {i+1} ---")
pembacaan = input_pembacaan(i + 1)
riwayat.append(pembacaan)
buat_laporan(riwayat, nama_operator)
Penjelasan bagian yang mungkin baru: sum(1 for r in riwayat if r["status"] == "NORMAL") adalah teknik generator expression untuk menghitung berapa banyak elemen yang memenuhi kondisi tertentu — cara ringkas menggantikan perulangan for manual dengan counter. Baris next(r["no"] for r in riwayat if r["suhu"] == suhu_max) mencari nomor pembacaan yang suhunya sama dengan suhu_max. Kedua teknik ini opsional untuk dipahami sekarang — versi dengan for dan counter biasa (seperti di Pertemuan 5-6) sama validnya.
Langkah Selanjutnya
Pada Pertemuan 9, kita akan mulai masuk ke materi baru: File Handling — cara membaca dan menulis file .txt dan .csv langsung dari Python. Ini akan menggantikan input() manual dengan data historian sungguhan yang dibaca dari file, langkah pertama menuju analisis data proses berskala besar dengan pandas.
Sumber tambahan & referensi resmi: docs.python.org
Archive
Working hours
| Monday | 9:30 am - 6.00 pm |
| Tuesday | 9:30 am - 6.00 pm |
| Wednesday | 9:30 am - 6.00 pm |
| Thursday | 9:30 am - 6.00 pm |
| Friday | 9:30 am - 5.00 pm |
| Saturday | Closed |
| Sunday | Closed |