Struktur Data dan Algoritma Python

Struktur Data dan Algoritma Python: Praktik Thonny dan Pydroid 3

KKA Kelas XI Semester 1 Pertemuan 9 2 JP × 45 Menit

Struktur Data dan Algoritma Tingkat Lanjut dengan Python

Praktik langsung menggunakan buku tulis, Thonny di komputer, dan Pydroid 3 di HP Android

Pada materi ini, siswa akan mempelajari cara menyimpan, mencari, mengurutkan, dan memproses data menggunakan list, dictionary, stack, queue, linear search, dan sorting. Praktik dirancang agar tetap dapat dilaksanakan meskipun jumlah komputer terbatas.

Siswa akan bekerja secara berkelompok dan bergantian menggunakan tiga media: buku untuk merancang algoritma, Thonny untuk menulis serta melakukan debugging program, dan Pydroid 3 untuk menjalankan program melalui HP.

Hasil Akhir Praktik

Setiap kelompok akan menghasilkan sebuah program pengelolaan produk dan antrean pesanan yang mampu:

  1. Menyimpan data produk.
  2. Menampilkan seluruh produk.
  3. Mencari produk berdasarkan kode.
  4. Mengurutkan produk berdasarkan harga atau stok.
  5. Menambahkan pesanan ke dalam antrean.
  6. Memproses pesanan berdasarkan urutan kedatangan.
  7. Mengurangi stok setelah pesanan diproses.
  8. Menyimpan riwayat aktivitas.
  9. Menolak data masukan yang tidak valid.
  10. Menampilkan laporan pengujian program.

Penerapan Struktur Data di Dunia Kerja

Struktur data digunakan hampir pada seluruh aplikasi digital. Pemilihan struktur data yang tepat membuat program lebih mudah dikembangkan, diuji, dipelihara, dan digunakan pada jumlah data yang lebih besar.

Aplikasi Industri Data yang Dikelola Struktur Data
Aplikasi kasir Produk, stok, harga, dan transaksi List dan dictionary
Marketplace Produk, pesanan, dan antrean pembayaran List, dictionary, dan queue
Editor dokumen Riwayat perubahan dan fitur undo Stack
Customer service Antrean tiket pelanggan Queue
Sistem gudang Stok dan lokasi barang Dictionary, searching, dan sorting
Sistem sekolah Data siswa, nilai, dan kehadiran List dan dictionary

1. List: Menyimpan Banyak Data

List adalah struktur data untuk menyimpan banyak nilai dalam satu variabel. Data dalam list memiliki nomor posisi yang disebut indeks. Indeks Python dimulai dari angka 0.

produk = ["Laptop", "Mouse", "Keyboard", "Printer"]

print(produk[0])
print(produk[2])

Hasil:

Laptop
Keyboard

Operasi Dasar List

produk = ["Laptop", "Mouse", "Keyboard"]

# Menambah data
produk.append("Printer")

# Mengubah data
produk[1] = "Mouse Wireless"

# Menghapus data
produk.remove("Laptop")

# Menghitung jumlah data
jumlah_produk = len(produk)

print(produk)
print("Jumlah produk:", jumlah_produk)
Perintah Fungsi
append() Menambahkan data di bagian akhir list
insert() Menyisipkan data pada indeks tertentu
remove() Menghapus data berdasarkan nilai
pop() Mengambil sekaligus menghapus data
len() Menghitung jumlah elemen

2. Dictionary: Menyimpan Data Berdasarkan Atribut

Dictionary menyimpan data dalam pasangan key dan value. Dictionary sesuai untuk menyimpan sebuah objek yang memiliki beberapa atribut.

produk = {
    "kode": "PRD001",
    "nama": "Keyboard Mechanical",
    "harga": 350000,
    "stok": 12
}

print("Kode :", produk["kode"])
print("Nama :", produk["nama"])
print("Harga:", produk["harga"])
print("Stok :", produk["stok"])

