Idenya
Banyak sekali pekerjaan seorang data analyst berupa teks: nama, kota, kode produk, alamat email, pesan dalam laporan. Di Python, teks adalah string (str), yaitu deretan karakter di antara tanda kutip. Modul ini membahas cara membangun string, mengambil potongan darinya, dan yang paling berguna, cara menyisipkan nilai ke dalam kalimat dengan rapi memakai f-string.
Tanda kutip, dan kapan memakai yang mana
Python perlu tahu di mana sebuah teks dimulai dan berakhir, dan tanda kutip adalah cara kamu memberitahunya. Kutip tunggal dan kutip ganda menghasilkan jenis string yang persis sama, jadi pilihannya hanya penting kalau teksnya sendiri mengandung tanda kutip. Kalau nama pelanggan punya apostrof, seperti "Ayu's order", membungkusnya dengan kutip tunggal akan mengakhiri string tepat setelah Ayu. Jadi pilih jenis yang tidak bentrok dengan teks di dalamnya:
shop = "Toko Kita"
message = "Ayu's order has shipped"
html = '<p class="note">Hi</p>'
print(message)
print(html)
Ayu's order has shipped
<p class="note">Hi</p>
Kadang mengganti tanda kutip saja tidak cukup, karena teksnya mengandung kedua jenis, atau kamu butuh sesuatu yang tidak mudah diketik, seperti pergantian baris di tengah pesan. Untuk kasus seperti itu ada escape sequence: garis miring terbalik diikuti sebuah karakter, yang bersama-sama mewakili satu karakter khusus.
| Escape | Artinya |
|---|---|
\n | baris baru |
\t | tab |
\' atau \" | tanda kutip yang tidak mengakhiri string |
\\ | satu garis miring terbalik |
print("Line one\nLine two")
print("Name:\tAyu")
Line one
Line two
Name: Ayu
Untuk teks yang terdiri dari beberapa baris, pakai kutip tiga, yang mempertahankan pergantian baris persis seperti yang kamu ketik:
note = """Dear customer,
Your order is on its way.
Toko Kita"""
print(note)
Dear customer,
Your order is on its way.
Toko Kita
Menggabungkan string
Sering kali potongan-potongan sebuah teks tersimpan di variabel yang berbeda, seperti nama depan dan nama belakang pelanggan, dan kamu perlu menyatukannya. + menyambung string dari ujung ke ujung (ini disebut concatenation), dan * mengulang string beberapa kali, yang praktis untuk menggambar garis pemisah di laporan yang dicetak:
first = "Ayu"
last = "Lestari"
full_name = first + " " + last
print(full_name)
print("-" * 20)
print(len(full_name))
Ayu Lestari
--------------------
11
len() memberikan panjang string: jumlah karakternya, termasuk spasi.
+ hanya bisa menyambung string dengan string. Mencampurnya dengan angka adalah error yang sangat umum:
items = 3
print("Items: " + items)
TypeError: can only concatenate str (not "int") to str
Kamu bisa memperbaikinya dengan str(items), yang mengonversi angka menjadi teks. Tapi ada cara yang jauh lebih baik, dibahas berikutnya.
f-string: nilai di dalam teks
f-string adalah string dengan huruf f tepat sebelum tanda kutip pembuka. Di dalamnya, apa pun yang ada di antara kurung kurawal { } dihitung sebagai kode Python lalu disisipkan ke dalam teks:
name = "Ayu"
items = 3
total = 285000
print(f"{name} bought {items} items for Rp {total}")
Ayu bought 3 items for Rp 285000
Tanpa +, tanpa str(), tanpa spasi yang terlupa. Kurung kurawal bisa berisi ekspresi apa pun, bukan hanya variabel:
price = 95000
quantity = 3
print(f"Subtotal: {price * quantity}")
print(f"Name in capitals: {name.upper()}")
Subtotal: 285000
Name in capitals: AYU
Memformat angka
Setelah ekspresi, titik dua : memulai format specification yang mengatur tampilan nilainya. Empat ini sudah mencakup sebagian besar kebutuhan laporan:
total = 1310000
rate = 0.112
average = 262000 / 3
print(f"{total:,}") # pemisah ribuan
print(f"{average:.2f}") # 2 angka desimal
print(f"{rate:.1%}") # sebagai persentase, 1 desimal
print(f"[{'Kopi':<8}]") # rata kiri dalam 8 karakter
print(f"[{'Kopi':>8}]") # rata kanan dalam 8 karakter
1,310,000
87333.33
11.2%
[Kopi ]
[ Kopi]
Kamu juga bisa menggabungkannya: f"{average:,.2f}" menghasilkan 87,333.33. Perataan berguna untuk mencetak tabel teks yang rapi, seperti yang akan kamu lihat di soal-soal.
Di dalam f-string, pakai jenis tanda kutip yang lain untuk string di dalam kurung kurawal, seperti f"[{'Kopi':<8}]" di atas. Memakai tanda kutip yang sama akan mengakhiri f-string terlalu cepat.
Indexing dan slicing
Kode produk, nomor pesanan, dan tanggal sering memadatkan beberapa informasi dalam satu string. Di TK-2024-0042, dua huruf pertama adalah tokonya, bagian tengah adalah tahunnya, dan bagian akhir adalah nomor pesanannya. Untuk mengambil potongan-potongan itu, kamu perlu bisa menunjuk karakter tertentu.
String adalah sequence (deretan) karakter, jadi setiap karakter punya posisi, yang disebut index. Satu hal yang perlu dibiasakan: Python mulai menghitung dari 0, bukan 1:
code = "TK-2024-0042"
print(code[0]) # karakter pertama
print(code[3]) # karakter keempat
print(code[-1]) # karakter terakhir
print(code[-4:]) # empat karakter terakhir
print(code[3:7]) # dari index 3 sampai (tidak termasuk) 7
T
2
2
0042
2024
code[0]adalah karakter pertama. Index negatif menghitung dari belakang:-1adalah yang terakhir.- Slice
code[start:stop]memberikan karakter daristartsampai, tapi tidak termasuk,stop. Itu sebabnyacode[3:7]panjangnya empat karakter: 7 − 3 = 4. - Hilangkan
startuntuk mulai dari awal, ataustopuntuk lanjut sampai akhir:code[:2]adalah"TK",code[8:]adalah"0042".
String bersifat immutable (tidak bisa diubah): kamu tidak bisa mengganti sebuah karakter di tempatnya. code[0] = "X" memunculkan TypeError. Sebagai gantinya, bangun string baru: "X" + code[1:].
Mengapa ini penting untuk kode bersih
f-string adalah cara modern dan mudah dibaca untuk membangun teks di Python. Bandingkan "Total: " + str(total) + " (" + str(items) + " items)" dengan f"Total: {total} ({items} items)": yang kedua langsung memperlihatkan seperti apa output-nya. Kode bersih membuat hasilnya terlihat dari source code, dan f-string melakukan persis itu.
Rangkuman
- String memakai kutip tunggal, ganda, atau tiga. Escape seperti
\nmenambahkan karakter khusus. +menyambung string,*mengulanginya,len()menghitung karakter. Kamu tidak bisa memakai+pada string dan angka.- f-string:
f"Hello {name}"menaruh nilai (atau ekspresi apa pun) ke dalam teks. - Format spec:
{x:,}pemisah ribuan,{x:.2f}desimal,{x:.1%}persentase,{x:<10}/{x:>10}perataan. - Index mulai dari 0, index negatif dari belakang.
s[start:stop]memotong sampai tapi tidak termasukstop. - String bersifat immutable; kamu membangun string baru alih-alih mengubahnya.