Ekskul CSSE · SMAS St. John — BINUSPertemuan 13
13
Data · Sesi 13 — String Manipulation
String
Manipulation

Setiap teks yang kamu ketik — nama, caption, pesan — adalah data yang bisa dipotong, dibersihkan, dan dicari. Hari ini teks patuh padamu.

TUJUAN 01
Indexing & slicing string — plus sifat immutable-nya
TUJUAN 02
Method upper · lower · strip · replace · split · join
TUJUAN 03
Rangkai f-string & cek isi dengan in / find / count
Target hari ini — teks jadi patuh

Hari ini input kotor tunduk padamu

Tujuan Pembelajaran
  • Mengenal string = deretan karakter — indexing teks[0], slicing teks[1:4]
  • Memakai method upper · lower · strip · replace · split · join + len()
  • Menggabungkan teks dengan f-string & concatenation
  • Mengecek isi dengan in, find(), count()
indexingslicingmethod stringf-stringimmutable

* immutable = tidak bisa diubah langsung — method string selalu mengembalikan string BARU. Ini bintang utama hari ini, kita bedah khusus.

"
Kenapa peduli?

Input user selalu kotor:
spasi diam-diam, huruf kacau.
String tools = pembersihnya.

Analogi hari ini

String = rangkaian gerbong kereta — tiap huruf satu gerbong, tiap gerbong bernomor.

Ambil gerbong ke-3, potong rangkaiannya, ganti isi gerbong — semua bisa.

Sebelum gas — minggu lalu kamu sudah pegang apa?

Rekap Sesi 12 · Functions & Modular

Yang sudah kamu pegang
  • def — membungkus instruksi jadi fungsi bernama
  • parameter & return — fungsi menerima bahan, mengembalikan hasil
  • return vs print() — satu memberi nilai, satu hanya menampilkan

Kabar baik: method string hari ini persis fungsi — cuma nempel di teks: teks.upper() = fungsi yang bekerja pada teks.

Kuis kilat — coba jawab dulu!
AKalau " budi " diketik user dengan spasi diam-diam — bagaimana membuatnya bersih?
jawaban di slide berikutnya Spasi itu tak terlihat tapi terhitung — len(" budi ") = 8, bukan 4. Ada "gunting khusus" untuk itu, dan kamu akan memakainya sepanjang karier.
!

Posisimu: 13 dari 17 — 76% perjalanan. Dua proyek menanti!

Sebelum mengubah teks — pahami dulu isinya apa

String = rangkaian gerbong karakter

Code — tiap huruf punya nomor, mulai dari 0
teks = "BINUS"
print(teks[0])      # B — gerbong pertama
print(teks[4])      # S — gerbong keempat
print(teks[-1])     # S — hitung dari belakang!
print(len(teks))    # 5 — jumlah gerbong
Cara membacanya
  • teks[0] — gerbong pertama, bukan "nomor 1" (Python mulai dari 0)
  • teks[-1] — hitung mundur dari belakang: -1 terakhir, -2 sebelumnya
  • len(teks) — hitung isi rangkaian, spasi juga dihitung!
Peta gerbong — "BINUS"
0:B 1:I 2:N 3:U 4:S
-5 -4 -3 -2 -1
B
S
S
5

Output dari 4 baris print() di kiri — urut: [0], [4], [-1], len.

→

Sama dengan list di Sesi 11 — string juga deretan bernomor. Kamu sudah tahu polanya!

Satu gerbong itu lewat — bagaimana ambil SEKALIAN banyak?

Slicing — potong rangkaiannya

Code — [mulai : berhenti]
teks = "BINUS International"
print(teks[0:5])    # BINUS
print(teks[6:10])   # Inte
print(teks[6:])      # International
print(teks[-3:])     # ion — 3 terakhir
Aturan emas slicing

[0:5] = ambil indeks 0,1,2,3,4 — gerbong ke-5 tidak ikut.
Kiri termasuk, kanan eksklusif — hafal ini, 90% salah slicing selesai.

