Pendamping Bab 16: Fungsi Bawaan dan Modul Standar. Gunakan nomor contoh dan latihan yang sama dengan buku.

Tujuan Belajar

  • Memilih fungsi bawaan untuk pekerjaan umum.
  • Mengimpor modul standar sesuai kebutuhan.
  • Membedakan hasil acak, waktu, dan hasil yang tetap.

Persiapan

Kamu sudah memahami fungsi, koleksi, file, dan exception. Modul standar tersedia bersama Python; sebagian fungsi sistem berkas memerlukan komputer. Contoh acak untuk latihan bukan alat keamanan.

Program dengan tombol Coba di IDE dapat dijalankan di browser. Untuk program lokal, unduh sumber, ekstrak ZIP, lalu ikuti README.txt.

Pembahasan

16-01 – Fungsi Bawaan (Built-in Functions)

Perhatikan pemakaian enumerate, zip, all, any pada data contoh dan bandingkan hasilnya dengan nilai awal.

Coba di IDE Unduh Sumber
# Menggunakan enumerate untuk mendapatkan indeks dan nilai
nama_buah = ["apel", "jeruk", "mangga"]
for indeks, buah in enumerate(nama_buah):
    print(f"Buah ke-{indeks+1}: {buah}")
# Output:
# Buah ke-1: apel
# Buah ke-2: jeruk
# Buah ke-3: mangga

# Menggunakan zip untuk menggabungkan list
nama_siswa = ["Budi", "Ani", "Citra"]
nilai_ujian = [85, 92, 78]
for nama, nilai in zip(nama_siswa, nilai_ujian):
    print(f"{nama} mendapatkan nilai {nilai}")
# Output:
# Budi mendapatkan nilai 85
# Ani mendapatkan nilai 92
# Citra mendapatkan nilai 78

# Menggunakan all() dan any()
angka_positif = [1, 2, 3, 4, 5]
angka_campuran = [-1, 0, 1, 2]
# Cek apakah semua angka positif
cek_semua = all(x > 0 for x in angka_positif)
print(f"Semua angka di {angka_positif} positif? {cek_semua}")
# Cek apakah ada angka positif
cek_ada = any(x > 0 for x in angka_campuran)
print(f"Ada angka positif di {angka_campuran}? {cek_ada}")

# Mendapatkan bantuan tentang fungsi
# help(sum) # Uncomment untuk mencoba

Hasil yang diharapkan:

Buah ke-1: apel
Buah ke-2: jeruk
Buah ke-3: mangga
Budi mendapatkan nilai 85
Ani mendapatkan nilai 92
Citra mendapatkan nilai 78
Semua angka di [1, 2, 3, 4, 5] positif? True
Ada angka positif di [-1, 0, 1, 2]? True

Coba ubah: Ubah satu nilai pada nama_buah dan periksa bagian hasil yang ikut berubah.

16-02 – Modul `math` – Fungsi Matematika

Perhatikan pemakaian sqrt, ceil, floor, pow pada data contoh dan bandingkan hasilnya dengan nilai awal.

Coba di IDE Unduh Sumber
import math

print(math.sqrt(16))  # 4.0 (akar kuadrat)
print(math.pi)  # 3.141592653589793 (konstanta pi)
print(math.ceil(3.2))  # 4 (pembulatan ke atas)
print(math.floor(3.9))  # 3 (pembulatan ke bawah)
print(math.pow(2, 3))  # 8.0 (2 pangkat 3)
print(math.factorial(5))  # 120 (5! = 5*4*3*2*1)
# Dan masih banyak lagi: sin(), cos(), tan(), log(), etc.

Hasil yang diharapkan:

4.0
3.141592653589793
4
3
8.0
120

Coba ubah: Ubah satu nilai pada contoh, lalu jelaskan pengaruhnya terhadap hasil.

16-03 – Modul `json` – Format Data JSON

JSON (JavaScript Object Notation) adalah format pertukaran data yang populer. Modul json membantu kita mengubah data Python (seperti dictionary atau list) menjadi string JSON, dan sebaliknya. Jalankan dengan Python di komputer agar format hasil sama dengan contoh buku.

Unduh Sumber
import json

# Dari Python dictionary ke string JSON
data_mahasiswa = {
    "nama": "Ayu Lestari",
    "umur": 21,
    "kota": "Bandung",
    "aktif": True,
}

