Ticker

6/random/ticker-posts

03-Print Formatting with Strings-checkpoint

Pemformatan String (String Formatting) di Python — Lengkap & Praktis

Pemformatan String (String Formatting) di Python

Ringkasan praktis tiga teknik utama: operator %, metode .format(), dan formatted string literals (f-strings). Disertai contoh, catatan penting, dan cheat‑sheet.

Daftar Isi

Pendahuluan & Motivasi

Gagasan inti: pemformatan string memungkinkan kita “menyuntikkan” nilai (variabel/objek) ke dalam template string, bukan menggabungkan string dengan + atau koma.

player = 'Thomas'
points = 33

# Konkatenasi (kurang rapi jika banyak variabel)
'Last night, ' + player + ' scored ' + str(points) + ' points.'

# f-string (ringkas & jelas)
f'Last night, {player} scored {points} points.'

1) Pemformatan dengan Placeholder %

%s menyuntikkan string; operator % disebut string formatting operator.

print("I'm going to inject %s here." % 'something')
# > I'm going to inject something here.

Menyuntikkan Beberapa Item

print("I'm going to inject %s text here, and %s text here." % ('some', 'more'))
# > I'm going to inject some text here, and more text here.

Dengan Variabel

x, y = 'some', 'more'
print("I'm going to inject %s text here, and %s text here." % (x, y))
# > I'm going to inject some text here, and more text here.

%s vs %r (Konversi)

%s memakai str() (lebih “ramah”), sedangkan %r memakai repr() (tampilan resmi/mentah—termasuk kutip & escape).

print('He said his name was %s.' % 'Fred')  # He said his name was Fred.
print('He said his name was %r.' % 'Fred')  # He said his name was 'Fred'

Contoh karakter escape seperti (tab):

print('I once caught a fish %s.' % 'this 	big')  # this     big
print('I once caught a fish %r.' % 'this 	big')  # 'this 	big'

%s vs %d (Angka)

%s mencetak apa saja sebagai string (termasuk float). %d mengubah angka ke integer (truncation, bukan pembulatan).

print('I wrote %s programs today.' % 3.75)  # 3.75
print('I wrote %d programs today.' % 3.75)  # 3

Lebar & Presisi Float (Padding & Precision)

Format umum: %5.2f5 adalah lebar minimal total karakter; .2f = 2 digit desimal.

print('Floating point numbers: %5.2f' % (13.144))   # 13.14
print('Floating point numbers: %1.0f' % (13.144))   # 13
print('Floating point numbers: %1.5f' % (13.144))   # 13.14400
print('Floating point numbers: %10.2f' % (13.144))  #      13.14
print('Floating point numbers: %25.2f' % (13.144))  #                     13.14

Beberapa Konversi Sekaligus

print('First: %s, Second: %5.2f, Third: %r' % ('hi!', 3.1415, 'bye!'))
# First: hi!, Second:  3.14, Third: 'bye!'
Kapan memakai %? Terutama untuk membaca/merawat kode lama. Untuk kode baru, pertimbangkan .format() atau f-strings.

2) Pemformatan dengan Metode .format()

Sintaks dasar:

'String here {} then also {}'.format('something1','something2')
print('This is a string with an {}'.format('insert'))
# > This is a string with an insert

Kelebihan .format()

  1. Posisi indeks:
print('The {2} {1} {0}'.format('fox','brown','quick'))
# > The quick brown fox
  1. Keyword:
print('First Object: {a}, Second Object: {b}, Third Object: {c}'.format(a=1,b='Two',c=12.3))
# > First Object: 1, Second Object: Two, Third Object: 12.3
  1. Mengulang argumen tanpa duplikasi:
print('A %s saved is a %s earned.' % ('penny','penny'))
print('A {p} saved is a {p} earned.'.format(p='penny'))
# > A penny saved is a penny earned.
# > A penny saved is a penny earned.

Perataan, Padding, & Presisi