Untuk menyimpan banyak produk, list dan dictionary dapat digabungkan.

daftar_produk = [
    {
        "kode": "PRD001",
        "nama": "Keyboard Mechanical",
        "harga": 350000,
        "stok": 12
    },
    {
        "kode": "PRD002",
        "nama": "Mouse Wireless",
        "harga": 150000,
        "stok": 20
    },
    {
        "kode": "PRD003",
        "nama": "Headset Gaming",
        "harga": 275000,
        "stok": 8
    }
]

for produk in daftar_produk:
    print(produk["kode"], "-", produk["nama"])
Penerapan industri: satu dictionary mewakili satu produk, sedangkan list menjadi wadah untuk menyimpan seluruh produk.

3. Stack: Data Terakhir Diproses Lebih Dahulu

Stack menggunakan prinsip Last In First Out atau LIFO. Artinya, data yang terakhir dimasukkan akan dikeluarkan terlebih dahulu.

Stack digunakan untuk:

  • Fitur undo pada aplikasi.
  • Riwayat perubahan data.
  • Riwayat halaman browser.
  • Proses pemanggilan fungsi.
riwayat = []

riwayat.append("Menambah produk PRD001")
riwayat.append("Mengubah stok PRD001")
riwayat.append("Mengubah harga PRD001")

print("Riwayat awal:", riwayat)

aksi_terakhir = riwayat.pop()

print("Aksi terakhir:", aksi_terakhir)
print("Riwayat sekarang:", riwayat)

Pada contoh tersebut, perubahan harga dikeluarkan terlebih dahulu karena menjadi aktivitas yang terakhir dimasukkan.

4. Queue: Data Pertama Diproses Lebih Dahulu

Queue menggunakan prinsip First In First Out atau FIFO. Data yang masuk terlebih dahulu akan diproses terlebih dahulu.

Queue digunakan dalam:

  • Antrean pesanan marketplace.
  • Antrean tiket layanan pelanggan.
  • Antrean dokumen pada printer.
  • Antrean pasien.
  • Antrean pekerjaan pada server.
from collections import deque

antrean = deque()

antrean.append("ORD001")
antrean.append("ORD002")
antrean.append("ORD003")

print("Antrean awal:", list(antrean))

pesanan_diproses = antrean.popleft()

print("Pesanan diproses:", pesanan_diproses)
print("Sisa antrean:", list(antrean))

Program akan memproses ORD001 karena pesanan tersebut masuk paling awal.

5. Linear Search: Mencari Data Satu per Satu

Linear search mencari data dengan memeriksa setiap elemen mulai dari awal sampai data ditemukan atau seluruh data selesai diperiksa.

def cari_produk(data_produk, kode_dicari):
    for produk in data_produk:
        if produk["kode"].lower() == kode_dicari.lower():
            return produk

    return None


hasil = cari_produk(daftar_produk, "PRD002")

if hasil is not None:
    print("Produk ditemukan:", hasil["nama"])
else:
    print("Produk tidak ditemukan")

Penelusuran Manual di Buku

Langkah Kode yang Diperiksa Kode Dicari Hasil Keputusan
1 PRD001 PRD002 Tidak sama Lanjutkan
2 PRD002 PRD002 Sama Data ditemukan

6. Sorting: Mengurutkan Data

Sorting digunakan untuk menyusun data berdasarkan kriteria tertentu, misalnya harga, stok, nama, nilai, atau waktu pemesanan.

Mengurutkan Harga Termurah

produk_terurut = sorted(
    daftar_produk,
    key=lambda produk: produk["harga"]
)

for produk in produk_terurut:
    print(produk["nama"], "-", produk["harga"])

Mengurutkan Stok Terbanyak

produk_terurut = sorted(
    daftar_produk,
    key=lambda produk: produk["stok"],
    reverse=True
)

for produk in produk_terurut:
    print(produk["nama"], "-", produk["stok"])

Parameter reverse=True digunakan untuk mengurutkan data dari nilai terbesar menuju nilai terkecil.

