Variabel adalah nama yang ditempel ke sebuah nilai, supaya nilai itu bisa dipakai lagi nanti. Bayangin label harga di etalase Warung Kopi Pak Darto: label harga ditempel di angka 5000. Kalau harganya naik, labelnya dicabut lalu ditempel ke angka baru. Labelnya sendiri gak peduli isinya angka atau teks. Di Python juga begitu: yang punya tipe adalah nilainya, bukan namanya.
🧪 Tebakan cepat:
harga = "5000"(pakai kutip), laluprint(harga * 2). Hasilnya10000,50005000, atau error? Tebak dulu, jawabannya ada di bagian "Teks dan angka gak bisa dicampur".
Membuat variabel
nama_menu = "Teh manis" # str: teks
harga = 5000 # int: bilangan bulat
rating = 4.5 # float: bilangan pecahan
buka = True # bool: True atau False
catatan = None # None: belum ada isinya
=artinya "tempel nama di kiri ke nilai di kanan". Ini disebut assignment, bukan "sama dengan" seperti di matematika.- Gak ada kata
let,const, atauvarseperti di JavaScript, dan tipenya gak perlu ditulis. Langsungnama = nilai. - Nama variabel pakai huruf kecil dan garis bawah (snake_case), gak boleh diawali angka, dan huruf besar-kecil dibedakan:
hargadanHargaitu dua nama. True,False, danNoneselalu diawali huruf besar.- Desimal ditulis dengan titik:
4.5, bukan4,5.
Lima tipe dasar dan type()
| Tipe | Contoh | Artinya |
|---|---|---|
int |
5000, -3, 0 |
bilangan bulat |
float |
4.5, 5000.0 |
bilangan pecahan, selalu ada titiknya |
str |
"Teh manis", '5000' |
teks, di antara kutip ganda atau tunggal |
bool |
True, False |
benar atau salah |
NoneType |
None |
belum ada isinya |
Fungsi type() memberi tahu tipe sebuah nilai:
print(type(harga)) # <class 'int'>
print(type(rating)) # <class 'float'>
print(type(nama_menu)) # <class 'str'>
print(type(buka)) # <class 'bool'>
print(type(catatan)) # <class 'NoneType'>
5000 dan 5000.0 nilainya sama, tapi tipenya beda: yang pertama int, yang kedua float. print(5000.0) menulis 5000.0, titik nolnya ikut. Dan "5000" dengan kutip adalah str, teks yang kebetulan berisi angka.
Dynamic typing
Satu nama boleh ditempel ke nilai bertipe lain kapan saja:
harga = 5000
harga = "lima ribu"
print(type(harga)) # <class 'str'>
Ini disebut dynamic typing: tipe sebuah variabel ditentukan saat program berjalan (runtime), dari nilai yang sedang ditempelnya, bukan saat variabel itu pertama kali ditulis. Praktis, tapi artinya Python baru tahu ada salah tipe ketika baris itu dijalankan.
Teks dan angka gak bisa dicampur
harga = 5000
print("Rp" + harga)
Traceback (most recent call last):
File "/home/darto/warung.py", line 2, in <module>
print("Rp" + harga)
~~~~~^~~~~~~
TypeError: can only concatenate str (not "int") to str
+di antara dua teks artinya menyambung, di antara dua angka artinya menjumlah. Teks + angka? Python gak mau menebak, jadi dia menolak denganTypeError.- Tanda
~~~~~^~~~~~~menunjuk operasi yang gagal, dan baris terakhir menjelaskan: cuma bisa menyambungstrdenganstr, bukan denganint. - Perbaikannya: ubah angkanya jadi teks dulu dengan
str(harga), jadi"Rp" + str(harga)menghasilkanRp5000. Atau pakai f-string di bagian berikutnya.
Kebalikannya juga ada: int("5000") mengubah teks jadi int, float("4.5") jadi float.
Tipe nilai menentukan arti operatornya. Kalau harga = "5000", harga * 2 bukan perkalian angka, tapi teksnya diulang dua kali: hasilnya 50005000. Itu jawaban tebakannya. Dan harga + 1000 malah TypeError, karena teks gak bisa disambung dengan angka.
f-string: menyisipkan nilai ke dalam teks
nama = "Budi"
umur = 25
print(f"Halo, {nama}! Umur kamu {umur} tahun.")
Halo, Budi! Umur kamu 25 tahun.
- Huruf
ftepat sebelum kutip pembuka mengubah teks biasa jadi f-string. - Tiap
{nama}di dalamnya diganti isi variabelnama. Isinya boleh tipe apa saja, gak perlustr(), jadi{umur}langsung jadi25. - Di kasir:
print(f"{nama_menu}: Rp{harga}")menulisTeh manis: Rp5000.
⚠️ Jebakan yang sering ketemu
- Lupa huruf
f.print("Halo, {nama}!")menulisHalo, {nama}!apa adanya, kurung kurawalnya ikut tercetak. - Angka di dalam kutip.
umur = "25"adalahstr, bukanint. Hasil cetaknya sama, tapiumur + 1jadiTypeError. Angka yang mau dihitung ditulis tanpa kutip. - Pemisah ribuan ala Indonesia.
int("15.000")gagal denganValueError: invalid literal for int() with base 10: '15.000'. Di kode, tulis15000tanpa titik. truehuruf kecil.buka = truegagal denganNameError: name 'true' is not defined. Did you mean: 'True'?
TL;DR: Variabel adalah nama yang ditempel ke nilai dengan =, tanpa keyword dan tanpa menulis tipe. Lima tipe dasar: int (5000), float (4.5, 5000.0), str ("Teh manis"), bool (True/False), dan None. type(x) menampilkan tipenya, misalnya <class 'int'>. Dynamic typing: tipe ditentukan saat runtime dari nilainya, dan satu nama boleh ganti tipe. "Rp" + 5000 adalah TypeError, jadi ubah dulu dengan str() atau pakai f-string: f"Halo, {nama}! Umur kamu {umur} tahun.". Teks dikali angka diulang: "5000" * 2 jadi 50005000.