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]? TrueCoba 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 Sumberimport 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
120Coba 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 Sumberimport 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 LestariCoba 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 Sumberimport 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 Sumberimport 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 Sumbernilai = [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.0Coba 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.
- Manakah yang dapat dipakai tanpa import?
- Apa tujuan import math?
- Fungsi untuk jumlah nilai numerik dalam iterable adalah …
- Apakah keluaran random harus sama pada setiap eksekusi?
- Modul untuk kebutuhan token atau kata sandi keamanan adalah …
Latihan Mandiri
Latihan 16-L01 – Ringkasan nilai
Dasar. Dari [70, 85, 90], cetak jumlah data, total, dan nilai terbesar.
Kerjakan di IDE Unduh LatihanHasil 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 SolusiLatihan 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 LatihanHasil 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 SolusiLatihan 16-L03 – Data JSON
Pengembangan. Ubah dictionary {"nama": "Ayu", "skor": 80} menjadi JSON, baca kembali, lalu cetak nama dan skor.
Kerjakan di IDE Unduh LatihanHasil 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 SolusiPengembangan
Kegiatan Tambahan
Saatnya menguji pemahamanmu! Coba kerjakan latihan berikut:
- 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.Counterdan ubah kalimat menjadi huruf kecil terlebih dahulu).
- Simulasi String Acak (Modul
randomdanstring): 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
stringmemiliki konstanta sepertistring.ascii_letters,string.digits,string.punctuation).
- Informasi File (Modul
osdandatetime): Buat program yang:- Meminta pengguna memasukkan nama sebuah file (misalnya,
Bab01.mdjika 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 menggunakandatetime.datetime.fromtimestamp()).
- Ukuran file dalam bytes (
- Jika file tidak ada, tampilkan pesan bahwa file tidak ditemukan.
- Meminta pengguna memasukkan nama sebuah file (misalnya,
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
- len() di Python: Menghitung Panjang String, List, dan Lainnya
- Modul random di Python: Angka dan Pilihan Acak
- Modul Python: Membuat dan Menggunakan Modul
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.