7. Kompleksitas Algoritma Secara Sederhana

Kompleksitas algoritma menggambarkan pertambahan jumlah langkah ketika jumlah data meningkat.

Notasi Penjelasan Contoh
O(1) Jumlah langkah relatif tetap Mengambil list menggunakan indeks
O(n) Jumlah langkah mengikuti banyaknya data Linear search
O(log n) Ruang pencarian dibagi secara bertahap Binary search pada data terurut
O(n log n) Umum pada pengurutan efisien Pengurutan bawaan Python secara umum
O(n²) Data dibandingkan berulang kali Bubble sort dasar
Program yang menghasilkan jawaban benar belum tentu efisien. Programmer harus mempertimbangkan jumlah data, kecepatan, penggunaan memori, keamanan, dan kemudahan pemeliharaan.

8. Sistem Bergantian Buku, Komputer, dan HP

Bentuk kelompok beranggotakan 4–6 siswa. Setiap kelompok menggunakan buku, komputer, dan HP secara bergantian. Satu perangkat tidak boleh hanya dikuasai oleh satu anggota.

Pembagian Peran

Peran Tugas Bukti Kerja
Analis Menentukan masalah, input, proses, dan output Tabel analisis di buku
Perancang algoritma Membuat pseudocode dan trace table Pseudocode di buku
Programmer Thonny Mengetik dan menjalankan kode di komputer File Python
Programmer Pydroid Menjalankan dan menguji kode di HP Tangkapan layar
Tester Menguji program dengan data valid dan tidak valid Tabel pengujian
Dokumentator Mencatat bug, perbaikan, dan kesimpulan Laporan kelompok

Rotasi Praktik 3 Pos

Pos Media Aktivitas Durasi
Pos 1 Buku Analisis masalah, pseudocode, prediksi hasil, dan skenario uji 15 menit
Pos 2 Komputer/Thonny Mengetik kode, menjalankan program, dan debugging 20 menit
Pos 3 HP/Pydroid 3 Menjalankan kode, menguji input, dan mengambil dokumentasi 15 menit
Setelah waktu setiap pos selesai, kelompok berpindah. Kelompok yang sedang menunggu komputer tetap mengerjakan analisis atau pengujian melalui buku dan HP. Dengan demikian, tidak ada siswa yang hanya menunggu.

9. Persiapan Praktik pada Thonny

  1. Buka aplikasi Thonny.
  2. Pilih File → New.
  3. Ketik atau tempel kode Python.
  4. Pilih File → Save As.
  5. Simpan dengan nama P9_Struktur_Data_Kelompok.py.
  6. Tekan F5 atau tombol Run.
  7. Perhatikan hasil pada Shell.
  8. Jika muncul error, perhatikan jenis error dan nomor barisnya.

Debugging di Thonny

Thonny menyediakan fitur menjalankan kode langkah demi langkah. Gunakan fitur debug untuk melihat perubahan isi variabel, list, antrean, dan stok.

  1. Pilih menu View → Variables.
  2. Jalankan program menggunakan mode debug.
  3. Amati perubahan antrean_pesanan.
  4. Amati perubahan stok setelah pesanan diproses.
  5. Catat perubahan tersebut di buku.

10. Persiapan Praktik pada Pydroid 3

  1. Buka aplikasi Pydroid 3 – IDE for Python 3.
  2. Buat file Python baru.
  3. Ketik atau tempel kode program.
  4. Simpan sebagai P9_Struktur_Data_Kelompok.py.
  5. Tekan tombol Run berbentuk segitiga.
  6. Masukkan pilihan menu melalui terminal.
  7. Periksa hasil program.
  8. Ambil tangkapan layar kode dan hasilnya.
Program pada materi ini hanya menggunakan pustaka standar Python sehingga tidak memerlukan pemasangan library tambahan melalui pip.

11. Praktik di Buku Sebelum Menulis Kode

Salin dan lengkapi tabel berikut di buku.