print('{0:8} | {1:9}'.format('Fruit', 'Quantity'))
print('{0:8} | {1:9}'.format('Apples', 3.))
print('{0:8} | {1:9}'.format('Oranges', 10))
# Fruit    | Quantity 
# Apples   |       3.0
# Oranges  |        10

Default: teks rata kiri, angka rata kanan. Gunakan <, ^, > untuk kiri/tengah/kanan:

print('{0:<8} | {1:^8} | {2:>8}'.format('Left','Center','Right'))
print('{0:<8} | {1:^8} | {2:>8}'.format(11,22,33))
# Left     |  Center  |    Right
# 11       |    22    |       33

Karakter padding kustom:

print('{0:=<8} | {1:-^8} | {2:.>8}'.format('Left','Center','Right'))
print('{0:=<8} | {1:-^8} | {2:.>8}'.format(11,22,33))
# Left==== | -Center- | ...Right
# 11====== | ---22--- | ......33

Lebar & presisi float mirip dengan %:

print('This is my ten-character, two-decimal number:%10.2f' % 13.579)
print('This is my ten-character, two-decimal number:{0:10.2f}'.format(13.579))
# >      13.58
# >      13.58

3) F‑Strings (Python ≥ 3.6)

F-strings sangat ringkas: ekspresi/variabel langsung ditempatkan di dalam kurung kurawal.

name = 'Fred'
print(f"He said his name is {name}.")
# > He said his name is Fred

Pakai !r untuk representasi repr():

print(f"He said his name is {name!r}")
# > He said his name is 'Fred'

Format Lebar & Presisi pada F-Strings

Pola umum: {value:{width}.{precision}}. Jika tanpa tipe (f/e/dst), presisi diartikan sebagai digit signifikan (gaya format g).

num = 23.45678
print("My 10 character, four decimal number is:{0:10.4f}".format(num))
print(f"My 10 character, four decimal number is:{num:{10}.{6}}")
# >   23.4568
# >   23.4568

Contoh perbedaan perilaku presisi:

num = 23.45
print("...:{0:10.4f}".format(num))   # 4 digit desimal tetap
print(f"...:{num:{10}.{6}}")         # 6 digit signifikan total
# >    23.4500
# >      23.45

Jika butuh tepat N digit desimal, gunakan tipe f secara eksplisit (bisa juga di f-string):

num = 23.45
print("...:{0:10.4f}".format(num))
print(f"...:{num:10.4f}")
# >    23.4500
# >    23.4500

Ringkasan & Rekomendasi Praktik

F‑strings

Direkomendasikan untuk Python 3.6+: paling ringkas, jelas, dan cepat.

.format()

Cocok untuk template kompleks, perataan kolom, atau lebar/presisi dinamis.

% formatting

Utamanya untuk membaca/merawat kode lama. Pahami karena masih sering dijumpai.

Cheat‑Sheet Cepat

Dasar

f"Hello {nama}"
f"{obj!r}"                   # repr()

Lebar & Presisi

f"{x:10.2f}"                # lebar 10, 2 desimal
f"{x:<10}"                   # rata kiri
f"{x:^10}"                   # rata tengah
f"{x:>10}"                   # rata kanan
f"{x:_>10}"                  # pad '_' di kiri

Digit Signifikan

f"{x:.6}"                   # 6 digit signifikan (format 'g')

.format()

"{2} {1} {0}".format(a,b,c)
"{x} {y}".format(x=1, y=2)

Kesalahan/Kebingungan Umum

  • Menyangka .{precision} di f-string (tanpa tipe) berarti “N digit desimal” → keliru. Itu artinya digit signifikan. Untuk N desimal, gunakan :.Nf.
  • %d memotong float ke integer (truncation), bukan pembulatan.
  • Lebar adalah total karakter termasuk spasi, bukan hanya bagian angka.

Referensi Resmi

Disusun untuk pembelajaran. Contoh kode dapat ditempel langsung ke interpreter atau notebook.

© 2025 — Ringkasan Pemformatan String Python (Bahasa Indonesia).

Post a Comment

0 Comments