Modul 7: Tipe Data Komposit dan Tipe Data Kustom
Capaian Pembelajaran Mata Kuliah
Mampu menggunakan elemen-elemen pemrograman, yaitu fungsi, I/O, dan tipe data buatan sendiri untuk membuat program sederhana berbasis teks.
Materi 1: Tipe Data Komposit
Kita sudah belajar 4 tipe data dasar dalam Python, yaitu integer, string, float, dan boolean. Setiap data dengan tipe ini hanya bisa menampung satu value.
Selain tipe data dasar, Python juga memiliki tipe data komposit. Satu tipe data komposit dapat menampung nol, satu, atau lebih dari satu value. Kita akan belajar dua data komposit di modul ini, yaitu list dan dictionary. Selain list dan dictionary, Python juga sebenarnya memiliki tipe data komposit lain, yaitu set dan tuple.
List
List dapat dianggap sebagai daftar. Untuk membuat list, perhatikan kode berikut.

Terhadap suatu list, biasanya kita melakukan hal-hal berikut.
- Mengambil satu nilai dari list
- Mengambil beberapa nilai sekaligus dari list
- Mengganti satu nilai dari list
- Menghitung jumlah nilai dalam list
- Menambah nilai ke dalam list
- Menghapus nilai di dalam list
Mengambil Satu Nilai dari List
Untuk mengambil hanya satu nilai dari list, kita gunakan indexing. Setiap nilai dalam list diurutkan dan diberi indeks. Nilai pertama diberi index 0. Nilai kedua diberi index 1 dan seterusnya.
Masih ingat dengan konsep iterabel?
List adalah sebuah iterabel.
Oleh karen itu, kita bisa menggunakannya dalam sebuah for loop
untuk mengambil nilai yang ada di dalam list satu per satu.
Mengambil Beberapa Nilai Sekaligus dari List
Di beberapa kasus, kita ingin mengambil tidak satu nilai dari list, tapi sebagian. Misalnya, kita ingin mengambil nilai dari awal (indeks ke-0) hingga indeks ke-2. Kita bisa gunakan cara pemotongan list (slicing) seperti dalam kode berikut.
Bagaimana jika kita ingin mengambil nama dari "wati" (indeks 1) hingga "dudi"
(indeks 5)?
Bagaimana jika kita ingin mengambil nilai dari "sinta" (indeks 4) hingga nilai terakhir?
Mengganti Satu Nilai di List
Untuk mengganti satu nilai di List, perhatikan kode berikut.
Menghitung Jumlah Nilai Dalam List
Untuk menghitung jumlah data dalam list, gunakan fungsi
len() yang merupakan fungsi bawaan dari Python.
Menambah Nilai ke List
Untuk menambah data ke dalam list, kita bisa menggunakan
fungsi append atau insert.
Fungsi append digunakan untuk menambahkan nilai di akhir list.
Sementara fungsi insert digunakan untuk menambahkan nilai
di sembarang urutan.
| Menambah nilai menggunakan fungsi append | |
|---|---|
| Menambah nilai menggunakan fungsi insert | |
|---|---|
Menghapus Nilai di List
Untuk menghapus nilai dari sebuah list, kita gunakan fungsi
remove, pop, atau del.
| Menghapus nilai menggunakan fungsi remove | |
|---|---|
| Menghapus nilai menggunakan fungsi pop | |
|---|---|
| Menghapus nilai menggunakan fungsi del | |
|---|---|
Menggabungkan Dua atau Lebih List
Kita bisa menggabungkan dua atau lebih list menjadi satu list.
Catatan
List dapat juga dibuat dengan mendaftarkan variabel. Akan tetapi, isi list adalah isi dari variabelnya (value-nya).
Dictionary
Tipe data lain adalah dictionary. Jika list seperti daftar, dictionary seperti kamus.
Setiap item dalam list terdiri satu nilai.
Sementara, satu item dalam dictionary terdiri dari
sepasang nilai, yaitu key dan value.
key adalah seperti entri dalam kamus
sementara value adalah definisinya.