Analisis Input–Proses–Output

Bagian Isi
Masalah Mengelola produk dan antrean pesanan toko
Input Kode produk, nama, harga, stok, nomor pesanan, dan jumlah
Proses Mencari, mengurutkan, memvalidasi, mengantrekan, dan memproses pesanan
Output Daftar produk, hasil pencarian, antrean, stok terbaru, dan riwayat

Pseudocode

MULAI

Siapkan daftar produk
Siapkan antrean kosong
Siapkan riwayat kosong

TAMPILKAN menu

JIKA pengguna memilih tampilkan produk
    TAMPILKAN semua produk

JIKA pengguna memilih cari produk
    INPUT kode produk
    PERIKSA produk satu per satu
    JIKA ditemukan
        TAMPILKAN produk
    JIKA tidak ditemukan
        TAMPILKAN pesan kesalahan

JIKA pengguna memilih tambah pesanan
    INPUT nomor pesanan, kode produk, dan jumlah
    VALIDASI kode, jumlah, dan stok
    JIKA valid
        MASUKKAN pesanan ke antrean

JIKA pengguna memilih proses pesanan
    AMBIL pesanan paling depan
    KURANGI stok
    SIMPAN aktivitas ke riwayat

ULANGI sampai pengguna memilih keluar

SELESAI

12. Program Utama Siap Dipraktikkan

Salin kode berikut ke Thonny atau Pydroid 3. Program dibuat berbasis menu agar siswa dapat mencoba berbagai masukan secara langsung.

from collections import deque


# ==================================================
# DATA AWAL
# ==================================================

daftar_produk = [
    {
        "kode": "PRD001",
        "nama": "Keyboard Mechanical",
        "kategori": "Aksesori",
        "harga": 350000,
        "stok": 12
    },
    {
        "kode": "PRD002",
        "nama": "Mouse Wireless",
        "kategori": "Aksesori",
        "harga": 150000,
        "stok": 20
    },
    {
        "kode": "PRD003",
        "nama": "Headset Gaming",
        "kategori": "Audio",
        "harga": 275000,
        "stok": 8
    },
    {
        "kode": "PRD004",
        "nama": "Flashdisk 64 GB",
        "kategori": "Penyimpanan",
        "harga": 95000,
        "stok": 25
    },
    {
        "kode": "PRD005",
        "nama": "Webcam HD",
        "kategori": "Kamera",
        "harga": 225000,
        "stok": 10
    }
]

# Queue: pesanan pertama diproses lebih dahulu
antrean_pesanan = deque()

# Stack: aktivitas terakhir berada di bagian akhir
riwayat_aktivitas = []


# ==================================================
# FUNGSI BANTU
# ==================================================

def format_rupiah(nilai):
    hasil = "Rp{:,.0f}".format(nilai)
    return hasil.replace(",", ".")


def garis():
    print("-" * 74)


def cari_produk(kode_dicari):
    for produk in daftar_produk:
        if produk["kode"].lower() == kode_dicari.lower():
            return produk

    return None


def nomor_pesanan_sudah_ada(nomor):
    for pesanan in antrean_pesanan:
        if pesanan["nomor"].lower() == nomor.lower():
            return True

    return False


# ==================================================
# MENAMPILKAN PRODUK
# ==================================================

def tampilkan_produk(data):
    print("\nDAFTAR PRODUK")
    garis()

    print("{:<9} {:<23} {:<14} {:<15} {:<5}".format(
        "Kode",
        "Nama",
        "Kategori",
        "Harga",
        "Stok"
    ))

    garis()

    for produk in data:
        print("{:<9} {:<23} {:<14} {:<15} {:<5}".format(
            produk["kode"],
            produk["nama"],
            produk["kategori"],
            format_rupiah(produk["harga"]),
            produk["stok"]
        ))

    garis()


# ==================================================
# PENCARIAN PRODUK
# ==================================================