Output
BINUS
Inte
International
ion

Bolong satu sisi? Boleh! teks[6:] = dari indeks 6 sampai habis. teks[:5] = dari awal sampai sebelum 5.

?

Tebak dulu: "Python"[1:4] hasilnya apa? Jangan run dulu — tulis tebakanmu, baru buktikan di praktik.

Mau ganti isi gerbong? Masalahnya di sini

String itu immutable — tidak bisa diubah langsung

Code — perbandingan before/after
kata = "budi"
# kata[0] = "B"      # TypeError! string immutable

# bedakan dengan list (Sesi 11) — list BISA:
nilai = [70, 80]
nilai[0] = 95        # sah — nilai jadi [95, 80]

# cara yang benar untuk string: bikin BARU
kata = "B" + kata[1:]
print(kata)          # Budi
Before — yang gagal
kata[0] = "B"
→ TypeError: 'str' object
  does not support item
  assignment
After — yang benar
kata = "B" + kata[1:]
→ "Budi" # rangkaian baru
!

Analogi: fotokopi dulu, coret di salinannya — aslinya tetap. Method string juga begitu (slide berikutnya).

Sekarang senjata utamanya — 3 pembersih pertama

upper · lower · strip

Code — semua mengembalikan string BARU
nama = "  budi Santoso  "
print(nama.strip())       # budi Santoso
print(nama.upper())       #   BUDI SANTOSO  
print(nama.lower())       #   budi santoso  
print(nama)               # aslinya MASIH kotor!
Apa tugas masing-masing
strip()potong spasi di ujung kiri-kanan saja
upper()semua huruf jadi KAPITAL
lower()semua huruf jadi kecil
Output — perhatikan baris terakhir!
budi Santoso
  BUDI SANTOSO  
  budi santoso  
  budi Santoso   ← asli!

upper() mengembalikan versi kapital — tapi nama tidak berubah. Hasilnya dilempar kalau tidak disimpan!

→

Ritual wajib input text mulai hari ini: input().strip() — biarkan spasi tak terlihat tidak ikut kacau.

Ganti kata & rapikan kapital — dua jurus pamungkas

replace & title — ganti & rapikan

Code — ganti kata, kapitalisasi nama
judul = "aku suka kopi"
print(judul.replace("kopi", "teh"))
# aku suka teh

nama = "budi santoso"
print(nama.title())
# Budi Santoso — tiap kata diawali kapital

print(judul)   # asli: "aku suka kopi"
Bentuk pemanggilan

replace(lama, baru) — dua bahan dalam kurung. title() — kurung kosong, dia tahu tugasnya.

Output
aku suka teh
Budi Santoso
aku suka kopi

Baris ketiga: judul masih "aku suka kopi" — replace mengembalikan string baru, aslinya aman. Immutable lagi!

Chaining — dirangkai jadi satu
" budi santoso".strip().title()
→ "Budi Santoso"

Urutan penting: bersihkan dulu, baru rapikan — hasil kiri jadi bahan kanan.

Giliran kamu — teks menunggu dibersihkan

Tugas 1 · Transformasi teks

Kerjakan berurutan — 3 level
  1. Teriak semua — cetak "jangan lupa PR" jadi huruf kapital semua (satu method!). Simpan hasilnya ke variabel sebelum cetak.
  2. Bisik semua — variabel yang sama jadi huruf kecil semua, simpan ke variabel lain.
  3. Bedah kalimat — dari kalimat, potong ambil kata pertama dan 3 huruf terakhir pakai slicing, cetak keduanya.
Kerangka mulai
kalimat = "python itu seru"
teriak = kalimat.upper()
print(teriak) # PYTHON ITU SERU
Output yang harus muncul
PYTHON ITU SERU
python itu seru
python
eru

Baris 3 = kata pertama [0:6] · baris 4 = 3 huruf terakhir [-3:].

⏱

Waktu: 10 menit. Selesai duluan? Coba cetak len(kalimat) — lalu jawab: apa bedanya len(" a b") dengan 3?