Pasangan key:value dalam biodata adalah sebagai berikut.
| Key | Tipe data | Value | Tipe data |
|---|---|---|---|
| "nama" | string | "budi" | string |
| "nama" | string | 25 | integer |
| "pekerjaan" | string | "mahasiswa" | string |
Proses yang biasanya kita lakukan terhadap dictionary adalah sebagai berikut.
- Mengambil
valueberdasarkankey - Mengganti
valueuntuk suatukeytertentu - Menghitung jumlah item (
key:value) dalam suatu dictionary - Mengambil semua
keyatauvaluedalam dictionary - Menghapus item
Mengambil value berdasarkan key
Jika list adalah sebuah iterabel, apakah dictionary juga? Jawabannya adalah iya. Untuk dapat melakukan iterasi terhadap sebuah dictionary, perhatikan kode berikut.
Akan tetapi, kode di atas hanya melakukan iterasi terhadap key saja.
Jika kita ingin melakukan iterasi terhadap key dan value,
perhatikan kode berikut.
Mengganti value untuk suatu key tertentu
Menghitung jumlah item (key:value) dalam suatu dictionary
Untuk menghitung jumlah item dalam suatu dictionary, kita
gunakan fungsi len.
Mengambil semua key atau value dalam dictionary
Terkadang kita ingin mengetahui semua key atau value yang
ada di dalam suatu dictionary. Untuk itu, kita bisa gunakan
fungsi keys() dan values().
Agar daftar key dan value yang dihasilkan disimpan dalam bentuk
list, kita bisa gunakan fungsi list().
Tanpa mengubahnya ke list, output dari fungsi keys() dan values()
juga adalah sebuah iterabel. Jadi, kita bisa melakukan hal yang
seperti berikut.
Menghapus item
Untuk menghapus item di dictionary, kita bisa menggunakan
fungsi del atau pop.
| Menghapus item menggunakan del | |
|---|---|
| Menghapus item menggunakan pop | |
|---|---|
Coba
-
Apa hasil dari kode-kode berikut?
-
Perhatikan dictionary berikut.
Materi 2: Tipe Data Kustom
Jadi, tipe data apa saja yang sudah kita pelajari?
Ada tipe data dasar, yaitu int, float, string dan boolean.
Ada juga tipe data komposit, contohnya list dan dictionary.
Sebagai seorang programer, kita sebenarnya bisa membuat tipe data sendiri. Misalnya, kita membuat program untuk pengelolaan data mahasiswa. Untuk setiap mahasiswa, kita simpan data: nama, NIM, gender, umur, dan alamat. Dalam tipe data apa data ini kita simpan?
nama_mhs1 = "Budi"
nim_mhs1 = 123
gender_mhs1 = "L"
umur_mhs1 = 19
alamat_mhs1 = "Bandung"
nama_mhs2 = "Wati"
nim_mhs2 = 321
gender_mhs2 = "P"
umur_mhs2 = 18
alamat_mhs2 = "Jakarta"
mhs1 = ["budi", 123, "L", 19, "Bandung"]
mhs2 = ["wati", 321, "P", 18, "Jakarta"]
mahasiswa = [mhs1, mhs2] # list of list
# Cetak nama mahasiswa
print("Nama ke-1: ", mhs1[0])
print("Nama ke-2: ", mhs2[0])
mhs1 = {
"nama": "Budi",
"nim": 123,
"gender": "L",
"umur": 19,
"alamat": "Bandung"
}
mhs2 = {
"nama": "Wati",
"nim": 321,
"gender": "P",
"umur": 18,
"alamat": "Jakarta"
}
mahasiswa = [budi, wati] # list of dictionary
# Cetak nama mahasiswa
print("Nama ke-1: ", mhs1["nama"])
print("Nama ke-2: ", mhs2["nama"])
Manakah yang lebih efisien untuk menampung data mahasiswa? Untuk kasus ini, sepertinya list atau dictionary cukup cocok. Akan tetapi, kita sebenarnya bisa membuat tipe data baru agar sesuai kebutuhan kita. Untuk itu, perhatikan kode berikut.
Untuk membuat tipe data baru, kita menggunakan kata kunci class.
class adalah seperti template dari tipe data baru yang akan kita buat.
Setiap kita membuat data yang memiliki tipe data baru ini (baris 10 dan 11),
fungsi __init__ dipanggil.
Di fungsi inilah kita bisa menginisialisasi (memberikan nilai baru)
terhadap data yang baru kita buat.
Fungsi __init__ disebut sebagai fungsi konstruktor.