def menu_cari_produk():
    print("\nPENCARIAN PRODUK")

    kode = input("Masukkan kode produk: ").strip()
    hasil = cari_produk(kode)

    if hasil is None:
        print("Produk dengan kode", kode, "tidak ditemukan.")
        return

    print("\nProduk ditemukan")
    print("Kode    :", hasil["kode"])
    print("Nama    :", hasil["nama"])
    print("Kategori:", hasil["kategori"])
    print("Harga   :", format_rupiah(hasil["harga"]))
    print("Stok    :", hasil["stok"])


# ==================================================
# PENGURUTAN PRODUK
# ==================================================

def urutkan_harga_termurah():
    hasil = sorted(
        daftar_produk,
        key=lambda produk: produk["harga"]
    )

    tampilkan_produk(hasil)


def urutkan_stok_terbanyak():
    hasil = sorted(
        daftar_produk,
        key=lambda produk: produk["stok"],
        reverse=True
    )

    tampilkan_produk(hasil)


# ==================================================
# MENAMBAHKAN PESANAN
# ==================================================

def tambah_pesanan():
    print("\nTAMBAH PESANAN")

    nomor = input("Nomor pesanan : ").strip().upper()
    kode = input("Kode produk   : ").strip().upper()

    if nomor == "":
        print("Gagal: nomor pesanan tidak boleh kosong.")
        return

    if nomor_pesanan_sudah_ada(nomor):
        print("Gagal: nomor pesanan sudah digunakan.")
        return

    produk = cari_produk(kode)

    if produk is None:
        print("Gagal: kode produk tidak ditemukan.")
        return

    try:
        jumlah = int(input("Jumlah pesanan: "))
    except ValueError:
        print("Gagal: jumlah harus berupa angka bulat.")
        return

    if jumlah <= 0:
        print("Gagal: jumlah harus lebih dari nol.")
        return

    if jumlah > produk["stok"]:
        print("Gagal: stok tidak mencukupi.")
        print("Stok tersedia:", produk["stok"])
        return

    pesanan = {
        "nomor": nomor,
        "kode_produk": produk["kode"],
        "nama_produk": produk["nama"],
        "jumlah": jumlah,
        "total": produk["harga"] * jumlah,
        "status": "Menunggu"
    }

    antrean_pesanan.append(pesanan)

    riwayat_aktivitas.append(
        "Menambahkan pesanan " + nomor
    )

    print("Pesanan", nomor, "berhasil masuk antrean.")
    print("Total pembayaran:", format_rupiah(pesanan["total"]))


# ==================================================
# MENAMPILKAN ANTREAN
# ==================================================

def tampilkan_antrean():
    print("\nANTREAN PESANAN")
    garis()

    if len(antrean_pesanan) == 0:
        print("Antrean masih kosong.")
        return

    nomor_urut = 1

    for pesanan in antrean_pesanan:
        print(
            str(nomor_urut) + ".",
            pesanan["nomor"],
            "|", pesanan["nama_produk"],
            "| Jumlah:", pesanan["jumlah"],
            "| Total:", format_rupiah(pesanan["total"]),
            "|", pesanan["status"]
        )

        nomor_urut += 1


# ==================================================
# MEMPROSES PESANAN
# ==================================================

def proses_pesanan():
    print("\nPROSES PESANAN")

    if len(antrean_pesanan) == 0:
        print("Tidak ada pesanan yang dapat diproses.")
        return

    # popleft mengambil pesanan paling depan
    pesanan = antrean_pesanan.popleft()

    produk = cari_produk(pesanan["kode_produk"])

    # Validasi ulang sebelum stok dikurangi
    if produk is None:
        print("Gagal: produk tidak ditemukan.")
        return

    if pesanan["jumlah"] > produk["stok"]:
        print("Gagal: stok berubah dan sekarang tidak mencukupi.")
        return

    produk["stok"] -= pesanan["jumlah"]
    pesanan["status"] = "Selesai"

    riwayat_aktivitas.append(
        "Memproses pesanan " + pesanan["nomor"]
    )

    print("Pesanan berhasil diproses.")
    print("Nomor       :", pesanan["nomor"])
    print("Produk      :", pesanan["nama_produk"])
    print("Jumlah      :", pesanan["jumlah"])
    print("Total       :", format_rupiah(pesanan["total"]))
    print("Status      :", pesanan["status"])
    print("Sisa stok   :", produk["stok"])


