Have a question?
Message sent Close
0
0 reviews

PYTHON FOR OIL and GAS: STOP DOING IT MANUALLY

Instructor
bisaioti
Category
1 Student enrolled
  • Description
  • Curriculum
  • Reviews
Variabel, Tipe Data & Operator
Input/Output & String Formatting
Percabangan (if / elif / else)
Mini Project 1
  • 8
    Mini Project 1
    Text lesson

    Pertemuan 8: Mini Project 1 — Evaluasi Praktik

    🟡 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

PYTHON FOR OIL and GAS STOP DOING IT MANUALLY.png
PYTHON FOR OIL and GAS: STOP DOING IT MANUALLY
Share
Course details
Lectures 8
Level Beginner

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