Kalimat panjang susah diatur — kalau dipecah gimana?

split & join — gunting & lem

Code — string menjadi list, lalu kembali
kalimat = "belajar python itu seru"
kata = kalimat.split()
print(kata)
# ['belajar', 'python', 'itu', 'seru']

print(kata[0])           # belajar
print("-".join(kata))
# belajar-python-itu-seru
print(len(kata))         # 4 kata
Output
['belajar', 'python', 'itu', 'seru']
belajar
belajar-python-itu-seru
4
SPLIT — gunting
str → list
JOIN — lem
list → str

Sudah jalan di list Sesi 11 — split() tanpa argumen otomatis rapikan spasi ganda.

→

Ini jembatan dua dunia: teks ↔ list. Kalau butuh hitung kata — gunting dulu, hitung len()-nya.

Menyambung teks + angka — jangan bikin crash

f-string — cara modern merangkai

Code — huruf f di depan, variabel di {kurung}
nama = "Kevin"
umur = 16
print(f"Halo {nama}, umur {umur}")
# Halo Kevin, umur 16

print(f"Tahun depan: {umur + 1}")
# Tahun depan: 17 — bisa hitung di dalam!

# cara lama yang error:
# print("Umur: " + umur)   # TypeError!
# teks + angka tidak bisa di +
Output
Halo Kevin, umur 16
Tahun depan: 17

Tanpa huruf f, {nama} tercetak apa adanya — bukan isinya. Satu huruf kecil, efek besar.

Tiga cara gabung teks — kapan pakai apa
f-stringraja — bisa variabel + ekspresi
"a" + "b"concatenation — teks dengan teks saja
print(a, b)koma — jembatan aman tipe campur
Level up — gabungkan semua senjata tadi

Tugas 2 · Data kotor jadi rapi

Kerjakan berurutan — 2 level
  1. Hitung kata — dari berita = "eksul coding st john buka pendaftaran": pecah dengan split(), cetak jumlah katanya, lalu gabung lagi dengan "-".
  2. Cek isi berita — cek "coding" ada atau tidak (in), di posisi berapa (find), dan huruf "a" muncul berapa kali (count).
Kerangka mulai
berita = "eksul coding st john buka pendaftaran"
kata = berita.split()
print(len(kata)) # ? — tebak dulu, baru run
Output yang harus muncul (level 2)
True
6
4

"coding" in berita · berita.find("coding") · berita.count("a") — cocokkan tebakanmu!

⏱

Waktu: 10 menit. Ini persis kerja pembersih data nyata: pecah → cek → olah. Challenge berikutnya pakai semuanya.

Tantangan terakhir — dan ini penilaian sesi

Challenge · Perbaiki input user

Misi — program penilaian sesi ini
  1. Minta nama user dengan input() — user bebas ngetik acak: spasi berlebih, kapital kacau
  2. Bersihkan: strip().title() — simpan ke nama_rapi
  3. Cetak 4 hasil: nama rapi, len() panjangnya, versi lower(), dan cek awalan "b"
Alat yang kamu pegang

strip() & title() dari slide 07-08 · len() dari slide 04 · lower() slide 07 · indexing [0] slide 04. Semua sudah dipelajari hari ini — ini digabung, bukan dipelajari baru.

Output yang diharapkan
Masukkan nama: budi sanTOso
Nama rapi : Budi Santoso
Panjang : 12
Huruf kecil: budi santoso
Awalan 'b'? True

Spasi diinput tidak terlihat — tapi hasilnya rapi. Itu bukti programmu bekerja.

⏱

Waktu: 20 menit. Mentok? Slide pembahasan menunggu — coba dulu minimal 10 menit!

Gimana cara menyelesaikannya?

Pembahasan Challenge — kode lengkap

Salah satu solusi (ada banyak variasi yang benar)
nama_kotor = input("Masukkan nama: ")
nama_rapi = nama_kotor.strip().title()