# ==================================================
# MENAMPILKAN RIWAYAT
# ==================================================

def tampilkan_riwayat():
    print("\nRIWAYAT AKTIVITAS")

    if len(riwayat_aktivitas) == 0:
        print("Belum ada aktivitas.")
        return

    nomor = 1

    for aktivitas in riwayat_aktivitas:
        print(str(nomor) + ".", aktivitas)
        nomor += 1


def ambil_riwayat_terakhir():
    print("\nAMBIL RIWAYAT TERAKHIR")

    if len(riwayat_aktivitas) == 0:
        print("Riwayat masih kosong.")
        return

    aktivitas = riwayat_aktivitas.pop()

    print("Aktivitas terakhir:", aktivitas)
    print("Aktivitas tersebut dikeluarkan dari stack.")


# ==================================================
# PRODUK STOK RENDAH
# ==================================================

def tampilkan_stok_rendah():
    print("\nPRODUK DENGAN STOK DI BAWAH 10")

    ditemukan = False

    for produk in daftar_produk:
        if produk["stok"] < 10:
            print(
                produk["kode"],
                "-", produk["nama"],
                "-", produk["stok"]
            )

            ditemukan = True

    if not ditemukan:
        print("Tidak ada produk dengan stok rendah.")


# ==================================================
# MENU UTAMA
# ==================================================

def tampilkan_menu():
    print("\n========================================")
    print(" SISTEM PRODUK DAN ANTREAN PESANAN")
    print("========================================")
    print("1. Tampilkan seluruh produk")
    print("2. Cari produk")
    print("3. Urutkan berdasarkan harga termurah")
    print("4. Urutkan berdasarkan stok terbanyak")
    print("5. Tambahkan pesanan")
    print("6. Tampilkan antrean")
    print("7. Proses pesanan")
    print("8. Tampilkan riwayat")
    print("9. Ambil riwayat terakhir")
    print("10. Tampilkan produk stok rendah")
    print("0. Keluar")


# ==================================================
# PROGRAM UTAMA
# ==================================================

while True:
    tampilkan_menu()

    pilihan = input("Pilih menu: ").strip()

    if pilihan == "1":
        tampilkan_produk(daftar_produk)

    elif pilihan == "2":
        menu_cari_produk()

    elif pilihan == "3":
        urutkan_harga_termurah()

    elif pilihan == "4":
        urutkan_stok_terbanyak()

    elif pilihan == "5":
        tambah_pesanan()

    elif pilihan == "6":
        tampilkan_antrean()

    elif pilihan == "7":
        proses_pesanan()

    elif pilihan == "8":
        tampilkan_riwayat()

    elif pilihan == "9":
        ambil_riwayat_terakhir()

    elif pilihan == "10":
        tampilkan_stok_rendah()

    elif pilihan == "0":
        print("Program selesai. Terima kasih.")
        break

    else:
        print("Pilihan tidak tersedia. Masukkan angka 0-10.")
Catatan saat menyalin: jika kode disalin dari tampilan artikel HTML dan simbol &lt; muncul sebagai tulisan, ganti menjadi tanda lebih kecil. Contoh yang benar: jumlah <= 0 dan produk["stok"] < 10.

13. Cara Mengimplementasikan Program

