Latihan Python: Perulangan for dan while
Latihan Python: Perulangan for dan while
Perulangan `for` digunakan untuk mengulang elemen-elemen dalam sebuah urutan (seperti list, tuple, string, atau
`range`).
---
Buatlah program yang mencetak semua bilangan genap dari 1 hingga 20 menggunakan perulangan `for` dan fungsi
`range()`.
**Jawaban/Kode Python:**
```python
for angka in range(2, 21, 2): # Mulai dari 2, hingga 20 (exclusive), dengan langkah 2
print(angka)
```
**Penjelasan Kode:**
* `range(2, 21, 2)` adalah kuncinya. Fungsi `range` dapat menerima tiga argumen: `range(start, stop, step)`.
* `stop`: Angka akhir perulangan (tidak termasuk). Kita ingin hingga 20, jadi kita beri nilai 21.
* `step`: Langkah atau increment setiap iterasi. Karena kita hanya ingin bilangan genap, langkahnya adalah 2.
* Pada setiap iterasi, variabel `angka` akan bernilai 2, 4, 6, ..., hingga 20.
---
Buatlah program yang menghitung jumlah huruf vokal ('a', 'i', 'u', 'e', 'o') dalam sebuah kalimat yang ditentukan.
```python
vokal = "aiueo"
jumlah_vokal = 0
kalimat_lower = [Link]()
if huruf in vokal:
print(f"Kalimat: '{kalimat}'")
```
**Penjelasan Kode:**
* `vokal` adalah string yang berisi semua huruf vokal untuk acuan perbandingan.
* `[Link]()` mengubah seluruh kalimat menjadi huruf kecil agar 'A' dan 'a' dianggap sama.
* `for huruf in kalimat_lower:`: Perulangan `for` akan mengiterasi setiap karakter dalam string `kalimat_lower`. Pada
setiap iterasi, variabel `huruf` akan menampung satu karakter.
* `if huruf in vokal:`: Kondisi ini memeriksa apakah karakter saat ini (`huruf`) ada di dalam string `vokal`.
* `jumlah_vokal += 1`: Jika karakter tersebut adalah vokal, maka nilai `jumlah_vokal` akan bertambah 1.
---
Buatlah program yang mencetak tabel perkalian 5x5 (dari 1x1 hingga 5x5).
**Jawaban/Kode Python:**
```python
hasil = i * j
```
**Penjelasan Kode:**
* `for i in range(1, 6):` adalah *outer loop* (perulangan luar) yang mengontrol baris. Variabel `i` akan bernilai 1, 2, 3, 4,
5.
* `for j in range(1, 6):` adalah *inner loop* (perulangan dalam) yang mengontrol kolom. Variabel `j` akan bernilai 1, 2, 3,
4, 5.
* **Alurnya:**
1. Saat `i` = 1, perulangan `j` akan berjalan penuh (dari 1 hingga 5), mencetak `1*1`, `1*2`, `1*3`, `1*4`, `1*5`.
2. Setelah perulangan `j` selesai, `print()` dijalankan untuk membuat baris baru.
3. Kemudian `i` menjadi 2, dan perulangan `j` kembali berjalan penuh, mencetak `2*1`, `2*2`, ..., `2*5`.
* `print(f"{hasil:3}", end="")`:
* `f"{hasil:3}"` adalah *formatted string literal* yang mencetak `hasil` dalam ruang selebar 3 karakter. Ini membantu
menyelaraskan kolom agar terlihat rapi.
* `end=""` memberitahu `print` untuk tidak menambahkan baris baru di akhir output, sehingga hasil perkalian untuk
satu baris tetap berada di baris yang sama.
---
Buatlah program yang membalik sebuah string tanpa menggunakan fungsi slicing `[::-1]`.
**Jawaban/Kode Python:**
```python
kata_terbalik = ""
```
**Penjelasan Kode:**
* `kata_terbalik` adalah string kosong yang akan kita gunakan untuk menampung hasil.
* `for huruf in kata_asli:`: Perulangan ini mengambil setiap huruf dari `kata_asli` dari depan ke belakang ('P', 'y', 't', 'h',
'o', 'n').
---
Buatlah program yang menemukan nilai terbesar dalam sebuah list angka tanpa menggunakan fungsi `max()`.
**Jawaban/Kode Python:**
```python
nilai_terbesar = angka
```
**Penjelasan Kode:**
* `nilai_terbesar = angka_list[0]`: Kita menginisialisasi variabel `nilai_terbesar` dengan nilai elemen pertama dari list. Ini
adalah asumsi awal kita.
* `for angka in angka_list:`: Perulangan ini akan memeriksa setiap `angka` dalam list.
* `if angka > nilai_terbesar:`: Pada setiap iterasi, kita bandingkan `angka` saat ini dengan `nilai_terbesar` yang kita
simpan.
* `nilai_terbesar = angka`: Jika `angka` saat ini lebih besar, maka kita update `nilai_terbesar` dengan `angka` tersebut.
* Setelah perulangan selesai, variabel `nilai_terbesar` akan menampung nilai tertinggi yang ditemukan di seluruh list.
---
---
---
Buatlah program yang meminta pengguna memasukkan angka positif. Program terus meminta input hingga pengguna
memasukkan angka negatif. Setelah itu, tampilkan jumlah dari semua angka positif yang dimasukkan.
**Jawaban/Kode Python:**
```python
total = 0
try:
angka = int(angka_str)
if angka > 0:
total += angka
print("Perhitungan dihentikan.")
else: # angka == 0
except ValueError:
```
**Penjelasan Kode:**
* `angka` diinisialisasi dengan 0 agar kondisi `while angka >= 0` bernilai `True` saat pertama kali dijalankan.
* `while angka >= 0:`: Loop akan berjalan selama nilai `angka` lebih besar atau sama dengan 0.
* Di dalam loop, program meminta input dari pengguna. `try-except` digunakan untuk menangani kesalahan jika
pengguna memasukkan bukan angka.
* `elif angka < 0:`: Jika angka negatif, cetak pesan berhenti. Loop akan berhenti dengan sendirinya di iterasi berikutnya
karena kondisi `while` sudah tidak terpenuhi.
* Loop akan berhenti ketika pengguna memasukkan angka negatif, dan program akan mencetak `total` akhir.
---
**Jawaban/Kode Python:**
```python
import random
tebakan = 0
percobaan = 0
try:
tebakan = int(tebakan_str)
percobaan += 1
else:
except ValueError:
```
**Penjelasan Kode:**
* `angka_rahasia = [Link](1, 100)`: Menghasilkan sebuah integer acak antara 1 dan 100.
* `while tebakan != angka_rahasia:`: Loop akan terus berjalan selama tebakan pengguna belum sama dengan angka
rahasia.
* Di dalam loop, program meminta input pengguna dan mengubahnya menjadi integer.
* `if tebakan < angka_rahasia:`: Jika tebakan lebih kecil, beri petunjuk.
* `elif tebakan > angka_rahasia:`: Jika tebakan lebih besar, beri petunjuk lain.
* `else:`: Jika tidak lebih kecil dan tidak lebih besar, berarti tebakan benar. Program mencetak pesan kemenangan dan
jumlah percobaan. Loop akan berhenti karena kondisi `while` sudah tidak terpenuhi (`tebakan == angka_rahasia`).
---
Buatlah program yang meminta pengguna memasukkan password. Password harus memenuhi kriteria:
1. Minimal 8 karakter.
**Jawaban/Kode Python:**
```python
password = ""
is_valid = False
has_digit = False
if len(password) >= 8:
if [Link]():
has_digit = True
if has_digit:
is_valid = True
else:
else:
```
**Penjelasan Kode:**
* `is_valid` adalah *flag* (penanda) yang diinisialisasi dengan `False`. Loop `while` akan berjalan selama `is_valid`
adalah `False`.
* `has_digit` adalah flag lain untuk mengecek keberadaan angka, di-set `False` di awal setiap percobaan.
* Jika panjangnya cukup, jalankan perulangan `for` untuk memeriksa setiap karakter dalam password.
* `if [Link]()`: Fungsi `isdigit()` mengembalikan `True` jika karakter adalah angka.
* Jika angka ditemukan, `has_digit` di-set menjadi `True` dan `break` menghentikan perulangan `for` karena tidak perlu
memeriksa lagi.
* Setelah loop `for`, `if has_digit:` diperiksa. Jika `True`, maka `is_valid` di-set `True` yang akan menghentikan loop
`while` di iterasi berikutnya. Jika tidak, pesan error ditampilkan.
---
Buatlah program yang mengkonversi sebuah bilangan desimal (basis 10) menjadi bilangan biner (basis 2) tanpa
menggunakan fungsi `bin()`.
**Jawaban/Kode Python:**
```python
if desimal == 0:
biner = "0"
else:
biner = ""
n = desimal
while n > 0:
sisa = n % 2
n = n // 2 # Pembagian integer
```
**Penjelasan Kode:**
* `if desimal == 0:`: Kasus khusus untuk angka 0, karena logika while tidak akan berjalan.
* `n = desimal`: Kita membuat salinan nilai desimal ke variabel `n` agar nilai asli tidak berubah.
* `while n > 0:`: Loop akan berjalan selama nilai `n` (yang akan terus dibagi 2) masih lebih besar dari 0.
* `sisa = n % 2`: Ini adalah inti konversi. Kita mengambil sisa hasil bagi `n` dengan 2 (hasilnya akan selalu 0 atau 1). Ini
adalah digit biner.
* `biner = str(sisa) + biner`: Sisa hasil bagi (yang sudah diubah ke string) ditambahkan di **depan** string `biner`. Ini
penting karena digit biner dihasilkan dari belakang ke depan.
* `n = n // 2`: Nilai `n` diperbarui dengan hasil pembagian bulat (integer division) dari `n` dengan 2.
---
**Jawaban/Kode Python:**
```python
PIN_BENAR = "123456"
saldo = 1000000
kesempatan = 3
pin_benar = False
if pin_input == PIN_BENAR:
pin_benar = True
else:
kesempatan -= 1
if kesempatan > 0:
else:
if pin_benar:
while True: # Loop tak terbatas yang akan kita hentikan secara manual
print("2. Keluar")
if pilihan == "1":
else:
```
**Penjelasan Kode:**
* `while kesempatan > 0 and not pin_benar:`: Loop berjalan selama masih ada kesempatan dan PIN belum benar.
* Jika benar, `pin_benar` di-set `True` untuk menghentikan loop ini dan melanjutkan ke tahap 2.
* Jika salah, `kesempatan` dikurangi 1. Jika `kesempatan` habis, pesan blokir ditampilkan.
* `if pin_benar:`: Bagian ini hanya dijalankan jika verifikasi PIN berhasil.
* `while True:`: Ini adalah idiom umum untuk membuat loop yang akan berjalan terus-menerus hingga ada perintah
`break`.
* `if pilihan == "1"`: Menampilkan saldo. `:,` pada f-string adalah format untuk menambahkan pemisah ribuan.
* `elif pilihan == "2"`: Mencetak pesan penutup dan `break` digunakan untuk keluar dari loop `while True`.
---
---
---
Buatlah program yang menentukan apakah seorang siswa lulus atau tidak. Siswa dinyatakan lulus jika nilainya 70 atau ke
atas.
**Jawaban/Kode Python:**
```python
# Soal: Menentukan kelulusan siswa
else:
```
**Penjelasan Kode:**
* Program meminta input nilai dari pengguna dan mengubahnya menjadi integer.
* `if nilai >= 70:`: Ini adalah kondisi yang diperiksa. Jika nilai yang dimasukkan 70 atau lebih besar, maka blok kode di
bawah `if` akan dijalankan.
* `print("Selamat, Anda LULUS!")`: Baris ini hanya dijalankan jika kondisi `if` benar.
* `else:`: Jika kondisi `if` salah (nilai kurang dari 70), maka blok kode di bawah `else` yang akan dijalankan.
* `print("Maaf, Anda TIDAK LULUS.")`: Baris ini hanya dijalankan jika kondisi `if` salah.
---
**Jawaban/Kode Python:**
```python
print("Kategori: Anak-anak")
print("Kategori: Dewasa")
print("Kategori: Lansia")
else:
```
**Penjelasan Kode:**
* Kita menggunakan serangkaian `if-elif-else` untuk memeriksa beberapa kondisi secara berurutan.
* Python akan memeriksa kondisi `if` pertama. Jika benar, blok tersebut dijalankan dan seluruh struktur `if-elif-else`
diakhiri.
* Jika salah, Python akan melanjutkan ke `elif` berikutnya dan memeriksanya. Proses ini berlanjut hingga sebuah
kondisi benar atau semua kondisi salah.
* `and` digunakan untuk menggabungkan dua kondisi, misalnya `umur >= 0 and umur <= 12`.
* `else` di akhir akan menangkap semua kemungkinan yang tidak tercover oleh kondisi di atasnya (dalam kasus ini,
umur negatif).
---
Buatlah program yang menghitung harga akhir berdasarkan status member dan total belanja.
**Jawaban/Kode Python:**
```python
diskon = 0
harga_akhir = total_belanja
if status_member == "ya":
diskon = 0.10
diskon = 0.05
```
**Penjelasan Kode:**
* Program meminta total belanja dan status member. `.lower()` pada input status memastikan jawaban "Ya", "YA", atau
"ya" akan dianggap sama.
* `if status_member == "ya":`: Ini adalah **kondisional bersarang (nested if)**. Pertama, kita periksa status member.
* Jika member, kita masuk ke blok `if` ini dan memeriksa kondisi kedua: `if total_belanja > 200000:`. Jika benar,
`diskon` diubah menjadi 0.10.
* `else:`: `else` ini terkait dengan `if status_member == "ya"`. Jika pengguna bukan member, blok ini dijalankan.
* Di dalamnya, kita periksa kondisi untuk non-member: `if total_belanja > 300000:`. Jika benar, `diskon` diubah
menjadi 0.05.
* Setelah struktur `if-else` selesai, kita hitung `harga_akhir` dengan rumus yang sudah ada.
* `f"{harga_akhir:,.0f}"` digunakan untuk memformat output menjadi mata uang yang mudah dibaca (dengan koma dan
tanpa desimal).
---
Buatlah program untuk menentukan apakah sebuah tahun adalah tahun kabisat. Aturan tahun kabisat:
* Jika tahun tersebut habis dibagi 100, maka **BUKAN** tahun kabisat, **KECUALI**
* Jika tahun tersebut juga habis dibagi 400, maka **ADALAH** tahun kabisat.
```python
else:
```
**Penjelasan Kode:**
* Logika tahun kabisat diterjemahkan langsung ke dalam kode Python menggunakan operator logika `and`, `or`, dan
`not`.
* `tahun % 100 != 0`: Cek apakah tahun TIDAK habis dibagi 100.
* `(tahun % 4 == 0 and tahun % 100 != 0)`: Ini adalah aturan utama. Harus habis dibagi 4 DAN tidak habis dibagi 100.
* `or (tahun % 400 == 0)`: Aturan ini menjadi pengecualian. Jika aturan pertama tidak terpenuhi, tetapi tahun habis
dibagi 400, maka tetap dianggap kabisat.
* Jika salah satu dari dua kondisi besar (yang di dalam kurung) terpenuhi, maka tahun tersebut adalah kabisat.
---
Buatlah program kalkulator sederhana yang meminta dua angka dan sebuah operator (+, -, \*, /). Program akan
menghitung dan menampilkan hasilnya. Jika operator tidak dikenal, tampilkan pesan error. Tangani juga kasus
pembagian dengan nol.
**Jawaban/Kode Python:**
```python
hasil = 0
error = False
if operator == '+':
if angka2 == 0:
error = True
else:
else:
error = True
if not error:
```
**Penjelasan Kode:**
* Program meminta dua angka (menggunakan `float()` agar bisa menghandle desimal) dan sebuah operator.
* `if angka2 == 0:`: Sebelum melakukan pembagian, kita periksa apakah pembagi (angka2) adalah nol.
* `else:`: Blok ini akan dijalankan jika input `operator` tidak cocok dengan +, -, \*, atau /. Cetak pesan error dan set
`error = True`.
* `if not error:`: Di akhir program, kita periksa flag `error`. Jika tidak ada error (`False`), maka baris hasil akan dicetak.
Jika ada error, baris ini tidak akan dijalankan.
---
---
`list` adalah kumpulan item yang terurut dan dapat diubah (mutable). Item-itemnya dipisahkan dengan koma dan diapit
oleh kurung siku `[]`.
---
Diberikan sebuah list `buah = ["apel", "jeruk", "mangga", "pisang"]`. Buatlah program yang:
**Jawaban/Kode Python:**
```python
buah[3] = "anggur"
[Link]("semangka")
```
**Penjelasan Kode:**
* `buah[1]`: Elemen list diakses menggunakan indeksnya. Indeks dimulai dari 0, jadi buah kedua ("jeruk") ada di indeks
1.
* `buah[3] = "anggur"`: List bersifat *mutable* (dapat diubah). Kita bisa mengubah nilai elemen di indeks tertentu
dengan cara ini.
* `[Link]("semangka")`: Method `.append()` digunakan untuk menambahkan satu elemen baru ke akhir list.
* Setelah semua operasi, `buah` akan berisi `['apel', 'jeruk', 'mangga', 'anggur', 'semangka']`.
---
Buatlah program yang meminta pengguna memasukkan nama buah. Cek apakah buah tersebut ada di dalam list `buah =
["apel", "jeruk", "mangga", "pisang", "anggur"]`. Jika ada, beri tahu indeksnya. Jika tidak ada, beri tahu bahwa buah tidak
ditemukan.
**Jawaban/Kode Python:**
```python
if buah_dicari in buah:
indeks = [Link](buah_dicari)
else:
```
**Penjelasan Kode:**
* Program meminta input nama buah dari pengguna. `.lower()` digunakan agar pencarian tidak case-sensitive (misal
"Apel" akan dianggap sama dengan "apel").
* `if buah_dicari in buah:`: Operator `in` digunakan untuk memeriksa keanggotaan. Ini akan mengembalikan `True` jika
`buah_dicari` ada di dalam list `buah`, dan `False` jika tidak.
* Jika buah tidak ditemukan (`False`), blok `else` dijalankan, yang mencetak pesan bahwa buah tidak ada.
---
Diberikan sebuah list `nilai = [85, 92, 78, 90, 88]`. Buatlah program yang menghitung dan menampilkan rata-rata dari
semua nilai dalam list tersebut tanpa menggunakan fungsi `sum()` dan `len()`.
**Jawaban/Kode Python:**
```python
total = 0
jumlah_elemen = 0
for n in nilai:
total += n
jumlah_elemen += 1
if jumlah_elemen > 0:
else:
```
**Penjelasan Kode:**
* `for n in nilai:`: Perulangan `for` mengiterasi setiap elemen dalam list `nilai`.
* Di dalam loop:
* `total += n`: Setiap nilai `n` ditambahkan ke variabel `total`.
* Setelah loop selesai, `total` berisi jumlah semua nilai dan `jumlah_elemen` berisi banyaknya nilai.
* `if jumlah_elemen > 0:`: Sebagai langkah pengaman, kita periksa apakah list tidak kosong untuk menghindari
pembagian dengan nol.
* `rata_rata = total / jumlah_elemen`: Rata-rata dihitung dengan membagi total nilai dengan jumlah elemen.
* `f"{rata_rata:.2f}"` memformat output rata-rata agar hanya memiliki dua angka di belakang koma.
---
Diberikan list `angka = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`. Buatlah program yang membuat list baru yang hanya berisi bilangan
genap dari list `angka` tersebut.
**Jawaban/Kode Python:**
```python
for n in angka:
if n % 2 == 0:
angka_genap.append(n)
```
**Penjelasan Kode:**
* `angka_genap = []`: Kita membuat sebuah list kosong yang akan diisi dengan bilangan genap.
* `for n in angka:`: Kita iterasi setiap bilangan `n` dalam list `angka`.
* `if n % 2 == 0:`: Kita periksa apakah bilangan `n` adalah genap (jika sisa hasil bagi dengan 2 adalah 0).
* `angka_genap.append(n)`: Jika `n` adalah bilangan genap, kita tambahkan `n` ke dalam list `angka_genap`
menggunakan method `.append()`.
* **List Comprehension:** Saya sertakan alternatif yang lebih "Pythonic" dan ringkas. `[n for n in angka if n % 2 == 0]`
melakukan hal yang sama: buat list baru dengan `n` untuk setiap `n` di `angka` jika `n` genap.
---
Diberikan list dengan elemen duplikat, misal `data = [1, 2, 2, 3, 4, 4, 5, 1]`. Buatlah program yang menghasilkan list baru
tanpa ada elemen duplikat.
**Jawaban/Kode Python:**
```python
data = [1, 2, 2, 3, 4, 4, 5, 1]
data_unik.append(item)
# data_unik_set = list(set(data))
```
**Penjelasan Kode:**
* `for item in data:`: Iterasi setiap `item` di list `data` yang memiliki duplikat.
* `if item not in data_unik:`: Ini adalah kuncinya. Sebelum menambahkan `item` ke list baru, kita periksa terlebih dahulu
apakah `item` tersebut **sudah ada** di list `data_unik`.
* `data_unik.append(item)`: Jika `item` belum ada (`not in`), maka kita tambahkan ke `data_unik`.
* Jika `item` sudah ada, tidak ada yang terjadi, dan loop melanjjutkan ke `item` berikutnya.
* **Alternatif dengan `set`:** Cara yang lebih efisien dan singkat adalah dengan mengubah list menjadi `set`. `set`
adalah tipe data yang secara otomatis tidak mengizinkan duplikat. Setelah diubah ke `set`, kita ubah kembali menjadi
`list`. `list(set(data))` akan langsung memberikan list dengan elemen unik. Urutan mungkin tidak terjamin, tapi ini adalah
solusi yang sangat umum.
---
---
`tuple` mirip dengan `list`, namun bersifat tidak dapat diubah (immutable) setelah dibuat. Item-itemnya dipisahkan
koma dan diapit oleh kurung biasa `()`.
---
Buatlah sebuah tuple `koordinat` yang berisi tiga nilai: x=10, y=20, z=30. Kemudian, akses dan cetak nilai y dan z.
**Jawaban/Kode Python:**
```python
# Membuat tuple
# Mengakses elemen
nilai_y = koordinat[1]
nilai_z = koordinat[2]
```
**Penjelasan Kode:**
* `koordinat = (10, 20, 30)`: Tuple dibuat dengan mendefinisikan elemen-elemen di dalam kurung `()`.
* Sama seperti list, elemen tuple diakses menggunakan indeks yang dimulai dari 0.
---
Diberikan sebuah tuple `siswa = ("Budi", 20, "Teknik Informatika")`. Gunakan *tuple unpacking* untuk menyimpan
setiap nilai ke dalam variabel terpisah (`nama`, `umur`, `jurusan`) dan cetak variabel-variabel tersebut.
**Jawaban/Kode Python:**
```python
# Tuple unpacking
print("Data Siswa:")
print(f"Nama: {nama}")
print(f"Umur: {umur}")
print(f"Jurusan: {jurusan}")
```
**Penjelasan Kode:**
* `nama, umur, jurusan = siswa`: Ini adalah *tuple unpacking*. Python secara otomatis "membongkar" tuple `siswa`
dan menugaskan setiap elemennya ke variabel di sebelah kiri sesuai urutannya.
---
Coba ubah elemen pertama dari tuple `hari = ("Senin", "Selasa", "Rabu")` menjadi "Ahad". Amati dan jelaskan error yang
terjadi.
**Jawaban/Kode Python:**
```python
try:
hari[0] = "Ahad"
except TypeError as e:
print("Penjelasan: Tuple bersifat 'immutable', artinya elemennya tidak dapat diubah setelah dibuat.")
```
**Penjelasan Kode:**
* `hari[0] = "Ahad"`: Kita mencoba mengubah elemen pertama (indeks 0) dari tuple.
* Karena tuple bersifat **immutable** (tidak dapat diubah), operasi ini tidak diperbolehkan dan akan memunculkan
`TypeError`.
* Saya membungkus kode dalam blok `try-except` untuk "menangkap" error tersebut agar program tidak berhenti
secara tiba-tiba.
* `except TypeError as e:`: Jika terjadi `TypeError`, blok ini akan dijalankan.
* Program akan mencetak pesan error yang dihasilkan Python dan memberikan penjelasan bahwa hal ini terjadi karena
sifat immutable dari tuple.
---
**Jawaban/Kode Python:**
```python
jumlah_90 = [Link](90)
```
**Penjelasan Kode:**
* Tuple memiliki beberapa method yang mirip dengan list, salah satunya adalah `.count()`.
* `[Link](90)`: Method `.count()` akan menghitung jumlah kemunculan elemen yang diberikan sebagai argumen
(dalam hal ini `90`) di dalam tuple `nilai`.
---
Buatlah sebuah dictionary untuk menyimpan nama kota berdasarkan koordinatnya. Gunakan tuple `(latitude, longitude)`
sebagai kunci dan nama kota sebagai nilainya. Tambahkan dua data, lalu akses nama kota untuk salah satu koordinat.
**Jawaban/Kode Python:**
```python
lokasi_kota = {}
kota = lokasi_kota[koordinat_jakarta]
```
**Penjelasan Kode:**
* `lokasi_kota[( -6.2088, 106.8456 )] = "Jakarta"`: Di sini, kita menggunakan tuple `(-6.2088, 106.8456)` sebagai
**kunci**.
* Mengapa tuple bisa digunakan sebagai kunci dictionary? Karena kunci dictionary harus bersifat *hashable*, yang
artinya nilainya tidak boleh berubah. Karena tuple **immutable**, ia memenuhi syarat ini. List tidak bisa digunakan
sebagai kunci karena bersifat mutable.
* Setelah menambahkan dua data, dictionary `lokasi_kota` akan terlihat seperti `{(-6.2088, 106.8456): 'Jakarta', (-
7.2575, 112.7521): 'Surabaya'}`.
* `kota = lokasi_kota[koordinat_jakarta]`: Kita bisa mengakses nilai (nama kota) dengan cara yang sama seperti
dictionary pada umumnya, yaitu dengan menyertakan kuncinya (dalam hal ini, sebuah tuple).