print("Nama rapi  :", nama_rapi)
print("Panjang    :", len(nama_rapi))
print("Huruf kecil:", nama_rapi.lower())
print("Awalan 'b'?", nama_rapi[0].lower() == "b")
Kenapa kode ini jalan?
  • strip().title() — urutan penting: bersihkan dulu, baru kapitalisasi. Dibalik, hasilnya tetap kotor.
  • Hasil chain disimpan ke nama_rapi — kunci immutable: tanpa =, hasilnya hilang.
  • nama_rapi[0].lower() == "b" — ambil huruf pertama, samakan bentuk, bandingkan.
Variasi yang sah

Awalan juga bisa dicek: nama_rapi.startswith("b") atau nama_rapi.startswith("B") — hasil sama. Bonus untuk yang cepat: proses tiga nama dalam list pakai loop (ada di kode.py bagian kumulatif).

!

Yang sampai sini dengan usaha sendiri — kamu sudah nulis program pembersih data pertamamu. Kerja developer sungguhan itu!

Kode nggak jalan? Mungkin kamu kena salah satu ini

Kotak masalah — 3 jebakan string

Jebakan 01
Kira method mengubah asli
nama = "budi"
nama.upper()      # hasil dibuang!
print(nama)       # "budi" — tetap kecil

Gejala: "kok nggak berubah?" — method string mengembalikan string baru, tidak menyentuh aslinya. Simpan: nama = nama.upper(). Bandingkan list: nilai.append(95) memang mengubah aslinya.

Jebakan 02
Lupa strip di input user
nama = input("Nama: ")
# user ngetik: "  budi "
print(len(nama))  # 7, bukan 4!

Gejala: perbandingan selalu gagal — " budi" == "budi" itu False, spasi dihitung. Ritual wajib: input().strip() — tiap kali, tanpa kecuali.

Jebakan 03
Tertukar in dan find
teks = "halo"
print(teks.find("x"))   # -1
if teks.find("x"):      # -1 dianggap True!
    print("ada")        # salah!

Gejala: cek "ada/tidak" pakai find() di if — -1 bukan False di Python! Untuk cek ada/tidak pakai in yang mengembalikan True/False murni. find() hanya untuk mencari posisi.

Senjata debug: cetak sebelum-sesudah — print(nama) sebelum method, sesudahnya lagi. Kalau keduanya sama, berarti hasil method-nya tidak disimpan.

Rangkuman — yang kita bawa pulang

5 poin hari ini — teks tunduk

01
String = deretan karakter — teks[0], teks[-1], slicing teks[1:4] (kanan eksklusif), len()
02
String immutable — method tidak mengubah asli, ia kembalikan string BARU: simpan hasilnya ke variabel
03
Pembersih & pengubah: upper lower strip title replace — bisa dirangkai: input().strip().title()
04
split gunting (str→list) · join lem (list→str) · f-string f"Halo {nama}" = rangkai apa saja tanpa TypeError
05
Detektif teks: in ada/tidak · find() posisi atau -1 · count() jumlah kemunculan
Input kotor — sejak hari ini kalah. Next → Mini Project 2
Next & Referensi — langkah selanjutnya

Minggu depan:
Mini Project 2

Sesi 14 — Mini Project 2: Simple Application

Semua bahan sudah kamu pegang —
minggu depan dirangkai jadi aplikasi utuh.

List sebagai data + fungsi sebagai fitur + while True sebagai mesin menu: lihat · tambah · hapus · keluar — plus fitur Cari dari lower() yang hari ini kamu kuasai.

intip:
while True:
  pilih = input("Pilih menu: ").strip()
  if pilih == "1": tampilkan(tugas)
while Truelist + fungsimenu CLI
PR iseng (opsional)
  • Bikin bersih.py: strip + title nama kotor → hitung len & cek in
  • Coba split(",") pada "apel,jeruk,mangga" lalu " - ".join(...)
  • Tidak ada laptop? Tulis chain strip().title().upper() di kertas + tebak output-nya
Sampai jumpa di Sesi 14! ingat: hasil method disimpan, ya