Pendamping Bab 7: String Lanjutan: Format dan Unicode. Gunakan nomor contoh dan latihan yang sama dengan buku.
Tujuan Belajar
- Mengatur lebar, perataan, dan presisi tampilan.
- Membedakan str dengan bytes.
- Menggunakan pasangan encode dan decode dengan encoding yang sesuai.
Persiapan
Kamu sudah memahami string dasar dan f-string. Studi kasus inti hanya memakai materi sampai Bab 7; pengolahan daftar judul dengan fungsi dan dictionary menjadi pengembangan setelah Bab 13.
Program dengan tombol Coba di IDE dapat dijalankan di browser. Untuk program lokal, unduh sumber, ekstrak ZIP, lalu ikuti README.txt.
Pembahasan
07-01 – Perataan Teks (Alignment)
Format specifier ditulis setelah variabel di dalam kurung kurawal, dipisahkan oleh titik dua (:). Bentuk umumnya adalah: f"{nilai:specifier}".
Coba di IDE Unduh Sumbernama_align = "Budi"
print(f"Nama: '{nama_align:<10}' (rata kiri dalam 10 spasi)")
print(f"Nama: '{nama_align:>10}' (rata kanan dalam 10 spasi)")
print(f"Nama: '{nama_align:^10}' (rata tengah dalam 10 spasi)")
# Kamu juga bisa menentukan karakter pengisi selain spasi
print(f"'{nama_align:-^10}'") # Output: '---Budi---'
Hasil yang diharapkan:
Nama: 'Budi ' (rata kiri dalam 10 spasi)
Nama: ' Budi' (rata kanan dalam 10 spasi)
Nama: ' Budi ' (rata tengah dalam 10 spasi)
'---Budi---'Coba ubah: Ganti isi nama_align dengan teks lain dan bandingkan hasilnya.
07-02 – Menampilkan Tanda Angka (`+`, `-`, spasi)
Instruksi dijalankan dari atas ke bawah; print menampilkan nilai saat instruksi itu dijalankan.
Coba di IDE Unduh Sumberangka_pos = 123
angka_neg = -123
# Output: Positif: +123, Negatif: -123
print(f"Positif: {angka_pos:+d}, Negatif: {angka_neg:+d}")
# Output: Positif: 123, Negatif: -123
print(f"Positif: {angka_pos: d}, Negatif: {angka_neg: d}")
Hasil yang diharapkan:
Positif: +123, Negatif: -123
Positif: 123, Negatif: -123Coba ubah: Ubah angka_pos dari 123 menjadi 124, lalu prediksi hasilnya.
07-03 – Mengontrol Lebar dan Presisi Angka Desimal
Instruksi dijalankan dari atas ke bawah; print menampilkan nilai saat instruksi itu dijalankan.
Coba di IDE Unduh Sumberpi = 3.14159265
print(f"Pi (default): {pi}")
# Output: Pi (lebar 10, 2 desimal): 3.14
print(f"Pi (lebar 10, 2 desimal): {pi:10.2f}")
print(f"Pi (2 desimal): {pi:.2f}")
# Output: Pi (notasi ilmiah, 3 desimal): 3.142e+00
print(f"Pi (notasi ilmiah, 3 desimal): {pi:.3e}")
angka_besar_f = 1234567.89
# Output: Angka besar (pemisah ribuan): 1,234,567.89
hasil = f"{angka_besar_f:,.2f}"
print(f"Angka besar (pemisah ribuan): {hasil}")
Hasil yang diharapkan:
Pi (default): 3.14159265
Pi (lebar 10, 2 desimal): 3.14
Pi (2 desimal): 3.14
Pi (notasi ilmiah, 3 desimal): 3.142e+00
Angka besar (pemisah ribuan): 1,234,567.89Coba ubah: Ubah pi dari 3.14159265 menjadi 4.14159265, lalu prediksi hasilnya.
07-04 – Format Angka Lainnya
Instruksi dijalankan dari atas ke bawah; print menampilkan nilai saat instruksi itu dijalankan. Jalankan dengan Python di komputer agar format hasil sama dengan contoh buku.
Unduh Sumberangka_format = 255
print(f"Desimal: {angka_format:d}")
print(f"Biner: {angka_format:b}")
print(f"Oktal: {angka_format:o}")
print(f"Heksadesimal: {angka_format:x}")
nilai_persen = 0.75
print(f"Persentase (default): {nilai_persen:%}")
print(f"Persentase (0 desimal): {nilai_persen:.0%}")
Hasil yang diharapkan:
Desimal: 255
Biner: 11111111
Oktal: 377
Heksadesimal: ff
Persentase (default): 75.000000%
Persentase (0 desimal): 75%Coba ubah: Ubah angka_format dari 255 menjadi 256, lalu prediksi hasilnya.
07-05 – Padding dengan Angka Nol
Instruksi dijalankan dari atas ke bawah; print menampilkan nilai saat instruksi itu dijalankan.
Coba di IDE Unduh Sumbernomor_urut = 42
# Output: Nomor: 00042 (total 5 digit, diisi nol)
print(f"Nomor: {nomor_urut:05d}")
Hasil yang diharapkan:
Nomor: 00042Coba ubah: Ubah nomor_urut dari 42 menjadi 43, lalu prediksi hasilnya.
07-06 – Unicode dan Encoding Karakter
Python 3 menggunakan Unicode secara native untuk string. Artinya, string di Python 3 dapat menyimpan karakter dari bahasa apa pun, seperti Arab, Mandarin, Rusia, termasuk emoji.
Coba di IDE Unduh Sumberteks_unicode = "Halo Dunia! (wave)(world)"
print(teks_unicode)
# Karakter pertama dan code point-nya
print(f"Karakter pertama: {teks_unicode[0]}")
print(f"Code point: {ord(teks_unicode[0])}")
# Huruf ke-5 dan code point-nya
print(f"Huruf: {teks_unicode[5]}")
print(f"Code point: {ord(teks_unicode[5])}")
Hasil yang diharapkan:
Halo Dunia! (wave)(world)
Karakter pertama: H
Code point: 72
Huruf: D
Code point: 68Coba ubah: Ganti isi teks_unicode dengan teks lain dan bandingkan hasilnya.
Studi Kasus
07-07 – Kartu harga yang rapi
Nama diratakan ke kiri dalam lebar delapan karakter, harga ke kanan dalam lebar sepuluh dengan dua digit desimal.
Coba di IDE Unduh Sumberbarang_1 = "Buku"
barang_2 = "Pensil"
harga_1 = 12500.5
harga_2 = 3000
print(f"{barang_1:<8} | {harga_1:>10.2f}")
print(f"{barang_2:<8} | {harga_2:>10.2f}")
Hasil yang diharapkan:
Buku | 12500.50
Pensil | 3000.00Coba ubah: Ganti nama barang dengan nama yang lebih panjang dan amati batas lebar minimum.
Rangkuman
Format mengubah cara nilai ditampilkan, bukan nilai asalnya. str menyimpan teks Unicode; encode menghasilkan bytes dan decode mengembalikan teks dengan encoding yang sesuai.
Cek Pemahaman
Lima pertanyaan ini sama dengan pertanyaan di buku. Periksa jawaban di kuis untuk melihat skor dan pembahasan.
- Format .2f menampilkan …
- Penanda < dalam format string berarti …
- Hasil encode("utf-8") adalah …
- Apa yang diperlukan saat decode?
- Apakah format f-string mengubah nilai asal angka?
Latihan Mandiri
Latihan 07-L01 – Nomor urut
Dasar. Tampilkan angka 7 dengan tiga digit menjadi 007.
Kerjakan di IDE Unduh LatihanHasil yang diharapkan:
007
Lihat Petunjuk
Lebar tiga dengan pengisi nol memakai 03d.
Lihat Solusi
nomor = 7
print(f"{nomor:03d}")
Nol ditambahkan pada tampilan, bukan pada nilai integer.
Coba Solusi di IDEUnduh SolusiLatihan 07-L02 – Harga dua desimal
Penerapan. Tampilkan harga 12500.5 sebagai 12500.50.
Kerjakan di IDE Unduh LatihanHasil yang diharapkan:
12500.50
Lihat Petunjuk
Gunakan .2f.
Lihat Solusi
harga = 12500.5
print(f"{harga:.2f}")
Dua digit pecahan dibuat konsisten.
Coba Solusi di IDEUnduh SolusiLatihan 07-L03 – Teks pulang-pergi
Pengembangan. Encode teks "café" memakai UTF-8, lalu decode kembali dan cetak teks serta hasil perbandingannya dengan teks awal.
Kerjakan di IDE Unduh LatihanHasil yang diharapkan:
café
True
Lihat Petunjuk
Gunakan encoding yang sama pada kedua langkah.
Lihat Solusi
teks = "café"
data = teks.encode("utf-8")
hasil = data.decode("utf-8")
print(hasil)
print(hasil == teks)
Decode dengan UTF-8 mengembalikan teks asal.
Coba Solusi di IDEUnduh SolusiPengembangan
Pengembangan: Memformat Judul Artikel
Prasyarat: kerjakan setelah Bab 13.
Prasyarat: Kerjakan studi kasus dan latihan berikut setelah Bab 13. Di sini kita menggabungkan metode string dengan fungsi, percabangan, perulangan, list, dan dictionary.
Bayangkan kamu memiliki daftar judul artikel yang tidak konsisten formatnya. Kamu ingin membuat fungsi yang:
- Mengubah judul menjadi title case.
- Menghapus spasi di awal atau akhir dan merapikan spasi antarkata.
- Mengganti kata atau frasa tertentu (misalnya, “py” menjadi “Python” dan “scikit learn” menjadi “Scikit-Learn”).
def format_judul_artikel(judul, ganti_kata=None):
if ganti_kata is None:
ganti_kata = {}
kata_kata_judul = judul.strip().title().split()
kata_kata_hasil = []
indeks = 0
while indeks < len(kata_kata_judul):
for kata_lama, kata_baru in ganti_kata.items():
kata_pola = kata_lama.lower().split()
jumlah = len(kata_pola)
potongan = kata_kata_judul[indeks:indeks + jumlah]
cocok = " ".join(potongan).lower() == " ".join(kata_pola)
if jumlah > 0 and cocok:
kata_kata_hasil.append(kata_baru)
indeks += jumlah
break
else:
# Tidak ada kata atau frasa pengganti yang cocok
kata_kata_hasil.append(kata_kata_judul[indeks])
indeks += 1
return " ".join(kata_kata_hasil)
#### Contoh penggunaan:
judul1 = " belajar py dasar untuk pemula "
judul2 = "pengenalan machine learning dengan scikit learn"
#### Dictionary untuk penggantian kata atau frasa
penggantian_baru = {
"py": "Python",
"scikit learn": "Scikit-Learn"
}
print(f"Judul Asli: '{judul1}'")
hasil1 = format_judul_artikel(judul1, penggantian_baru)
print(f"-> Judul Format: '{hasil1}'")
print(f"Judul Asli: '{judul2}'")
hasil2 = format_judul_artikel(judul2, penggantian_baru)
print(f"-> Judul Format: '{hasil2}'")
judul3 = "advanced python programming"
print(f"Judul Asli: '{judul3}'")
hasil3 = format_judul_artikel(judul3, {'python': 'PYTHONTM'})
print(f"-> Judul Format: '{hasil3}'")
Output yang diharapkan:
Judul Asli: ' belajar py dasar untuk pemula '
-> Judul Format: 'Belajar Python Dasar Untuk Pemula'
Judul Asli: 'pengenalan machine learning dengan scikit learn'
-> Judul Format: 'Pengenalan Machine Learning Dengan Scikit-Learn'
Judul Asli: 'advanced python programming'
-> Judul Format: 'Advanced PYTHONTM Programming'
Fungsi ini menggabungkan strip(), title(),
split(), dan join() dengan perulangan dan
percabangan. split() tanpa argumen merapikan pemisah
antarkata. Pada setiap posisi, fungsi membandingkan satu atau beberapa
kata sekaligus tanpa membedakan huruf besar dan kecil. Karena itu, frasa
scikit learn dapat diganti sebagai satu kesatuan, sedangkan
py tidak akan mengganti sebagian kata seperti
python.
Jika pola cocok, hasil pengganti ditambahkan sesuai penulisan di
dictionary dan indeks maju sebanyak kata yang diganti.
break menghentikan pencarian pola pada posisi tersebut.
Blok else milik for berjalan jika tidak ada
pola yang cocok, sehingga kata semula tetap ditambahkan. Jika beberapa
pola cocok pada posisi yang sama, pola yang muncul lebih dahulu di
dictionary dipakai. Contoh ini mencocokkan kata yang dipisahkan spasi;
tanda baca yang menempel pada kata perlu ikut ditulis dalam pola.
Kegiatan Tambahan
Validator Email Sederhana: Buat fungsi
cek_email(email)yang menerima string email. Fungsi ini harus mengembalikanTruejika email dianggap “cukup valid”,Falsesebaliknya. Kriteria sederhana:- Mengandung satu karakter
@. - Karakter
@bukan karakter pertama atau terakhir. - Setelah
@, harus ada minimal satu titik (.). - Titik (
.) setelah@bukan karakter pertama atau terakhir setelah@. - Tidak boleh ada spasi. Contoh:
cek_email("[email protected]")->Truecek_email("user@example")->Falsecek_email("@example.com")->Falsecek_email("user example.com")->False
- Mengandung satu karakter
Hitung Frekuensi Kata: Buat fungsi
hitung_kata(teks)yang menerima sebuah string panjang. Fungsi ini harus mengembalikan dictionary di mana kuncinya adalah kata (dalam huruf kecil dan tanpa tanda baca di ujungnya) dan nilainya adalah frekuensi kemunculan kata tersebut. Tips:- Ubah semua teks menjadi huruf kecil.
- Gunakan
split()untuk mendapatkan kata-kata. - Untuk setiap kata, hilangkan tanda baca umum (misalnya:
.,,,!,?) dari awal/akhir kata. Metodestrip()bisa menerima argumen karakter yang ingin dihilangkan. Contoh:kata.strip(".,!?").
Pembuat Akronim: Buat fungsi
buat_akronim(frasa)yang mengambil frasa dan mengembalikan akronimnya dalam huruf besar.Contoh:
buat_akronim("Organisasi Kesehatan Dunia")->"OKD"buat_akronim("ilmu pengetahuan alam")->"IPA"
Pemeriksa Palindrom (Lanjutan): Buat fungsi
is_palindrom_lanjutan(teks)yang memeriksa apakah sebuah teks adalah palindrom, dengan mengabaikan spasi, tanda baca, dan kapitalisasi.Contoh:
is_palindrom_lanjutan("A man, a plan, a canal: Panama")->Trueis_palindrom_lanjutan("Kasur ini rusak.")->True
Tabel Pengingat Tambahan
Berikut adalah rangkuman operasi dan metode string yang paling sering digunakan, disajikan dalam format tabel untuk kemudahan referensi:
1. Pembuatan String
| Cara Pembuatan & Deskripsi | Contoh & Output |
|---|---|
| s = “teks” atau s = ‘teks’ Membuat string literal. |
s = "halo"; print(f"'{s}'")Output: 'halo' |
| s = “““teks multi baris”““ atau s = ’‘’teks
multi baris’’’ Membuat string yang mencakup beberapa baris. |
s = """baris1\nbaris2"""; print(s.splitlines())Output: ['baris1', 'baris2'] |
| s = str(objek_lain) Mengkonversi objek lain menjadi string. |
s = str(123); print(f"'{s}'")Output: '123' |
2. Operasi Dasar
| Operasi & Deskripsi | Contoh & Output |
|---|---|
| len(s) Mengembalikan panjang (jumlah karakter) string. |
s = "abc"; print(s.__len__())Output: 3 |
| s1 + s2 Penggabungan (concatenation) dua string. |
s1 = "a"; s2 = "b"; print(f"'{s1 + s2}'")Output: 'ab' |
| s * n Pengulangan string sebanyak n kali. |
s = "a"; print(f"'{s * 3}'")Output: 'aaa' |
| karakter in s Memeriksa keberadaan substring (True/False). |
s = "abc"; print("a" in s)Output: True |
| s[i] Indexing (mengakses karakter ke-i). |
s = "abc"; print(f"'{s[0]}'")Output: 'a' |
| s[start:stop:step] Slicing (mengambil potongan string). |
s = "abcde"; print(f"'{s[1:4]}'")Output: 'bcd' |
3. Metode Kapitalisasi (Case)
| Metode & Deskripsi | Contoh & Output |
|---|---|
| s.lower() Mengubah semua huruf menjadi huruf kecil. |
s = "HeLLo"; print(f"'{s.lower()}'")Output: 'hello' |
| s.upper() Mengubah semua huruf menjadi huruf besar. |
s = "HeLLo"; print(f"'{s.upper()}'")Output: 'HELLO' |
| s.capitalize() Kapitalisasi huruf pertama string, sisanya kecil. |
s = "hELLo WORLD"; print(f"'{s.capitalize()}'")Output: 'Hello world' |
| s.title() Kapitalisasi huruf pertama setiap kata. |
s = "hello world"; print(f"'{s.title()}'")Output: 'Hello World' |
| s.swapcase() Menukar huruf besar jadi kecil dan sebaliknya. |
s = "PyThOn"; print(f"'{s.swapcase()}'")Output: 'pYtHoN' |
4. Metode Penghapusan Spasi & Karakter (Trimming)
| Metode & Parameter & Deskripsi | Contoh & Output |
|---|---|
| s.strip() Hapus spasi putih di awal dan akhir |
s = " halo "; print(f"'{s.strip()}'")Output: 'halo' |
| s.strip(chars) Hapus karakter chars di awal dan akhir |
s = "xxhaloxx"; print(f"'{s.strip('x')}'")Output: 'halo' |
| s.lstrip() Hapus spasi putih di awal (kiri) |
s = " halo "; print(f"'{s.lstrip()}'")Output: 'halo ' |
| s.lstrip(chars) Hapus karakter chars di awal |
s = "xxhaloxx"; print(f"'{s.lstrip(\"x\")}'")Output: 'haloxx' |
| s.rstrip() Hapus spasi putih di akhir (kanan) |
s = " halo "; print(f"'{s.rstrip()}'")Output: ' halo' |
| s.rstrip(chars) Hapus karakter chars di akhir |
s = "xxhaloxx"; print(f"'{s.rstrip(\"x\")}'")Output: 'xxhalo' |
5. Metode Pencarian & Penggantian
| Metode & Parameter & Deskripsi | Contoh & Output |
|---|---|
| s.find(sub) Posisi pertama sub
(atau -1 jika tidak ada). |
s = "abcabc"; print(s.find("b"))Output: 1 |
| s.rfind(sub) Posisi terakhir sub
(atau -1 jika tidak ada). |
s = "abcabc"; print(s.rfind("b"))Output: 4 |
| s.index(sub) Sama seperti find,
tapi error jika sub tidak ada. |
s = "abc"; print(s.index("b"))Output: 1 |
| s.rindex(sub) Sama seperti rfind,
tapi error jika sub tidak ada. |
s = "abcabc"; print(s.rindex("b"))Output: 4 |
| s.count(sub) Menghitung berapa kali sub muncul dalam s. |
s = "banana"; print(s.count("na"))Output: 2 |
| s.replace(old, new, count) Mengganti count (opsional) kemunculan old dengan
new. |
s = "aa aa"; print(f"'{s.replace(\"aa\", \"b\", 1)}'")Output: 'b aa' |
6. Metode Pemecahan & Penggabungan
| Metode & Deskripsi | Contoh & Output |
|---|---|
| s.split(sep=None) Memecah s
menjadi list berdasarkan sep. Default sep
adalah spasi. |
s = "a b c"; print(s.split())Output: ['a', 'b', 'c'] |
| s.rsplit(sep=None, maxsplit) Sama seperti split, tapi dari kanan, dengan maxsplit
opsional. |
s = "a-b-c"; print(s.rsplit("-", 1))Output: ['a-b', 'c'] |
| s.splitlines() Memecah s menjadi
list berdasarkan baris baru (\\n, \\r\\n,
dll). |
s = "baris1\\nbaris2"; print(s.splitlines())Output: ['baris1', 'baris2'] |
| sep.join(iterable) Menggabungkan elemen iterable (list/tuple string) dengan sep. |
L = ['a','b']; print(f"'{"-".join(L)}'")Output: 'a-b' |
7. Metode Pengecekan Kondisi (Boolean)
| Metode & Deskripsi | Contoh & Output |
|---|---|
s.startswith(prefix)True jika
s dimulai dengan prefix. |
s = "Python"; print(s.startswith("Py"))Output: True |
s.endswith(suffix)True jika
s diakhiri dengan suffix. |
s = "file.txt"; print(s.endswith(".txt"))Output: True |
s.isalpha()True jika semua
karakter huruf & tidak kosong. |
s = "abc"; print(s.isalpha())Output: True |
s.isdigit()True jika semua
karakter digit & tidak kosong. |
s = "123"; print(s.isdigit())Output: True |
s.isnumeric()True jika semua
karakter numerik (Unicode) & tidak kosong. |
s = "123"; print(s.isnumeric())Output: True |
s.isalnum()True jika semua
karakter alfanumerik & tidak kosong. |
s = "Py3"; print(s.isalnum())Output: True |
s.islower()True jika semua huruf
adalah huruf kecil & ada min. 1 huruf. |
s = "py"; print(s.islower())Output: True |
s.isupper()True jika semua huruf
adalah huruf besar & ada min. 1 huruf. |
s = "PY"; print(s.isupper())Output: True |
s.isspace()True jika string hanya
berisi karakter spasi putih & tidak kosong. |
s = " "; print(s.isspace())Output: True |
s.istitle()True jika string dalam
format title case & ada min. 1 huruf. |
s = "Judul Ini"; print(s.istitle())Output: True |
8. Format String (f-string)
| Sintaks & Deskripsi | Contoh & Output |
|---|---|
| f”Teks dengan {variabel} dan {ekspresi}“ Menyisipkan variabel dan ekspresi Python ke dalam string. |
nama="A"; print(f"'Halo {nama}'")Output: 'Halo A' |
| f”{nilai:specifier}“ Menggunakan format specifier untuk mengatur tampilan nilai. |
print(f"{3.1415:.2f}")Output: 3.14 |
| f”{teks:<10}“ Rata kiri dalam 10 karakter. |
print(f"'{ 'Hi':<5 }'")Output: 'Hi ' |
| f”{teks:>10}“ Rata kanan dalam 10 karakter. |
print(f"'{ 'Hi':>5 }'")Output: ' Hi' |
| f”{angka:03d}“ Angka integer, total 3 digit, diisi nol di depan jika perlu. |
print(f"{5:03d}")Output: 005 |
Referensi dan Materi Pendamping
- f-string di Python: Format String Modern dengan Contoh
- str.encode() di Python: String ke Bytes
- str.ljust() di Python: Rata Kiri
- str.rjust() di Python: Rata Kanan
Langkah Selanjutnya
Bab 8 membahas Percabangan dengan if, elif, dan else. 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.
