Pemrograman Python: Dari Nol sampai Proyek Mini

Belum masuk. Progresmu tidak tersimpan.

Masuk
  • Bab 4 dari 11
  • 25 menit
  • 1 latihan kode
  • 4 soal kuis

Input, Output, dan f-string

Di bab ini (8 bagian)
  1. Tujuan
  2. Program yang bisa diajak ngobrol
  3. Aturan emas: input() selalu menghasilkan str
  4. f-string: cara modern menyusun teks
  5. Format spesifier: angka yang enak dibaca
  6. Menggabungkan semuanya: kasir mini
  7. Kesalahan umum
  8. Rangkuman

Tujuan bab ini

  • Membaca masukan pengguna dengan input() dan memahami bahwa hasilnya selalu str.
  • Mengubah masukan menjadi angka dengan int() dan float().
  • Menyusun teks rapi dengan f-string.
  • Memakai format spesifier seperti :,.2f, :.1%, dan perataan < > ^.

Program yang bisa diajak ngobrol

Sejauh ini programmu hanya bicara satu arah: print() menampilkan sesuatu ke layar. Agar program terasa hidup, ia juga perlu mendengar. Di Python, telinganya adalah fungsi input().

nama = input("Siapa namamu? ")
print("Halo", nama)

Saat dijalankan:

Siapa namamu? Sari
Halo Sari

Alurnya begini:

  1. input() menampilkan teks di dalam kurung sebagai pertanyaan.
  2. Program berhenti dan menunggu sampai pengguna mengetik lalu menekan Enter.
  3. Semua yang diketik dikembalikan sebagai nilai, lalu disimpan ke nama.

Tips kecil: beri spasi di akhir teks pertanyaan ("Siapa namamu? ") supaya jawaban pengguna tidak menempel ke tanda tanya.

Aturan emas: input() selalu menghasilkan str

Ini aturan yang paling sering dilupakan. Apa pun yang diketik pengguna, termasuk angka, input() mengembalikannya sebagai teks.

umur = input("Berapa umurmu? ")
print(type(umur))
print(umur + 1)

Output:

Berapa umurmu? 20
<class 'str'>
TypeError: can only concatenate str (not "int") to str

Bagi Python, "20" hanyalah dua karakter, angka 2 dan 0, sama seperti "ab". Teks tidak bisa ditambah angka. Analoginya: kamu menerima nomor rumah tertulis di kertas. Kertas itu tidak bisa kamu jumlahkan, kamu harus membaca angkanya dulu.

Solusinya, ubah dengan int() untuk bilangan bulat atau float() untuk desimal:

umur = int(input("Berapa umurmu? "))
tinggi = float(input("Tinggi badan (cm)? "))
print(umur + 1)
print(tinggi / 100)

Output:

Berapa umurmu? 20
Tinggi badan (cm)? 165.5
21
1.655

Perhatikan pola int(input(...)). Python menjalankan bagian dalam dulu (input menghasilkan "20"), lalu bagian luar (int mengubahnya menjadi 20).

Kalau pengguna mengetik dua puluh atau 20.5 pada int(...), program akan error ValueError. Cara menangani error seperti ini dengan try dan except dibahas di bab penanganan error.

f-string: cara modern menyusun teks

Menggabungkan teks dengan + cepat jadi berantakan, apalagi kalau ada angka yang harus diubah dulu dengan str():

nama, umur = "Sari", 20
print("Halo " + nama + ", umurmu " + str(umur) + " tahun")

f-string jauh lebih rapi. Tambahkan huruf f sebelum tanda kutip, lalu tulis variabel atau ekspresi di dalam kurung kurawal {}:

nama, umur = "Sari", 20
print(f"Halo {nama}, umurmu {umur} tahun")
print(f"Tahun depan: {umur + 1} tahun")
print(f"Nama dalam huruf besar: {nama.upper()}")

Output:

Halo Sari, umurmu 20 tahun
Tahun depan: 21 tahun
Nama dalam huruf besar: SARI

Di dalam {} boleh ada ekspresi apa saja: hitungan, pemanggilan fungsi, atau method. Konversi ke teks dilakukan otomatis, jadi tidak perlu str(). f-string tersedia sejak Python 3.6.

Trik debugging: tulis tanda = setelah nama variabel untuk menampilkan nama sekaligus nilainya.

umur = 20
print(f"{umur=}")

Output:

umur=20

Format spesifier: angka yang enak dibaca

Setelah ekspresi di dalam {}, kamu bisa menambah titik dua : lalu aturan format.

harga = 12500.756
print(f"Harga: Rp{harga:,.2f}")

Output:

Harga: Rp12,500.76

Baca :,.2f dari kiri ke kanan:

  • , memberi pemisah ribuan.
  • .2 berarti dua angka di belakang titik desimal (dibulatkan, jadi .756 menjadi .76).
  • f berarti tampilkan sebagai bilangan desimal tetap (fixed-point).