Langkah 1 – Jalankan program.
Gunakan Thonny atau Pydroid 3. Pastikan menu utama tampil tanpa error.
Langkah 2 – Tampilkan produk.
Pilih menu 1. Pastikan lima produk ditampilkan beserta kode, kategori, harga, dan stok.
Langkah 3 – Uji pencarian.
Pilih menu 2 dan masukkan PRD002. Setelah itu, ulangi menggunakan PRD999.
Langkah 4 – Uji pengurutan.
Pilih menu 3 untuk mengurutkan harga dan menu 4 untuk mengurutkan stok.
Langkah 5 – Tambahkan pesanan.
Pilih menu 5. Gunakan nomor ORD001, kode PRD002, dan jumlah 2.
Langkah 6 – Tambahkan pesanan kedua.
Gunakan nomor ORD002, kode PRD001, dan jumlah 1.
Langkah 7 – Periksa antrean.
Pilih menu 6. Pastikan ORD001 berada di urutan pertama.
Langkah 8 – Proses pesanan.
Pilih menu 7. Pastikan ORD001 diproses terlebih dahulu dan stok Mouse Wireless berkurang dari 20 menjadi 18.
Langkah 9 – Periksa riwayat.
Pilih menu 8. Pastikan aktivitas penambahan dan pemrosesan pesanan tercatat.
Langkah 10 – Dokumentasikan hasil.
Catat hasil aktual di buku dan ambil tangkapan layar program.

14. Skenario Pengujian Wajib

No. Skenario Input Hasil yang Diharapkan
1 Mencari produk valid PRD002 Mouse Wireless ditemukan
2 Mencari produk tidak tersedia PRD999 Muncul pesan produk tidak ditemukan
3 Menambahkan pesanan valid ORD001, PRD002, 2 Pesanan berhasil masuk antrean
4 Jumlah negatif ORD002, PRD001, -2 Pesanan ditolak
5 Jumlah bukan angka dua Program tidak berhenti dan menampilkan pesan kesalahan
6 Jumlah melebihi stok ORD003, PRD003, 100 Pesanan ditolak karena stok tidak mencukupi
7 Nomor pesanan ganda ORD001 digunakan dua kali Pesanan kedua ditolak
8 Memproses antrean ORD001 lalu ORD002 ORD001 diproses terlebih dahulu
9 Memproses antrean kosong Tidak ada pesanan Muncul informasi antrean kosong
10 Mengurutkan harga Menu 3 Flashdisk tampil sebagai harga termurah

Format Catatan Pengujian di Buku

Skenario Hasil Aktual Status Bug/Penyebab Perbaikan
Mencari PRD002 Diisi siswa Lulus/Gagal Diisi siswa Diisi siswa
Jumlah melebihi stok Diisi siswa Lulus/Gagal Diisi siswa Diisi siswa
Memproses antrean kosong Diisi siswa Lulus/Gagal Diisi siswa Diisi siswa

15. Kesalahan yang Sering Terjadi

Error/Masalah Penyebab Solusi
SyntaxError Kurang titik dua, kurung, atau tanda kutip Periksa baris yang ditunjukkan oleh Python
IndentationError Spasi awal baris tidak konsisten Gunakan empat spasi untuk setiap blok
KeyError Nama key dictionary salah Periksa penulisan kode, nama, harga, atau stok
ValueError Input teks diubah menjadi angka Gunakan try-except
Produk tidak ditemukan Kode salah atau belum tersedia Periksa kode produk
Kode berjalan di komputer tetapi gagal di HP Ada karakter hasil salin atau indentasi berubah Ketik ulang tanda kutip, operator, dan indentasi

16. Tugas Pengembangan Kelompok

Setelah program utama berhasil dijalankan, setiap kelompok memilih minimal tiga pengembangan berikut:

  1. Tambahkan minimal lima produk baru.
  2. Buat pencarian berdasarkan sebagian nama produk.
  3. Buat filter produk berdasarkan kategori.
  4. Tambahkan diskon untuk total tertentu.
  5. Tambahkan biaya layanan atau biaya pengiriman.
  6. Buat fitur pembatalan pesanan sebelum diproses.
  7. Tampilkan tiga produk dengan stok paling sedikit.
  8. Buat laporan total nilai persediaan.
  9. Simpan laporan transaksi ke file teks.
  10. Tambahkan nama pelanggan menggunakan data simulasi.

