Ini bagian keempat dari seri Belajar Python Dasar. Di
Bagian 03 kita berkenalan dengan str
sebagai salah satu dari empat tipe. Hari ini kita menggarapnya.
Kenapa teks dapat jatah satu bagian sendiri? Karena hampir semua data yang Anda temui di pekerjaan datang sebagai teks, dan hampir semuanya berantakan. Nama yang ditulis dengan huruf besar semua, spasi nyasar di ujung, nama unit yang berbeda di tiap berkas padahal maksudnya sama.
Di akhir tulisan ini ada latihan yang mungkin pernah Anda kerjakan manual.
Tanda kutip, dan masalah tanda petik satu
Di Python, teks boleh diapit kutip ganda atau kutip tunggal. Keduanya sama saja.
print("Kantor Gubernur Kalbar")
print('Kantor Gubernur Kalbar')Pilihannya jadi penting kalau teks Anda mengandung tanda kutip.
print('Dia bilang "halo"')Dia bilang "halo"Kutip tunggal di luar, kutip ganda di dalam. Kalau dibalik, Python akan mengira teksnya selesai di kutip kedua lalu bingung dengan sisanya.
Hal yang sama kena pada apostrof, dan ini sering muncul di nama-nama kita.
print('Pondok Al-Qur'an')SyntaxError: unterminated string literalApostrof di tengah kata dianggap kutip penutup. Pakai kutip ganda, beres:
print("Pondok Al-Qur'an")Pondok Al-Qur'anUntuk teks beberapa baris, pakai tiga kutip.
alamat = """Jalan Ahmad Yani
Pontianak"""
print(alamat)Jalan Ahmad Yani
PontianakKebiasaan saya: pakai kutip ganda untuk semuanya, kecuali kalau di dalamnya ada kutip ganda. Yang penting konsisten.
Menggabung teks dengan f-string
Di Bagian 03 kita menyambung teks dengan +, dan harus membungkus angka dengan str() dulu.
Ada cara yang jauh lebih enak.
nama = "Dinas Pendidikan"
jumlah = 45
print(f"{nama} punya {jumlah} pegawai")Dinas Pendidikan punya 45 pegawaiHuruf f sebelum tanda kutip itu kuncinya. Dengan f di depan, apa pun yang Anda tulis di
dalam kurung kurawal akan diganti dengan isinya. Angka tidak perlu diubah jadi teks lebih
dulu — Python mengurusnya sendiri.
Di dalam kurung kurawal boleh ada hitungan, dan boleh diatur jumlah angka di belakang koma.
anggaran = 12.5
print(f"Per pegawai: {anggaran / jumlah:.3f} miliar")Per pegawai: 0.278 miliarTanda :.3f artinya tampilkan sebagai desimal dengan tiga angka di belakang koma. Ini
mengatasi masalah 0.30000000000000004 yang kita temui di Bagian 03.
Mulai sekarang, pakai f-string. Cara + tetap jalan, tapi lebih panjang dan lebih mudah
salah.
Mengubah besar-kecil huruf
Empat perintah yang paling sering dipakai.
teks = "dinas pendidikan"
print(teks.upper())
print(teks.title())
print(teks.capitalize())
print("DINAS PENDIDIKAN".lower())DINAS PENDIDIKAN
Dinas Pendidikan
Dinas pendidikan
dinas pendidikantitle() mengawali tiap kata dengan huruf besar. capitalize() cuma huruf pertama kalimat.
Sekarang bagian yang menjebak banyak pemula. Coba lihat isi teks setelah semua itu
dijalankan:
print(teks)dinas pendidikanMasih huruf kecil semua. Perintah-perintah ini tidak mengubah teks aslinya. Mereka membuat teks baru dan menyerahkannya kepada Anda. Kalau hasilnya ingin disimpan, simpan:
teks = teks.upper()Ini berlaku untuk semua perintah teks di tulisan ini. Teks di Python bersifat tetap; yang bisa Anda lakukan adalah membuat versi barunya.
Membuang spasi yang tidak kelihatan
Spasi di ujung teks adalah sumber bug yang paling menyebalkan, karena tidak terlihat di layar.
kotor = " Dinas Pendidikan "
print(kotor.strip())strip() membuang spasi di awal dan akhir. Ada juga lstrip() untuk kiri saja dan
rstrip() untuk kanan saja, tapi strip() yang paling sering dipakai.
Satu hal yang strip() tidak urus: spasi berlebih di tengah.
ganda = "Dinas Pendidikan"
print(ganda.strip())Dinas PendidikanTetap tiga spasi di tengah. Untuk yang ini triknya memecah lalu menyatukan lagi — kita bahas dua seksi lagi.
Kalau ingin melihat spasi yang tersembunyi, bungkus dengan repr():
print(repr(" Dinas Pendidikan "))' Dinas Pendidikan 'Sekarang spasinya terlihat. Perintah ini berguna waktu Anda yakin dua teks sama tapi Python bersikeras berbeda.
Mengambil sebagian teks
Tiap huruf punya nomor urut, dimulai dari nol.
unit = "Dinas Pendidikan"
print(len(unit))
print(unit[0])
print(unit[-1])16
D
nlen() menghitung jumlah karakter. unit[0] mengambil huruf pertama. Nomor minus menghitung
dari belakang, jadi unit[-1] huruf terakhir.
Untuk mengambil sepotong, pakai titik dua.
print(unit[0:5])
print(unit[6:])Dinas
PendidikanBacanya: dari nomor 0 sampai sebelum nomor 5. Batas kanannya tidak ikut. Ini sering bikin salah hitung di awal, dan lama-lama terbiasa.
Kalau batasnya dikosongkan, berarti dari awal atau sampai akhir.
Mencari dan mengganti
unit = "Dinas Pendidikan"
print(unit.replace("Dinas", "Din."))
print("Pendidikan" in unit)
print(unit.startswith("Dinas"))Din. Pendidikan
True
Truereplace() mengganti semua kemunculan. in memeriksa apakah sepotong teks ada di dalamnya,
dan hasilnya bool — tipe yang kita kenal di Bagian 03. Ada juga endswith() yang memeriksa
bagian akhir.
Kalau Anda butuh posisinya, bukan sekadar ada atau tidak:
print(unit.find("Pendidikan"))
print(unit.find("Kesehatan"))6
-1-1 artinya tidak ketemu.
Memecah dan menyatukan
Dua perintah ini pasangan, dan keduanya akan sering Anda pakai nanti waktu membaca berkas CSV di Bagian 14.
baris = "Pontianak,Singkawang,Sintang"
print(baris.split(","))['Pontianak', 'Singkawang', 'Sintang']split() memotong teks di tiap tanda yang Anda sebut, hasilnya daftar. Kurung siku itu
list, dan kita bahas tuntas di Bagian 07.
Kebalikannya join():
kota = ["Pontianak", "Singkawang", "Sintang"]
print(" - ".join(kota))Pontianak - Singkawang - SintangPerhatikan urutan penulisannya, karena ini sering tertukar: yang di depan adalah pemisahnya, dan daftarnya ditaruh di dalam kurung.
Sekarang trik yang saya janjikan tadi. Kalau split() dipanggil tanpa tanda apa pun di
dalamnya, ia memotong di setiap kelompok spasi dan membuang yang kosong.
ganda = "Dinas Pendidikan"
print(" ".join(ganda.split()))Dinas PendidikanSatu baris itu menyelesaikan spasi di awal, di akhir, dan berapa pun jumlahnya di tengah.
Latihan: lima gaya, satu bentuk
Ini situasi yang dijanjikan di Bagian 03. Lima orang mengisi formulir, dan nama unit yang sama ditulis dengan lima cara:
daftar = [
" dinas pendidikan ",
"DINAS PENDIDIKAN",
"Dinas Pendidikan",
"dinas Pendidikan ",
"Dinas Pendidikan",
]Lima-limanya maksudnya satu unit yang sama. Tapi bagi komputer, kelimanya berbeda — jadi kalau Anda merekap jumlah per unit, hasilnya lima baris, bukan satu.
Perapiannya cukup satu baris:
nama = " dinas PENDIDIKAN "
rapi = " ".join(nama.split()).title()
print(rapi)Dinas PendidikanBacanya dari dalam ke luar. nama.split() memecah di tiap kelompok spasi dan membuang yang
kosong. " ".join(...) menyatukannya kembali dengan satu spasi. .title() menyeragamkan
huruf besarnya.
Tugas Anda: jalankan baris itu untuk kelima isi daftar di atas, satu per satu, dan
pastikan kelimanya menghasilkan Dinas Pendidikan yang sama persis.
Untuk sekarang salin-tempel lima kali tidak apa-apa. Di Bagian 06 kita belajar perulangan, dan pekerjaan ini selesai dalam tiga baris berapa pun banyaknya data.
Satu peringatan soal title(). Coba ini:
print("dinas pendidikan dan kebudayaan".title())Dinas Pendidikan Dan KebudayaanKata dan ikut berhuruf besar, padahal menurut kaidah bahasa Indonesia seharusnya tidak. Python tidak tahu kata sambung. Untuk nama unit yang mengandung dan, di, atau untuk, Anda masih perlu memperbaikinya sendiri — dan setelah Bagian 08 kita punya cara yang lebih rapi untuk itu.
Kalau tidak jalan
AttributeError: 'int' object has no attribute 'upper'
Anda memakai perintah teks pada angka. Perintah seperti upper() dan strip() cuma ada di
str. Cek dulu dengan type().
AttributeError: 'str' object has no attribute 'Upper'. Did you mean: 'upper'?
Huruf besar-kecilnya salah. Semua perintah teks ditulis huruf kecil. Python bahkan menebakkan maksud Anda di pesan errornya.
TypeError: 'str' object does not support item assignment
Anda mencoba mengganti satu huruf dengan teks[0] = "X". Tidak bisa — teks bersifat tetap.
Buat teks baru, misalnya dengan replace().
IndexError: string index out of range
Nomor urutnya melewati panjang teks. Ingat penomorannya mulai dari nol, jadi huruf terakhir dari teks 16 karakter ada di nomor 15, bukan 16.
Teksnya sudah dirapikan tapi tidak berubah
Hasilnya tidak disimpan. teks.strip() saja tidak cukup; tulis teks = teks.strip().
Berikutnya
Di Bagian 05 kita mengajari program mengambil keputusan dengan if, elif, dan else.
Di situ bool yang kita temui di Bagian 03 dan perbandingan seperti in tadi mulai benar-benar
terpakai. Latihannya menandai baris yang nilainya melewati batas.
Tautannya muncul di halaman silabus begitu terbit.
Komentar
Berkomentar memerlukan akun GitHub. Tulisan Anda tersimpan sebagai diskusi publik di repositori situs ini.