SpesifierContohHasil
:.2ff"{3.14159:.2f}"3.14
:,f"{1500000:,}"1,500,000
:.1%f"{0.875:.1%}"87.5%
:05df"{42:05d}"00042
:<8f"[{'Ani':<8}]"[Ani ]
:>8f"[{'Ani':>8}]"[ Ani]
:^8f"[{'Ani':^8}]"[ Ani ]

Format pemisah ribuan bawaan Python mengikuti gaya Inggris (koma untuk ribuan, titik untuk desimal). Kalau ingin gaya Indonesia seperti Rp12.500,76, tukar tandanya dengan replace:

harga = 12500.756
teks = f"{harga:,.2f}".replace(",", "_").replace(".", ",").replace("_", ".")
print(f"Rp{teks}")

Output:

Rp12.500,76

Perataan untuk tabel sederhana

Perataan sangat membantu saat menampilkan data dalam kolom. Angka setelah tanda <, >, atau ^ adalah lebar kolom.

print(f"{'Nama':<8}{'Nilai':>6}")
print(f"{'Ani':<8}{88:>6.1f}")
print(f"{'Budi':<8}{72.5:>6.1f}")

Output:

Nama     Nilai
Ani       88.0
Budi      72.5

Teks rata kiri, angka rata kanan, persis seperti tabel di spreadsheet. Pola ini akan kamu pakai lagi di proyek mini kalkulator nilai.

Menggabungkan semuanya: kasir mini

Sekarang gabungkan input, konversi, hitungan, dan f-string menjadi satu program kecil. Program ini menghitung total belanja dengan diskon.

barang = input("Nama barang: ").strip()
harga = float(input("Harga satuan: "))
jumlah = int(input("Jumlah: "))
diskon = 0.1

subtotal = harga * jumlah
potongan = subtotal * diskon
total = subtotal - potongan

print(f"{'Barang':<10}{barang:>14}")
print(f"{'Subtotal':<10}{subtotal:>14,.2f}")
print(f"{'Diskon':<10}{diskon:>14.0%}")
print(f"{'Total':<10}{total:>14,.2f}")

Output:

Nama barang: Kopi susu
Harga satuan: 18500
Jumlah: 3
Barang         Kopi susu
Subtotal       55,500.00
Diskon               10%
Total          49,950.00

Beberapa hal yang perlu diperhatikan:

  • .strip() membuang spasi berlebih di awal dan akhir jawaban, berguna kalau pengguna tidak sengaja menekan spasi.
  • Harga memakai float() karena bisa saja ada sen, sedangkan jumlah memakai int() karena barang dihitung utuh.
  • Semua hitungan memakai angka asli. Format baru diterapkan di bagian paling akhir, saat menampilkan. Pisahkan menghitung dan menampilkan supaya hasilnya tidak ikut terbulatkan di tengah jalan.

Kesalahan umum

  • Lupa mengubah hasil input(). input("Umur? ") + 1 error karena hasilnya teks.
  • Lupa huruf f. print("Halo {nama}") menampilkan {nama} apa adanya.
  • Memakai int() untuk angka desimal. int("2.5") error; pakai float().
  • Kutip bertabrakan. Di dalam f-string berkutip dua, pakai kutip satu untuk teks di dalam {}, misalnya f"{'Ani':<8}".
  • Mengira :.2f mengubah nilai variabel. Format hanya mengubah tampilan; nilai harga tetap 12500.756.

Rangkuman

  • input() menampilkan pertanyaan, menunggu Enter, dan selalu mengembalikan str.
  • Ubah ke angka dengan int() atau float(), misalnya int(input("Umur? ")).
  • f-string diawali f dan menyisipkan ekspresi di dalam {} tanpa perlu str().
  • Format spesifier setelah : mengatur tampilan: ,.2f untuk ribuan dan dua desimal, .1% untuk persen, < > ^ untuk perataan.

Selesaikan bab ini

  1. 1. Baca materi
  2. 2. Latihan kode (1)
  3. 3. Kuis (4 soal)

Latihan kode: Struk kasir dengan f-string

Di latihan ini input() tidak tersedia, jadi nilai yang biasanya datang dari input() diberikan sebagai parameter berupa teks. Lengkapi:

  • hitung_total(teks_jumlah, harga) mengubah teks_jumlah (misalnya "3") menjadi int lalu mengembalikan jumlah kali harga. Contoh: hitung_total("3", 18500) menghasilkan 55500.
  • format_rupiah(nilai) mengembalikan teks Rp diikuti nilai dengan pemisah ribuan dan dua desimal. Contoh: format_rupiah(12500.756) menghasilkan "Rp12,500.76".
  • sapa(nama, umur) mengembalikan "Halo <nama>, tahun depan kamu <umur + 1> tahun". Contoh: sapa("Sari", 20) menghasilkan "Halo Sari, tahun depan kamu 21 tahun".

Cek pemahaman

  1. 1Apa tipe data hasil input() bila pengguna mengetik 20?

  2. 2Apa yang ditampilkan kode berikut?

    harga = 12500.756
    print(f"Rp{harga:,.2f}")
  3. 3print("Halo {nama}") tanpa huruf f menampilkan isi variabel nama.

  4. 4Pengguna mengetik 20 pada umur = input("Umur? "). Apa hasil umur + 1?