Target Keberhasilan

  • Program dapat dijalankan tanpa SyntaxError.
  • Minimal delapan produk tersimpan.
  • List dan dictionary digunakan dengan benar.
  • Stack dan queue dapat didemonstrasikan.
  • Pencarian dapat menemukan data valid.
  • Pengurutan memberikan hasil yang tepat.
  • Minimal tiga validasi input bekerja.
  • Minimal lima skenario pengujian dinyatakan lulus.
  • Program dapat dijalankan di Thonny atau Pydroid 3.
  • Setiap anggota mampu menjelaskan bagian kode yang dikerjakan.

17. Bukti Praktik yang Dikumpulkan

Bukti Individual

  1. Catatan materi di buku.
  2. Pseudocode atau trace table.
  3. Satu tabel pengujian.
  4. Penjelasan bagian kode yang dipahami.
  5. Refleksi singkat.

Bukti Kelompok

  1. File .py hasil praktik.
  2. Tangkapan layar program di Thonny.
  3. Tangkapan layar program di Pydroid 3.
  4. Tabel pengujian minimal lima skenario.
  5. Catatan bug dan perbaikannya.
  6. Daftar pembagian peran kelompok.
  7. Demonstrasi program selama 2–3 menit.

18. Etika dan Keamanan Data

  • Gunakan data produk dan pelanggan simulasi.
  • Jangan memasukkan nomor telepon atau identitas pribadi asli.
  • Jangan menyimpan kata sandi dalam kode program.
  • Validasi setiap data yang dimasukkan pengguna.
  • Jangan mengubah atau menghapus file kelompok lain.
  • Gunakan HP hanya untuk kegiatan praktik saat pembelajaran.
  • Jangan menyalin kode tanpa memahami cara kerjanya.
  • Periksa kembali kode yang diperoleh dari kecerdasan artifisial.
  • Catat sumber apabila menggunakan referensi dari luar.

19. Refleksi Praktik

Jawab pertanyaan berikut di buku:

  1. Apa perbedaan list dan dictionary?
  2. Apa perbedaan stack dan queue?
  3. Mengapa antrean pesanan menggunakan prinsip FIFO?
  4. Bagaimana linear search menemukan produk?
  5. Apa peran saya dalam kelompok?
  6. Apakah saya menggunakan buku, Thonny, atau Pydroid 3?
  7. Bug apa yang ditemukan kelompok?
  8. Bagaimana bug tersebut diperbaiki?
  9. Apa bukti bahwa program telah bekerja?
  10. Bagaimana program ini dapat dikembangkan untuk dunia kerja?

Kesimpulan

List digunakan untuk menyimpan kumpulan data, sedangkan dictionary digunakan untuk menyimpan atribut sebuah objek. Stack menerapkan prinsip LIFO dan sesuai untuk riwayat atau fitur undo. Queue menerapkan prinsip FIFO dan sesuai untuk antrean pesanan atau pelayanan.

Searching digunakan untuk menemukan data, sedangkan sorting digunakan untuk mengurutkan data berdasarkan kebutuhan. Pemilihan struktur data dan algoritma yang tepat membantu menghasilkan program yang terstruktur, efisien, mudah diuji, dan mudah dikembangkan.

Penggunaan buku, Thonny, dan Pydroid 3 secara bergantian memastikan seluruh siswa tetap aktif meskipun jumlah komputer terbatas. Buku digunakan untuk merancang dan menganalisis, Thonny digunakan untuk implementasi serta debugging, sedangkan Pydroid 3 digunakan untuk menjalankan dan menguji program melalui HP Android.

Kegiatan ini menggambarkan alur kerja industri perangkat lunak: menganalisis kebutuhan, merancang algoritma, menulis kode, melakukan pengujian, menemukan bug, memperbaiki program, mendokumentasikan hasil, dan mempresentasikan solusi.

Post a Comment

0 Comments