Selain fungsi konstruktor, ke dalam class juga dapat kita tambahkan fungsi-fungsi lain.
Misalnya, kita ingin menghitung tahun kelahiran seseorang dari umurnya.
Untuk itu kita buat fungsi hitung_tahun_lahir di dalam kelas mahasiswa.
Untuk menghitung tahun lahir, kita perlu memasukkan data tahun sekarang ke dalam fungsi.
Catatan
Apa fungsi parameter self baik dalam fungsi _init__ ataupun fungsi hitung_tahun_lahir?
Perhatikan bahwa definisi class, berlaku seperti template.
Kode dalam template, hanya disimpan di satu tempat.
Ketika kita punya dua variabel dengan tipe sama, yaitu mhs1 dan mhs2,
bagaimana komputer tahu bahwa ketika kita memanggil fungsi hitung_tahun_lahir,
itu kita sedang menghitung tahun lahir Budi dam bukan Wati?
Jawabannya adalah karena parameter self.
Saat memanggil mhs1.hitung_tahun_lahir(self, 2026), Python mengubahnya menjadi:
Mahasiswa.hitung_tahun_lahir(mhs1, 2026)
Artinya, self merujuk ke objek real (bukan template) dari kelas mahasiswa.
Coba
Misalkan kita akan membuat game pertarungan antara jago bela diri.
Pertama, kita bisa membuat tipe data baru berupa petarung.
Mari kita namakan tipe data ini Petarung.
Apa sajakah yang dimiliki oleh seorang petarung?
Mari sekarang kita bikin Sasuke.
| pertarungan.py | |
|---|---|
Naruto
Kesehatan = 100
Kekuatan = 62
Kecerdasan = 94
Kelincahan = 13
Senjata = 44
----------------------
Sasuke
Kesehatan = 100
Kekuatan = 66
Kecerdasan = 49
Kelincahan = 44
Senjata = 51
Sekarang, mari kita tandingkan Naruto dan Sasuke.
Untuk itu, kita buat tipe data Tanding.
--------------------
Naruto
Kesehatan = 100
Kekuatan = 58
Kecerdasan = 43
Kelincahan = 95
Senjata = 70
--------------------
Sasuke
Kesehatan = 100
Kekuatan = 28
Kecerdasan = 20
Kelincahan = 16
Senjata = 92
--------------------
Pemenangnya: Naruto
--------------------
Tugas Praktikum
-
Lengkapi
tanding.pydengan bagian perhitungan untuk kecerdasan, kelincahan, dan juga senjata. -
Lengkapi class
Petarungdengan data skor. -
Buatlah program pertarungan ini agar dilakukan berulang-ulang sampai pemain memutuskan untuk keluar program. Tambahkan menu seperti berikut:
- Lihat petarung
- Edit petarung
- Tambah petarung
- Hapus petarung
- Bertanding
- Keluar
Untuk menu Lihat petarung, tampilkan datanya juga. Selain itu, simpan data setiap petarung dalam file (Gunakan JSON). Untuk menu Bertanding, ketika dipilih menu dilanjutkan dengan pemilihan 2 nama petarung.
-
Tambahkan data jumlah kalah, menang, dan seri dalam class
Petarung. -
Buatlah agar kesehatan setiap petarung yang kalah dikurangi 5 poin.
-
Buatlah agar setiap kali seorang petarung menang, kekuatannya bertambah secara acak antara 1–5 poin.
-
Buatlah satu fungsi di class
Petarunguntuk men-generate ulang nilai-nilai kekuatan, kecerdasan, kelincahan, dan senjatanya namun dengan biaya kesehatannya dikurangi 10 poin.