# indent membuat output JSON lebih mudah dibaca
json_string = json.dumps(data_mahasiswa, indent=4)
print("String JSON:")
print(json_string)

# Dari string JSON kembali ke Python dictionary
data_python_kembali = json.loads(json_string)
print("\\nData Python setelah di-load:")
print(data_python_kembali)
print(f"Nama mahasiswa: {data_python_kembali['nama']}")

Hasil yang diharapkan:

String JSON:
{
    "nama": "Ayu Lestari",
    "umur": 21,
    "kota": "Bandung",
    "aktif": true
}
\nData Python setelah di-load:
{'nama': 'Ayu Lestari', 'umur': 21, 'kota': 'Bandung', 'aktif': True}
Nama mahasiswa: Ayu Lestari

Coba ubah: Ubah satu nilai pada data_mahasiswa dan periksa bagian hasil yang ikut berubah.

16-04 – Modul `collections` – Struktur Data Canggih

Modul collections menyediakan alternatif dari tipe data bawaan seperti list, tuple, dict dengan fungsionalitas tambahan.

Coba di IDE Unduh Sumber
import collections

# Counter: menghitung frekuensi item dalam list atau string
jumlah_huruf = collections.Counter("belajar python itu menyenangkan")
print("\\nFrekuensi huruf:", jumlah_huruf)
print("Huruf 'a' muncul:", jumlah_huruf["a"], "kali")
print("Tiga huruf paling umum:", jumlah_huruf.most_common(3))

# defaultdict memberi nilai default jika key tidak ada
from collections import defaultdict

# Defaultnya 0 jika key belum ada
skor_pemain = defaultdict(int)
skor_pemain["Budi"] += 10
skor_pemain["Ani"] += 5
print("Skor Budi:", skor_pemain["Budi"])
print("Skor Citra (belum ada):", skor_pemain["Citra"])

# deque cepat untuk append dan pop di dua ujung
antrian = collections.deque(["Eric", "John", "Michael"])
antrian.append("Terry")  # Terry masuk antrian
antrian.popleft()  # Eric keluar dari antrian
print("Antrian sekarang:", antrian)

Hasil yang diharapkan:

\nFrekuensi huruf: Counter({'n': 5, 'a': 4, 'e': 3, ' ': 3, 'y': 2, 't': 2, 'b': 1, 'l': 1, 'j': 1, 'r': 1, 'p': 1, 'h': 1, 'o': 1, 'i': 1, 'u': 1, 'm': 1, 'g': 1, 'k': 1})
Huruf 'a' muncul: 4 kali
Tiga huruf paling umum: [('n', 5), ('a', 4), ('e', 3)]
Skor Budi: 10
Skor Citra (belum ada): 0
Antrian sekarang: deque(['John', 'Michael', 'Terry'])

Coba ubah: Ubah satu nilai pada contoh, lalu jelaskan pengaruhnya terhadap hasil.

16-05 – Modul `re` – Regular Expressions (Pencocokan Pola Teks)

Modul re sangat berguna untuk mencari atau memanipulasi string berdasarkan pola tertentu. Ini adalah topik yang luas, tapi mari lihat contoh sederhana.

Coba di IDE Unduh Sumber
import re

teks = "Email saya adalah [email protected] dan "
teks += "[email protected]. Nomor telepon saya 08123456789."
# Mencari semua alamat email dalam teks
pola_email = r"\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+"
pola_email += r"\\.[A-Z|a-z]{2,}\\b"
hasil_pencarian_email = re.findall(pola_email, teks)
print("\\nAlamat email ditemukan:", hasil_pencarian_email)

# Mencari semua nomor telepon (pola sederhana)
# 10 sampai 13 digit angka
pola_telepon = r"\\b\\d{10,13}\\b"
hasil_pencarian_telepon = re.findall(pola_telepon, teks)
print("Nomor telepon ditemukan:", hasil_pencarian_telepon)

Hasil yang diharapkan:

\nAlamat email ditemukan: []
Nomor telepon ditemukan: []

Coba ubah: Ganti isi teks dengan teks lain dan bandingkan hasilnya.

Studi Kasus

16-06 – Ringkasan hasil belajar

Daftar contoh tidak kosong sehingga rata-rata dapat dihitung. Fungsi bawaan menggantikan beberapa perulangan yang harus ditulis sendiri.

