11. Variables dan tipe data

Bab 7 menulis teks langsung di dalam pemanggilan print. Itu bisa dipakai, tapi kalau ada informasi yang perlu dipakai di lebih dari satu tempat, kamu harus mengetiknya ulang setiap kali. Variable mengatasi masalah itu. Sebuah variable adalah nama yang mewakili sebuah nilai, jadi kamu cukup menulis nilainya sekali dan bisa memakainya lagi.

Mendeklarasikan sebuah variable

Bentuk paling umum dari deklarasi variable di Python:

name = "Keiko"
print(name)

Ada dua hal yang terjadi di baris pertama itu:

  • name adalah nama variablenya. Kamu yang menentukan.
  • = adalah operator assignment. Ia memasukkan nilai di sebelah kanan ke dalam variable di sebelah kiri. Ini bukan berarti "sama dengan" seperti dalam matematika.

Sekarang name mewakili string "Keiko", jadi print(name) mencetak Keiko.

Python tidak punya keyword local. Setiap variable yang kamu deklarasikan di dalam sebuah function milik function itu, dan variable di tingkat atas sebuah file milik file itu. Kamu akan belajar tentang function di bab berikutnya; untuk sekarang, semua variable kamu hidup di tingkat atas.

Mengubah sebuah variable

Nilai sebuah variable bisa berubah. Pakai = lagi:

score = 0
print(score)   # prints 0
score = 50
print(score)   # prints 50

Buka exercises/11/01-variables.py. Ubah nilai awal score dan jalankan filenya. Kedua pemanggilan print harus berubah serentak.

Tipe data

Di Python, sebuah nilai juga punya tipe, bukan hanya data. Lima tipe yang kamu butuhkan sekarang:

  • str — teks, ditulis di antara tanda kutip: "hello", 'a', "" (string kosong).
  • int — bilangan bulat tanpa titik desimal: 0, -7, 42.
  • float — bilangan dengan titik desimal: 3.14, 0.5, -1.0.
  • bool — tepat dua nilai: True dan False. Tanpa tanda kutip. Perhatikan huruf kapital — true (huruf kecil) adalah error di Python.
  • NoneType — tipe dari None, yang mewakili ketiadaan nilai apapun.

type() adalah built-in function yang mengembalikan objek yang mendeskripsikan tipe sebuah nilai. Untuk mendapatkan nama tipenya saja sebagai string pendek, pakai type(x).__name__:

print(type("hello").__name__)   # str
print(type(7).__name__)         # int
print(type(3.14).__name__)      # float
print(type(True).__name__)      # bool
print(type(None).__name__)      # NoneType

type(x) sendirian mencetak sesuatu seperti <class 'str'>. Bagian .__name__ mengambil hanya kata str. Kedua bentuk bekerja untuk memahami; .__name__ lebih mudah dibaca pada output.

Nama variable

Kamu yang memilih nama variable, tapi Python punya aturan tentang mana yang diperbolehkan:

  • Boleh mengandung huruf, digit, dan underscore _.
  • Tidak boleh dimulai dengan digit. level1 boleh; 1level tidak.
  • Bersifat case sensitive. Score, score, dan SCORE adalah tiga nama yang berbeda.
  • Tidak boleh menggunakan salah satu reserved word Python: and, as, assert, async, await, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield. Kamu akan bertemu sebagian besar ini nanti.

Di luar aturan itu, ikuti kebiasaan berikut:

  • Pilih nama yang bermakna. player_name lebih baik dari n. hit_points lebih baik dari hp ketika kode sudah panjang, meski hp masih oke untuk skrip pendek.
  • Huruf kecil dengan underscore adalah gaya Python standar: max_score, enemy_count. Konvensi ini disebut snake_case.

Mencetak sebuah variable

print tidak butuh tanda kutip di sekeliling nama variable. Tanda kutip hanya untuk teks yang kamu ketik langsung. Untuk menggabungkan label dengan variable, kamu bisa memberikannya sebagai argumen terpisah (Python menambahkan spasi di antaranya) atau menggunakan f-string:

level = 7
print("Level:", level)        # Level: 7
print(f"Level: {level}")      # Level: 7

Sebuah f-string dimulai dengan f sebelum tanda kutip pembuka. Semua variable atau ekspresi di dalam {} dievaluasi dan disisipkan ke dalam string. Ini adalah cara standar Python untuk membangun string yang mengandung nilai.

Bentuk koma print("Level:", level) mencetak spasi di antara setiap argumen secara otomatis. F-string f"Level: {level}" membangun satu string, jadi kamu mengontrol setiap karakter. Keduanya benar; f-string memberi kontrol lebih.

Multiple assignment

Python memungkinkan kamu mendeklarasikan beberapa variable dan mengassign beberapa nilai dalam satu baris. Nama di sebelah kiri berpasangan dengan nilai di sebelah kanan berdasarkan posisi:

name, level = "Keiko", 7
print(name, level)   # Keiko 7

Ini mengelompokkan deklarasi yang berkaitan dengan rapi. Ini juga memungkinkan trik yang berguna — menukar dua variable dalam satu langkah:

a, b = 1, 2
a, b = b, a
print(a, b)   # 2 1

Python membaca seluruh sisi kanan terlebih dahulu, lalu mengassign. Jadi a, b = b, a mengambil b dan a saat ini dan memasukkannya ke slot yang berlawanan.

Pekerjaan Rumah

Starter pekerjaan rumah ada di exercises/11/homework/.

Soal 1 — Data karakter

Buka exercises/11/homework/01-player-vitals.py. Deklarasikan empat variable bernama name, level, hit_points, dan alive, dengan nilai pilihanmu. Yang pertama harus berupa string, dua berikutnya angka, dan yang keempat boolean. Cetak masing-masing di baris sendiri dengan label, seperti Name: Keiko.

Soal 2 — Pemeriksa tipe

Buka exercises/11/homework/02-type-checker.py. Gunakan type(x).__name__ untuk mencetak nama tipe dari masing-masing lima nilai ini, satu per baris:

  • string "world",
  • integer 42,
  • float 3.14,
  • boolean False,
  • None.

Soal 3 — Ganti nama dan reassign

Buka exercises/11/homework/03-rename-and-reassign.py. File starter memiliki tiga variable a, b, dan c dengan nilai-nilai yang terlihat acak. Ganti namanya menjadi sesuatu yang bermakna untuk nilainya, cetak yang asli, ubah ketiganya, lalu cetak lagi.

Tantangan — Misteri None

Buka exercises/11/homework/04-none-mystery.py. Deklarasikan sebuah variable dan assign None ke dalamnya, lalu cetak nama tipenya. Kemudian beri nilai string dan cetak nama tipenya lagi. Tambahkan blok komentar singkat (beberapa baris diawali #) yang menjelaskan, dengan kata-katamu sendiri, apa arti None.

Buntu atau sudah selesai? Buka halaman solusi pekerjaan rumah.