Coba di IDE Unduh Sumber
nilai = [70, 80, 90, 100]
print(f"Jumlah: {len(nilai)}")
print(f"Terendah: {min(nilai)}")
print(f"Tertinggi: {max(nilai)}")
print(f"Rata-rata: {sum(nilai) / len(nilai):.1f}")

Hasil yang diharapkan:

Jumlah: 4
Terendah: 70
Tertinggi: 100
Rata-rata: 85.0

Coba ubah: Tambahkan satu nilai dan hitung ulang rata-ratanya.

Rangkuman

Fungsi bawaan seperti len, sum, min, dan max dapat langsung dipakai. Modul standar diimpor sesuai kebutuhan. Baca dokumentasi fungsi dan periksa apakah hasil bergantung pada waktu, sistem, atau keacakan.

Cek Pemahaman

Lima pertanyaan ini sama dengan pertanyaan di buku. Periksa jawaban di kuis untuk melihat skor dan pembahasan.

  1. Manakah yang dapat dipakai tanpa import?
  2. Apa tujuan import math?
  3. Fungsi untuk jumlah nilai numerik dalam iterable adalah …
  4. Apakah keluaran random harus sama pada setiap eksekusi?
  5. Modul untuk kebutuhan token atau kata sandi keamanan adalah …
Kerjakan Kuis

Latihan Mandiri

Latihan 16-L01 – Ringkasan nilai

Dasar. Dari [70, 85, 90], cetak jumlah data, total, dan nilai terbesar.

Kerjakan di IDE Unduh Latihan

Hasil yang diharapkan:

3
245
90
Lihat Petunjuk

Gunakan len, sum, dan max.

Lihat Solusi
nilai = [70, 85, 90]
print(len(nilai))
print(sum(nilai))
print(max(nilai))

Fungsi bawaan mengerjakan operasi umum tanpa loop manual.

Coba Solusi di IDEUnduh Solusi

Latihan 16-L02 – Memeriksa dadu

Penerapan. Ambil satu bilangan acak dari 1 sampai 6, lalu cetak apakah nilainya berada dalam rentang itu.

Kerjakan di IDE Unduh Latihan

Hasil yang diharapkan:

True
Lihat Petunjuk

Batas bawah dan atas randint termasuk dalam hasil.

Lihat Solusi
import random

hasil = random.randint(1, 6)
print(1 <= hasil <= 6)

Angka dapat berbeda; sifat rentangnya tetap.

Coba Solusi di IDEUnduh Solusi

Latihan 16-L03 – Data JSON

Pengembangan. Ubah dictionary {"nama": "Ayu", "skor": 80} menjadi JSON, baca kembali, lalu cetak nama dan skor.

Kerjakan di IDE Unduh Latihan

Hasil yang diharapkan:

Ayu
80
Lihat Petunjuk

dumps membuat string JSON; loads membaca string JSON.

Lihat Solusi
import json

data = {"nama": "Ayu", "skor": 80}
teks = json.dumps(data)
hasil = json.loads(teks)
print(hasil["nama"])
print(hasil["skor"])

Data dasar dapat dipertukarkan melalui representasi teks JSON.

Coba Solusi di IDEUnduh Solusi

Pengembangan

Kegiatan Tambahan

Saatnya menguji pemahamanmu! Coba kerjakan latihan berikut:

  1. Analisis Teks Sederhana (Fungsi Bawaan dan collections.Counter): Buat program yang:
    • Meminta pengguna memasukkan sebuah kalimat.
    • Menampilkan:
      • Jumlah total karakter (termasuk spasi).
      • Jumlah kata (asumsikan kata dipisahkan spasi).
      • Frekuensi setiap kata dalam kalimat tersebut (gunakan collections.Counter dan ubah kalimat menjadi huruf kecil terlebih dahulu).
  2. Simulasi String Acak (Modul random dan string): Buat program yang:
    • Meminta pengguna memasukkan panjang password yang diinginkan.
    • Membuat string acak untuk latihan yang terdiri dari huruf besar, huruf kecil, angka, dan simbol.
    • (Petunjuk: Modul string memiliki konstanta seperti string.ascii_letters, string.digits, string.punctuation).
  3. Informasi File (Modul os dan datetime): Buat program yang:
    • Meminta pengguna memasukkan nama sebuah file (misalnya, Bab01.md jika ada di direktori yang sama).
    • Jika file tersebut ada, tampilkan:
      • Ukuran file dalam bytes (os.path.getsize()).
      • Tanggal terakhir file tersebut dimodifikasi (os.path.getmtime() dikonversi ke format tanggal yang mudah dibaca menggunakan datetime.datetime.fromtimestamp()).
    • Jika file tidak ada, tampilkan pesan bahwa file tidak ditemukan.
Petunjuk dan Solusi Pengembangan

Solusi Latihan Mandiri

Berikut adalah contoh solusi untuk latihan di atas. Cobalah untuk mengerjakannya sendiri terlebih dahulu sebelum melihat solusi ini!

1. Analisis Teks Sederhana:

import collections

print("--- Analisis Teks Sederhana ---")
kalimat = input("Masukkan sebuah kalimat: ")

#### Jumlah total karakter
jumlah_karakter = len(kalimat)
print(f"Jumlah total karakter: {jumlah_karakter}")

#### Jumlah kata
#### Memecah string menjadi list kata berdasarkan spasi
kata_kata = kalimat.split()
jumlah_kata = len(kata_kata)
print(f"Jumlah kata: {jumlah_kata}")

#### Frekuensi setiap kata
if kata_kata: # Pastikan ada kata untuk dihitung
    kalimat_kecil = kalimat.lower() # Ubah ke huruf kecil
    kata_kata_kecil = kalimat_kecil.split()
    frekuensi_kata = collections.Counter(kata_kata_kecil)
    print("Frekuensi setiap kata:")
    for kata, frekuensi in frekuensi_kata.items():
        print(f"- '{kata}': {frekuensi}")
else:
    print("Tidak ada kata untuk dianalisis frekuensinya.")

2. Simulasi String Acak:

import random
import string

print("--- Simulasi String Acak ---")
try:
    prompt = "Masukkan panjang password: "
    panjang_password_str = input(prompt)
    panjang_password = int(panjang_password_str)

    if panjang_password <= 0:
        print("Panjang password harus lebih dari 0.")
    else:
        # Kumpulan karakter yang bisa digunakan
        karakter_valid = string.ascii_letters
        karakter_valid += string.digits + string.punctuation
        # ascii_letters = a-z, A-Z
        # digits = 0-9
        # punctuation = simbol khusus
        
        password_acak = []
        for _ in range(panjang_password):
            password_acak.append(random.choice(karakter_valid))
        
        # Gabungkan list karakter menjadi string
        password_final = "".join(password_acak)
        print(f"Password acakmu: {password_final}")

except ValueError:
    print("Input tidak valid.")
    print("Harap masukkan angka untuk panjang password.")
except Exception as e:
    print(f"Terjadi error: {e}")

3. Informasi File:

import os
import datetime

print("--- Informasi File ---")
nama_file = input("Masukkan nama file (misal: Bab01.md): ")

if os.path.exists(nama_file):
    # Pastikan itu file, bukan direktori
    if os.path.isfile(nama_file):
        # Ukuran file
        ukuran_file_bytes = os.path.getsize(nama_file)
        ukuran_info = f"Ukuran file '{nama_file}': "
        ukuran_info += f"{ukuran_file_bytes} bytes"
        print(ukuran_info)

        # Tanggal modifikasi terakhir
        timestamp_modifikasi = os.path.getmtime(nama_file)
        tanggal_modifikasi = datetime.datetime.fromtimestamp(
            timestamp_modifikasi
        )
        format_tanggal = '%A, %d %B %Y, %H:%M:%S'
        tanggal_str = tanggal_modifikasi.strftime(format_tanggal)
        print(f"Terakhir dimodifikasi: {tanggal_str}")
    else:
        print(f"'{nama_file}' adalah sebuah direktori, bukan file.")
else:
    print(f"File '{nama_file}' tidak ditemukan.")
    print(f"Direktori saat ini: {os.getcwd()}")

Referensi dan Materi Pendamping

Langkah Selanjutnya

Bab 17 membahas Mengatur Code dengan Modul dan Paket. Sebelum melanjutkan, pastikan kamu dapat menjelaskan tujuan belajar dan menyelesaikan tiga latihan inti bab ini.

Edisi September 2026. Nomor contoh, pertanyaan, dan latihan digunakan bersama pada buku dan halaman ini.

Bab 15 | Bab 17