0% menganggap dokumen ini bermanfaat (0 suara)
144 tayangan212 halaman

Tutorial Python1

Buku ini ditulis oleh seorang guru Informatika untuk membantu Generasi Z menguasai pemrograman Python, yang dianggap penting di era digital. Penulis berharap buku ini bermanfaat bagi siswa SMAPIE dan pelajar Indonesia secara umum, serta dapat digunakan untuk kemaslahatan umat manusia. Buku ini mencakup berbagai topik pemrograman Python, termasuk manipulasi string, list comprehension, dan penanganan file.

Diunggah oleh

giantcoc789
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
144 tayangan212 halaman

Tutorial Python1

Buku ini ditulis oleh seorang guru Informatika untuk membantu Generasi Z menguasai pemrograman Python, yang dianggap penting di era digital. Penulis berharap buku ini bermanfaat bagi siswa SMAPIE dan pelajar Indonesia secara umum, serta dapat digunakan untuk kemaslahatan umat manusia. Buku ini mencakup berbagai topik pemrograman Python, termasuk manipulasi string, list comprehension, dan penanganan file.

Diunggah oleh

giantcoc789
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 212

[1] “Python Learning Series,” WhatsApp Channel, post 1527, Aug.

28,
2024. [Online]. Available:
https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527.
[Accessed: May 1-31, 2025]. (Diterjemahkan ke dalam bahasa Indonesia
oleh Ade Sukmana menggunakan chat.deepseek.com).

[2] DeepSeek, “AI Chat Assistant – DeepSeek-R1,” chat.deepseek.com.


[Online]. Available: https://chat.deepseek.com. [Accessed: May 2025].

**Kata Pengantar**

Dengan rahmat dan pertolongan Allah SWT, penulis dapat menyelesaikan


buku ini.

Ide awal penyusunan buku ini berangkat dari keprihatinan penulis sebagai
guru Informatika di SMAS PGRI Jonggol, Kabupaten Bogor, Jawa Barat,
yang menyaksikan pesatnya perkembangan teknologi. Terlebih, Generasi
Z hidup di era digital sehingga sudah sepatutnya mereka menguasai
teknologi dan mampu mengendalikannya, bukan malah dikendalikan oleh
teknologi.

Oleh karena itu, penulis memilih Python sebagai fokus pembelajaran


karena bahasa pemrograman ini relatif ringkas dan diprediksi akan terus
berkembang serta banyak digunakan hingga sepuluh tahun ke depan.
Selain itu, Python bersifat multiplatform dan yang paling menarik:
mempelajari Python hingga tingkat profesional pun dapat dilakukan
melalui perangkat mobile yang portabel, membuka peluang belajar yang
lebih luas.

Penulis berharap buku ini tidak hanya memfasilitasi siswa SMAPIE (julukan
SMAS PGRI Jonggol) untuk terampil dalam pemrograman Python, tetapi
juga bermanfaat bagi pelajar Indonesia secara umum. Semoga konten
buku ini dapat digunakan untuk kemaslahatan umat manusia.

Akhir kata, segala kekurangan dalam buku ini bersumber dari


keterbatasan penulis, sementara kebenaran mutlak hanyalah milik Allah
SWT.
-----------------------------------------------------------------------
___________________________________________

***Jawaban Benar: C) 3***

`my_list` adalah list berisi `[1, 2, 3, 4, 5]`.

`tuple(my_list)` mengubah list tersebut menjadi tuple: `(1, 2, 3, 4, 5)`.

`my_tuple[2]` mengakses elemen pada indeks ke-2 (*ingat: indeks


dimulai dari 0*):

- Indeks 0 → 1

- Indeks 1 → 2

- **Indeks 2 → 3**

Jadi, jawaban yang benar adalah **C) 3**.

*Beri reaksi ❤️jika jawabanmu benar!*

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

---

### Catatan:

- Konversi dari list ke tuple mempertahankan urutan dan nilai elemen.

- Pengindeksan pada tuple sama seperti list (dimulai dari 0).

_______________________________________42

Berikut terjemahan dalam Bahasa Indonesia:


**Sekarang, mari beralih ke topik berikutnya dalam Seri Belajar Python:**

***Manipulasi String***

String adalah salah satu tipe data yang paling sering digunakan di Python.
Mereka merepresentasikan urutan karakter dan sangat fleksibel untuk
operasi berbasis teks.

Mari kita eksplorasi beberapa operasi dan metode kunci untuk


memanipulasi string.

### **1. Operasi String Dasar:**

Anda bisa mengakses karakter individual dalam string menggunakan


indeks: `string[indeks]`.

Indeks string dimulai dari 0.

*Contoh:*

`”Python”[0]` menghasilkan `’P’`.

### **2. Penggabungan (Concatenation):**

Gabungkan string menggunakan operator `+`:

```python

Str1 = “Halo”

Str2 = “Dunia”

Hasil = str1 + “ “ + str2

# Output: “Halo Dunia”

```
### **3. Pengulangan (Repetition):**

Ulangi string menggunakan operator `*`:

```python

“Python” * 3

# Output: ‘PythonPythonPython’

```

### **4. Pemotongan (Slicing):**

Potong string menggunakan operator `:`:

```python

My_str = “Python”

Print(my_str[1:4]) # ‘yth’ (substring dari indeks 1-3)

Print(my_str[:3]) # ‘Pyt’ (substring dari awal hingga indeks 2)

Print(my_str[3:]) # ‘hon’ (substring dari indeks 3 hingga akhir)

```

### **5. Metode String:**

Python menyediakan banyak metode string berguna:

- `str.lower()` → Ubah string ke huruf kecil

- `str.upper()` → Ubah string ke huruf besar

- `str.strip()` → Hapus spasi di awal/akhir

- `str.replace(lama, baru)` → Ganti kemunculan `lama` dengan `baru`

- `str.split()` → Pisahkan string menjadi list berdasarkan pemisah


*Contoh:*

```python

Teks = “ Hello Python “

Print(teks.strip()) # ‘Hello Python’

Print(teks.replace(“Python”, “World”)) # ‘ Hello World ‘

```

### **6. Pemformatan String:**

Format string menggunakan f-string (Python 3.6+):

```python

Nama = “Alice”

Umur = 25

Print(f”Nama: {nama}, Umur: {umur}”)

# Output: ‘Nama: Alice, Umur: 25’

```

Manipulasi string adalah keterampilan paling esensial di Python karena


Anda akan sering bekerja dengan teks dalam analisis data,
pengembangan web, atau tugas otomasi.

**Beri reaksi ❤️jika siap untuk kuis tentang manipulasi string!**

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

---
### Catatan:

- Istilah teknis seperti *string*, *index*, *slicing*, *concatenation*


dipertahankan dalam bahasa Inggris karena sudah umum digunakan.

- Contoh kode tidak diubah untuk menjaga konsistensi sintaks Python.

- Penjelasan menggunakan padanan bahasa Indonesia yang natural.

_______________________________________43

**Apa output dari kode berikut?**

```python

Text = “Data Science”

Result = text[5:8] + text[-3:]

Print(result)

```

A. Sciice

B. Sci nce

C. Scince

D. Scienc

### **Jawaban yang Benar: C) Scince**

**Penjelasan:**

1. **`text[5:8]`**:

- String `”Data Science”` diindeks sebagai berikut:

```

Data Science

0 1 2 3 4 5 6 7 8 9 10 11
```

- `text[5:8]` mengambil karakter dari indeks **5 hingga 7** (indeks 8


tidak termasuk):

- Indeks 5: `S`

- Indeks 6: `c`

- Indeks 7: `i`

- Hasil: **”Sci”**.

2. **`text[-3:]`**:

- Indeks negatif (dari belakang):

```

... n c e

-3 -2 -1

```

- `text[-3:]` mengambil 3 karakter terakhir:

- Indeks -3: `n`

- Indeks -2: `c`

- Indeks -1: `e`

- Hasil: **”nce”**.

3. **Gabungan**:

`”Sci” + “nce” = “Scince”`.

**Output**:

```

Scince

```

**Beri reaksi ❤️jika jawabanmu benar!**


---

### Catatan:

- Slicing `[start:end]` tidak termasuk karakter di indeks `end`.

- Indeks negatif menghitung dari akhir string (`-1` = karakter terakhir).

________________________________________44

***Jawaban Benar: C) Scince***

`text[5:8]` mengambil karakter dari indeks 5 hingga 7, yaitu **’Sci’**.

`text[-3:]` mengambil 3 karakter terakhir string, yaitu **’nce’**.

Penggabungan: `’Sci’ + ‘nce’ → ‘Scince’`.

*Beri reaksi ❤️jika jawabanmu benar!*

### Penjelasan Detail:

- **String asli**: `”Data Science”`

- **Indeks**:

```

Data Science

0 1 2 3 4 5 6 7 8 9 10 11

```

- `text[5:8]` = indeks 5 (S), 6 (c), 7 (i) → **”Sci”**

- `text[-3:]` = indeks -3 (n), -2 (c), -1 (e) → **”nce”**

Hasil akhir: **”Scince”** (tanpa spasi tambahan).


________________________________________45

Berikut terjemahan dalam Bahasa Indonesia:

**Mari beralih ke topik berikutnya dalam Seri Belajar Python:**

***List Comprehension***

**Apa Itu List Comprehension?**

List Comprehension adalah cara yang lebih singkat dan elegan untuk
membuat list di Python.

Daripada menulis perulangan `for` lengkap untuk menghasilkan list, Anda


bisa membuatnya hanya dalam satu baris menggunakan List
Comprehension.

### **Sintaks Dasar:**

```python

New_list = [ekspresi for item in iterable if kondisi]

```

- `ekspresi` → nilai yang ingin disimpan di list baru

- `iterable` → urutan seperti list, tuple, string, dll

- `kondisi` (opsional) → menyaring item berdasarkan kondisi

### **Contoh 1: Membuat List Kuadrat**

```python

Kuadrat = [x*x for x in range(5)]


Print(kuadrat)

```

*Output:*

`[0, 1, 4, 9, 16]`

### **Contoh 2: Membuat List Bilangan Genap**

```python

Bilangan_genap = [x for x in range(10) if x % 2 == 0]

Print(bilangan_genap)

```

*Output:*

`[0, 2, 4, 6, 8]`

### **Poin Penting tentang List Comprehension:**

- Membuat kode lebih *Pythonic* (bersih dan singkat)

- Bisa menambahkan kondisi (`if`) di dalamnya

- Bahkan mendukung perulangan bersarang (penggunaan lanjutan)

List Comprehension sangat penting untuk tahap coding teknis dan


pemrograman Python dunia nyata.

**Beri reaksi ❤️jika siap untuk kuis tentang List Comprehension!**

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

---
### Catatan:

- Istilah teknis seperti *List Comprehension*, *Pythonic*, dan *iterable*


dipertahankan dalam bahasa Inggris karena sudah umum digunakan.

- Contoh kode tidak diubah untuk menjaga konsistensi sintaks Python.

- Penjelasan menggunakan padanan bahasa Indonesia yang natural.

_______________________________________46

**Apa output dari kode berikut?**

```python

Nums = [1, 2, 3, 4, 5]

Output = [x*2 for x in nums if x%2 != 0]

Print(output)

```

A. `[2, 4, 6, 8, 10]`

B. `[1, 3, 5]`

C. `[2, 6, 10]`

D. `[4, 8]`

### **Jawaban yang Benar: C) [2, 6, 10]**

**Penjelasan:**

1. **Kondisi `if x%2 != 0`** hanya memilih angka **ganjil** dari list
`nums`:

- `1` (ganjil)

- `3` (ganjil)
- `5` (ganjil)

2. **Operasi `x*2`** menggandakan nilai setiap angka yang terpilih:

- `1 * 2 = 2`

- `3 * 2 = 6`

- `5 * 2 = 10`

**Output**:

```python

[2, 6, 10]

```

**Beri reaksi ❤️jika jawabanmu benar!**

---

### Catatan:

- List comprehension (`[x*2 for x in nums if x%2 != 0]`)


mengkombinasikan **filter** (angka ganjil) dan **transformasi** (dikali 2).

- Angka genap (`2` dan `4`) diabaikan karena tidak memenuhi kondisi.

________________________________________47

***Jawaban Benar: C) [2, 6, 10]***

List comprehension melakukan perulangan melalui list `nums`:

1. `if x % 2 != 0` menyaring bilangan ganjil → `[1, 3, 5]`

2. Setiap bilangan tersebut dikalikan 2 → `[2, 6, 10]`

*Beri reaksi ❤️jika jawabanmu benar!*


---

### Penjelasan Tambahan:

- **Mekanisme kerja**:

- `x=1` → 1%2=1 (ganjil) → 1*2=**2**

- `x=2` → genap (dilewati)

- `x=3` → 3%2=1 (ganjil) → 3*2=**6**

- `x=4` → genap (dilewati)

- `x=5` → 5%2=1 (ganjil) → 5*2=**10**

Hasil akhir: `[2, 6, 10]`.

_______________________________________48

Berikut terjemahan dalam Bahasa Indonesia:

**Sekarang, mari beralih ke topik penting berikutnya dalam Seri Belajar


Python**

***Penanganan File di Python***

**Apa Itu Penanganan File?**

Penanganan file memungkinkan Python untuk membaca dari dan menulis


ke file—seperti file teks, CSV, log, dll.

Ini digunakan di hampir setiap proyek dunia nyata: baik untuk menyimpan
data pengguna, membaca konfigurasi, atau menulis log.

### **Operasi Dasar File:**


#### **1. Membuka File**

```python

File = open(“contoh.txt”, “r”) # ‘r’ untuk mode baca

```

#### **2. Membaca dari File**

```python

Konten = file.read()

Print(konten)

```

#### **3. Menulis ke File**

```python

File = open(“contoh.txt”, “w”) # ‘w’ untuk mode tulis

File.write(“Halo, Python!”)

File.close()

```

#### **4. Menambahkan ke File**

```python

File = open(“contoh.txt”, “a”) # ‘a’ untuk mode tambah

File.write(“\nBaris Baru”)

```

#### **5. Menutup File**

```python

File.close()

```
### **Praktik Terbaik: Menggunakan Pernyataan `with`**

```python

With open(“contoh.txt”, “r”) as file:

Konten = file.read()

Print(konten)

```

Ini secara otomatis menutup file setelah selesai membaca atau menulis.

### **Mode yang Perlu Diingat:**

- `’r’` – baca (*read*)

- `’w’` – tulis (*write*, menimpa isi file)

- `’a’` – tambah (*append*)

- `’r+’` – baca & tulis

Penanganan file sering diuji dalam wawancara dan sangat berguna dalam
skrip otomasi dan tugas pengolahan data.

**Beri reaksi ❤️jika siap untuk kuis tentang Penanganan File!**

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

---

### Catatan:
- Istilah teknis seperti *file handling*, *read*, *write*, dan *append*
dipertahankan dalam konteks pemrograman.

- Contoh kode tidak diubah untuk menjaga konsistensi sintaks Python.

- Penjelasan menggunakan gaya natural dengan padanan Bahasa


Indonesia yang mudah dipahami.

_______________________________________49

**Apa yang akan dilakukan oleh kode berikut?**

```python

With open(“data.txt”, “w”) as f:

f.write(“Hello”)

f.write(“World”)

```

A. Membuat data.txt dan menulis “Hello World” dengan spasi

B. Menambahkan “HelloWorld” ke data.txt

C. **Menimpa data.txt dengan “HelloWorld” (tanpa spasi)**

D. Menimbulkan error karena file tidak ada

### **Jawaban yang Benar: C**

**Penjelasan:**

1. Mode `”w”` (write) akan:

- Membuat file baru **jika belum ada**, atau

- **Menimpa seluruh konten** jika file sudah ada.

2. Metode `write()` akan menulis string persis seperti yang diberikan:

- `f.write(“Hello”)` → Menulis **”Hello”**

- `f.write(“World”)` → Menulis **”World”** tanpa spasi/enter di


antaranya.
3. Hasil akhir: File berisi **”HelloWorld”** (tanpa spasi).

**Beri reaksi ❤️jika jawabanmu benar!**

---

### Perbandingan Opsi:

- **A**: Salah karena tidak ada spasi ditambahkan.

- **B**: Salah karena mode `”w”` bukan `”a”` (append).

- **D**: Salah karena mode `”w”` otomatis membuat file jika belum ada.

________________________________________50

***Jawaban Benar: C) Menimpa data.txt dengan “HelloWorld” (tanpa


spasi)***

Mode `”w”` akan:

- Membuat file baru jika belum ada

- Menimpa seluruh konten file jika sudah ada

`f.write(“Hello”)` dan `f.write(“World”)` menulis string secara berurutan


tanpa spasi/enter di antaranya.

Hasil akhir: **”HelloWorld”** (tanpa spasi).

*Beri reaksi ❤️jika jawabanmu benar!*

---

### Penjelasan Tambahan:

- **Perbedaan mode**:

- `”w”` = *write* (tulis baru/menimpa)


- `”a”` = *append* (menambahkan di akhir)

- Jika ingin spasi, harus ditulis eksplisit:

```python

f.write(“Hello “)

f.write(“World”)

```

Hasil: `”Hello World”`

________________________________________51

Berikut terjemahan dalam Bahasa Indonesia:

**Hai teman-teman,**

Setelah membahas penanganan file, mari beralih ke konsep yang sangat


penting yang harus diketahui setiap pengembang Python:

***Penanganan Exception (Exception Handling)***

**Apa Itu Exception?**

Exception adalah error yang terdeteksi selama eksekusi program.


Daripada membuat program berhenti, Python memungkinkan kita
menanganinya dengan elegan.

*Contoh:*

```python

Num = int(input(“Masukkan angka: “))

Print(10 / num)

```
- Jika pengguna memasukkan **0**, akan menyebabkan
`ZeroDivisionError`.

- Jika memasukkan non-angka, akan menyebabkan `ValueError`.

**Cara Menangani Exception:**

Python menggunakan blok `try-except`:

```python

Try:

# kode berisiko

Num = int(input(“Masukkan angka: “))

Print(10 / num)

Except ZeroDivisionError:

Print(“Tidak bisa dibagi dengan nol!”)

Except ValueError:

Print(“Input tidak valid. Harap masukkan angka.”)

```

- `try` = “Coba jalankan kode ini...”

- `except` = “Jika ada error, lakukan ini sebagai gantinya.”

**Blok Opsional:**

- `else`: Dijalankan jika tidak terjadi exception.

- `finally`: Selalu dijalankan, bahkan jika exception muncul.

*Contoh:*

```python

Try:

F = open(“test.txt”, “r”)

Print(f.read())
Except FileNotFoundError:

Print(“File tidak ditemukan!”)

Finally:

Print(“Eksekusi selesai.”)

```

**Anda bisa mengingat ini:**

- `try`: Kode berisiko

- `except`: Tangani masalah spesifik — hindari `except` umum, gunakan


tipe exception spesifik (seperti `ValueError`, `ZeroDivisionError`,
`FileNotFoundError`).

- `else`: Jika tidak ada error

- `finally`: Selalu dijalankan (meskipun ada error)

**Beri reaksi ❤️jika siap untuk kuis tentang Penanganan Exception!**

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

### Catatan:

- Istilah teknis seperti *Exception*, `try`, `except`, `else`, dan `finally`


dipertahankan dalam bahasa Inggris karena sudah menjadi standar di
komunitas pemrograman Indonesia.

- Contoh kode tidak diubah untuk menjaga keakuratan sintaks.

- Penjelasan menggunakan gaya informal yang ramah dan mudah


dipahami.

________________________________________52

**Pemrograman Python**
Exception apa yang muncul saat membagi angka dengan nol di Python?

A. TypeError

B. ValueError

C. ZeroDivisionError

D. IndexError

### **Jawaban yang Benar: C) ZeroDivisionError**

**Penjelasan:**

- Operasi pembagian dengan nol (misal: `10 / 0`) secara otomatis


memunculkan **`ZeroDivisionError`**.

- Ini adalah *exception* spesifik Python untuk kasus pembagian oleh nol.

**Contoh:**

```python

Try:

Hasil = 10 / 0

Except ZeroDivisionError:

Print(“Tidak bisa dibagi dengan nol!”)

```

**Beri reaksi ❤️jika jawabanmu benar!**

---

### Perbandingan Opsi:


- **A (TypeError)**: Muncul saat operasi menggunakan tipe data tidak
sesuai (misal: `”10” / 2`).

- **B (ValueError)**: Muncul saat nilai tidak sesuai (misal: `int(“abc”)`).

- **D (IndexError)**: Muncul saat mengakses indeks tidak valid (misal:


`list[10]` untuk list berisi 2 elemen).

________________________________________53

***Jawaban Benar: C***

ZeroDivisionError muncul saat Anda mencoba membagi angka dengan nol


— ini adalah *exception* bawaan Python.

*Beri reaksi ❤️jika jawabanmu benar*

### Penjelasan:

- **ZeroDivisionError** adalah *exception* khusus Python untuk operasi


pembagian oleh nol.

- Contoh:

```python

10 / 0 # Memicu ZeroDivisionError

```

- *Exception* ini termasuk dalam *built-in exceptions* Python yang


sudah didefinisikan secara default.

### Perbandingan:

- Operasi lain seperti `10 / 2.0` (float) tidak memicu error.

- Pengecualian hanya muncul untuk pembagian **integer/float oleh


integer 0**.

________________________________________54
Berikut terjemahan dalam Bahasa Indonesia:

Saya melihat banyak fresh graduate dan freelancer kesulitan membangun


portofolio yang baik.

Mereka menghabiskan berjam-jam untuk resume, website, tapi tetap


merasa mentok.

Karena itu saya merekomendasikan Peerlist — platformnya simpel, bersih,


dan didesain khusus untuk developer, desainer, dan profesional kreatif.

Anda bisa menghubungkan GitHub, blog, proyek, dan semua karya Anda
dalam satu tempat.

*Cek di sini: 👉peerlist.io*

### Penjelasan:

- **Fresh graduate**: Lulusan baru

- **Freelancer**: Pekerja lepas

- **Portofolio**: Kumpulan karya profesional

- **Mentok**: Terjebak/tidak berkembang (istilah informal)

Platform Peerlist membantu memusatkan semua karya profesional Anda


secara rapi dan profesional.

_______________________________________55

Berikut terjemahan dalam Bahasa Indonesia:


**Sekarang, mari beralih ke topik berikutnya dalam Seri Belajar Python**

***Fungsi Lambda di Python***

**Apa itu fungsi lambda?**

Fungsi lambda adalah fungsi anonim kecil yang didefinisikan dalam satu
baris.

Biasanya digunakan ketika Anda memerlukan fungsi sederhana untuk


waktu singkat — terutama bersama `map()`, `filter()`, atau `sorted()`.

### **Sintaks:**

```python

Lambda argumen: ekspresi

```

Menerima input (*arguments*) dan mengembalikan hasil evaluasi


ekspresi.

### **Contoh:**

```python

Kuadrat = lambda x: x * x

Print(kuadrat(4)) # Output: 16

```

Setara dengan:

```python

Def kuadrat(x):

Return x * x

```
**Contoh lain:**

```python

Tambah = lambda a, b: a + b

Print(tambah(3, 5)) # Output: 8

```

### **Mengapa Disebut “Anonim”?**

Karena tidak memiliki nama seperti fungsi biasa.

Anda bisa menulisnya langsung dan menggunakannya seketika.

### **Penggunaan Umum:**

Biasanya bersama fungsi seperti:

- `map()` → menerapkan fungsi ke setiap item di list

- `filter()` → menyaring item dari list

- `sorted()` → mengatur cara pengurutan

*Contoh dengan `sorted()`:*

```python

Titik = [(2, 3), (1, 9), (4, 1)]

Titik.sort(key=lambda x: x[1])

Print(titik) # Diurutkan berdasarkan elemen kedua

```

### **Kapan Menggunakan Lambda?**

- Menghemat ruang (tidak perlu definisikan fungsi lengkap)

- Membuat kode lebih mudah dibaca untuk kasus sederhana


### **Kapan Tidak Menggunakan?**

- Untuk fungsi kompleks → gunakan `def` agar lebih jelas.

**Beri reaksi ❤️jika siap untuk kuis tentang Fungsi Lambda!**

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

---

### Catatan:

- Istilah teknis seperti *lambda*, `map`, `filter`, dan `sorted`


dipertahankan karena sudah umum di komunitas Python Indonesia.

- Konsep “anonim” diterjemahkan sebagai fungsi tanpa nama.

- Contoh kode tidak diubah untuk menjaga keakuratan sintaks.

________________________________________56

**Apa output dari kode berikut?**

```python

Nums = [1, 2, 3, 4]

Squared = list(map(lambda x: x*x, nums))

Print(squared)

```

A. `[1, 2, 3, 4]`

B. `[2, 4, 6, 8]`

C. `[1, 4, 9, 16]`
D. Error

### **Jawaban yang Benar: C) [1, 4, 9, 16]**

**Penjelasan:**

1. **Fungsi `lambda x: x*x`** menghitung **kuadrat** dari setiap angka:

- `1*1 = 1`

- `2*2 = 4`

- `3*3 = 9`

- `4*4 = 16`

2. **`map()`** menerapkan fungsi lambda ke setiap elemen dalam list


`nums`.

3. **`list(...)`** mengubah hasil `map()` menjadi list: `[1, 4, 9, 16]`.

**Output**:

```python

[1, 4, 9, 16]

```

**Beri reaksi ❤️jika jawabanmu benar!**

---

### Catatan:

- `lambda` membuat fungsi sederhana untuk operasi kuadrat.

- `map()` digunakan untuk menerapkan fungsi ke seluruh elemen list


tanpa perulangan manual.

________________________________________57
***Jawaban Benar: C. [1, 4, 9, 16]***

Fungsi `map()` menerapkan fungsi lambda `lambda x: x * x` ke setiap


elemen dalam list `nums`.

Jadi:

1×1=1

2×2=4

3×3=9

4 × 4 = 16

Oleh karena itu, hasilnya adalah `[1, 4, 9, 16]`.

*Beri reaksi ❤️jika jawabanmu benar*

---

### Penjelasan Singkat:

- **`lambda x: x*x`** → fungsi yang mengkuadratkan nilai input

- **`map(...)`** → memproses setiap elemen list `[1, 2, 3, 4]`

- **`list(...)`** → mengubah hasil map menjadi list baru

______________________________________58

Berikut terjemahan dalam Bahasa Indonesia:

**Sekarang, mari beralih ke topik berikutnya dalam Seri Belajar Python:**

***map(), filter(), dan reduce() di Python***


Tiga fungsi ini merupakan bagian dari *functional programming* di Python
dan sering digunakan untuk menulis kode yang ringkas, bersih, dan
mudah dibaca saat bekerja dengan list atau data iterable lainnya.

### **1. Map(function, iterable)**

Menerapkan suatu fungsi ke setiap item dalam iterable.

```python

Angka = [1, 2, 3, 4]

Kuadrat = list(map(lambda x: x ** 2, angka))

Print(kuadrat) # Output: [1, 4, 9, 16]

```

### **2. Filter(function, iterable)**

Mengembalikan hanya item yang bernilai `True` berdasarkan fungsi.

```python

Angka = [1, 2, 3, 4, 5, 6]

Genap = list(filter(lambda x: x % 2 == 0, angka))

Print(genap) # Output: [2, 4, 6]

```

### **3. Reduce(function, iterable)**

Menerapkan fungsi secara kumulatif ke item dalam iterable.

*Catatan: Harus diimpor dari `functools`.*

```python

From functools import reduce

Angka = [1, 2, 3, 4]
Hasil_kali = reduce(lambda x, y: x * y, angka)

Print(hasil_kali) # Output: 24 # (1×2=2 → 2×3=6 → 6×4=24)

```

Fungsi-fungsi ini sangat powerful jika digunakan dengan tepat. Anda akan
sering menjumpainya dalam soal wawancara dan kode dunia nyata!

**Beri reaksi ❤️jika siap untuk kuis berikutnya!**

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

---

### Penjelasan Tambahan:

- **Cara kerja `reduce()`**:

```

Langkah 1: 1 * 2 = 2

Langkah 2: 2 * 3 = 6

Langkah 3: 6 * 4 = 24

```

- **Perbedaan Utama**:

- `map()` → transformasi semua elemen

- `filter()` → seleksi elemen

- `reduce()` → agregasi elemen menjadi satu nilai

### Catatan:
- Istilah teknis seperti *map*, *filter*, *reduce*, *iterable*, dan *lambda*
dipertahankan dalam bahasa Inggris karena sudah menjadi standar di
komunitas pemrograman Indonesia.

- Contoh kode tidak diubah untuk menjaga keakuratan sintaks Python.

________________________________________59

**Apa output dari kode berikut?**

```python

From functools import reduce

Nums = [1, 2, 3, 4, 5]

Result = reduce(lambda x, y: x + y, filter(lambda x: x % 2 == 0, nums))

Print(result)

```

A. 9

B. 6

C. 15

D. 10

### **Jawaban yang Benar: B) 6**

**Penjelasan Langkah demi Langkah:**

1. **Operasi `filter()`**:

- Menyaring bilangan genap dari list `[1, 2, 3, 4, 5]`

- `filter(lambda x: x % 2 == 0, nums)` → **`[2, 4]`**


2. **Operasi `reduce()`**:

- Menjumlahkan semua elemen hasil filter secara kumulatif:

- Langkah 1: `x=2` (elemen pertama), `y=4` (elemen kedua) → `2 + 4


= 6`

- Hasil akhir: **6**

**Output**:

```

```

**Beri reaksi ❤️jika jawabanmu benar!**

---

### Catatan:

- **`filter()`** hanya mengambil angka genap (2 dan 4).

- **`reduce()`** menjalankan operasi penjumlahan:

```

2 (angka pertama) + 4 (angka kedua) = 6

```

- Angka ganjil (1, 3, 5) diabaikan oleh `filter()`.

_______________________________________60

***Jawaban Benar: B. 6***

Ini sedikit rumit, tapi beberapa dari kalian tetap menjawab dengan benar
😊
`filter(lambda x: x % 2 == 0, nums)` → menyaring bilangan genap → `[2,
4]`

`reduce(lambda x, y: x + y, [2, 4])` → `2 + 4 = 6`

Jadi jawaban yang benar adalah **6**

*Beri reaksi ❤️jika jawabanmu benar*

### Penjelasan Detail:

1. **Fase Penyaringan**:

- List asli: `[1, 2, 3, 4, 5]`

- `filter()` hanya mengambil angka genap: **2** dan **4**

- Hasil saringan: `[2, 4]`

2. **Fase Pengurangan**:

- `reduce()` menjumlahkan secara berurutan:

- Langkah 1: `2 + 4 = 6`

- Hasil akhir: **6**

 Angka ganjil (1, 3, 5) diabaikan karena tidak memenuhi kondisi `x %


2 == 0`.

________________________________________61

Berikut terjemahan dalam Bahasa Indonesia:

**Mari Pahami Konsep Berguna Berikutnya dalam Seri Belajar Python**


***Modul dan Paket***

Ini membantu Anda mengatur kode lebih baik dan menggunakannya


kembali secara efisien.

### **1. Apa Itu Modul?**

Modul adalah file `.py` yang berisi definisi Python, fungsi, kelas, atau
variabel.

*Contoh:*

File `math_utils.py`:

```python

Def tambah(a, b):

Return a + b

```

Bisa digunakan di file lain dengan:

```python

Import math_utils

Print(math_utils.tambah(2, 3)) # Output: 5

```

Atau impor spesifik:

```python

From math_utils import tambah

Print(tambah(2, 3))

```
### **2. Apa Itu Paket?**

Paket adalah direktori berisi beberapa modul Python terkait dan file
`__init__.py`. Ini membantu menyusun proyek besar.

*Struktur folder contoh:*

```

Myproject/

├── math_utils/

│ ├── __init__.py

│ └── operations.py

```

Kemudian impor dengan:

```python

From math_utils.operations import tambah

```

### **3. Modul Standar yang Perlu Diketahui**

Python menyertakan banyak modul bawaan:

- `math` → Operasi matematika

- `random` → Menghasilkan angka acak

- `datetime` → Bekerja dengan tanggal & waktu

- `os` → Berinteraksi dengan sistem operasi

- `sys` → Mengakses parameter spesifik sistem

- `json` → Menangani data JSON


Anda juga bisa instal modul eksternal dengan `pip`:

```bash

Pip install requests

```

Lalu gunakan dalam kode:

```python

Import requests

Response = requests.get(‘https://contoh.com’)

```

Keterampilan ini penting saat proyek Anda berkembang, terutama saat


bekerja dengan API, *web scraping*, otomasi, atau proyek dunia nyata.

**Beri reaksi ❤️jika siap untuk kuis tentang Modul & Paket!**

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

---

### Catatan:

- Istilah teknis seperti *module*, *package*, *import*, dan nama modul


(`math`, `random`, dll.) dipertahankan dalam bahasa Inggris karena
sudah standar.

- Sintaks kode tidak diubah untuk menjaga keakuratan.

- Penjelasan menggunakan bahasa Indonesia natural dengan istilah yang


konsisten.

_______________________________________62
Berikut terjemahan dalam Bahasa Indonesia:

**Pemrograman Python**

Manakah dari berikut ini yang merupakan cara yang benar untuk
mengimpor fungsi `sqrt` dari modul `math`?

A. `from math.sqrt import*`

B. `import sqrt from math`

C. `from math import sqrt`

D. `import math.sqrt`

### **Jawaban yang Benar: C) `from math import sqrt`**

**Penjelasan:**

Sintaks yang valid di Python untuk mengimpor fungsi spesifik dari modul
adalah:

```python

From nama_modul import nama_fungsi

```

Sehingga:

- `from math import sqrt` → Benar (mengimpor fungsi `sqrt` dari


modul `math`).

**Alasan opsi lain salah:**

- **A** dan **D**: Sintaks tidak valid (tidak menggunakan pola `from ...
import ...` yang benar).

- **B**: Urutan kata kunci salah (harus `from ... import ...`, bukan
`import ... from ...`).
**Contoh penggunaan:**

```python

From math import sqrt

Print(sqrt(16)) # Output: 4.0

```

**Beri reaksi ❤️jika jawabanmu benar!**

---

### Catatan:

- Opsi C adalah satu-satunya sintaks yang diakui Python untuk mengimpor


fungsi spesifik.

- Modul `math` adalah modul bawaan Python yang berisi fungsi


matematika.

________________________________________63

***Jawaban Benar: C***

Sintaks yang benar untuk mengimpor fungsi spesifik dari modul adalah:

```python

From nama_modul import nama_fungsi

```

Jadi, `from math import sqrt` adalah cara yang benar.

**Alasan opsi lain salah:**

- **A**: Sintaks tidak valid.

- **B**: Tidak valid di Python.


- **D**: Tidak valid — Anda harus melakukan `import math` lalu
menggunakan `math.sqrt()`.

*Beri reaksi ❤️jika jawabanmu benar!*

---

### Contoh Penggunaan Benar:

```python

From math import sqrt

Print(sqrt(9)) # Output: 3.0

```

```python

Import math

Print(math.sqrt(9)) # Cara alternatif yang valid

```

________________________________________64

Berikut terjemahan dalam Bahasa Indonesia:

**Sekarang, Mari Beralih ke Topik Penting Berikutnya dalam Seri Belajar


Python**

***Scope & Variabel Global***

### **1. Apa Itu Scope?**


*Scope* mengacu pada area dalam program di mana variabel dikenali dan
dapat digunakan. Ada beberapa jenis *scope* di Python:

- **Local Scope (Scope Lokal)**:

Variabel yang didefinisikan di dalam fungsi atau blok kode. Hanya dapat
diakses di dalam fungsi tersebut.

- **Global Scope (Scope Global)**:

Variabel yang didefinisikan di luar semua fungsi. Dapat diakses dari


mana saja, termasuk di dalam fungsi.

### **2. Variabel Global**

Variabel global didefinisikan di luar semua fungsi dan dapat diakses di


seluruh program. Namun, untuk memodifikasinya di dalam fungsi, Anda
perlu menggunakan keyword `global`.

*Contoh:*

```python

X = 10 # variabel global

Def fungsi_saya():

Global x # menggunakan variabel global

X = 20 # memodifikasi variabel global

Fungsi_saya()

Print(x) # Output: 20

```

Tanpa `global`, Python akan memperlakukan variabel sebagai variabel


lokal di dalam fungsi.
### **3. Variabel Lokal**

Variabel lokal didefinisikan di dalam fungsi dan hanya dapat diakses di


dalam fungsi tersebut.

*Contoh:*

```python

Def fungsi_saya():

X = 10 # variabel lokal

Print(x)

Fungsi_saya()

# print(x) ❌ Error: x tidak terdefinisi di luar fungsi

```

### **4. Praktik Terbaik untuk Variabel Global**

Meskipun berguna, sebaiknya hindari penggunaan variabel global secara


berlebihan karena:

- Dapat menyulitkan *debugging* dan perawatan kode.

- Lebih baik meneruskan variabel sebagai argumen fungsi atau


mengembalikan nilai dari fungsi.

**Beri reaksi ❤️jika siap untuk kuis berikutnya!**

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

🔗 **Python Coding**:
https://whatsapp.com/channel/0029Vau5fZECsU9HJFLacm2a

---

### Catatan:

- Istilah teknis seperti *scope*, *global variable*, dan *local variable*


dipertahankan dalam bahasa Inggris karena sudah standar.

- Contoh kode tidak diubah untuk menjaga keakuratan sintaks Python.

- Penjelasan menggunakan bahasa Indonesia yang natural dengan istilah


konsisten.

_______________________________________65

Berikut terjemahan dan jawaban dalam Bahasa Indonesia:

**Pemrograman Python**

Apa output dari kode berikut?

```python

Total_items = 0

Def add_item(count):

Global total_items

Total_items += count

Add_item(5)

Print(total_items)

```
A. 5

B. 0

C. Error

D. 10

### **Jawaban yang Benar: A) 5**

**Penjelasan:**

1. **Variabel Global**:

`total_items = 0` dideklarasikan di luar fungsi → variabel global.

2. **Keyword `global`**:

Dalam fungsi `add_item`, `global total_items` memberi tahu Python


untuk menggunakan variabel global (bukan membuat variabel lokal baru).

3. **Modifikasi Variabel**:

`add_item(5)` menambahkan 5 ke `total_items` → `0 + 5 = 5`.

4. **Output**:

`print(total_items)` mencetak nilai terbaru → **5**.

**Kode ini valid dan tidak error** karena penggunaan `global` yang benar.

**Beri reaksi ❤️jika jawabanmu benar!**

---

### Catatan:
- Tanpa keyword `global`, kode akan **error** karena Python akan
menganggap `total_items` sebagai variabel lokal yang belum
didefinisikan.

- Dengan `global`, modifikasi variabel global di dalam fungsi


diperbolehkan.

________________________________________66

***Jawaban: A. 5***

Dalam kode ini, kata kunci `global` digunakan untuk merujuk ke variabel
global `total_items` di dalam fungsi `add_item()`.

Saat kita memanggil `add_item(5)`, variabel global `total_items`


diperbarui menjadi `0 + 5`. Jadi, saat kita mencetaknya, outputnya adalah
**5**.

*Beri reaksi ❤️jika jawabanmu benar*

---

### Catatan Tambahan:

- Deklarasi `global` penting agar Python tahu bahwa kita ingin


memodifikasi variabel global, bukan membuat variabel lokal baru.

- Tanpa `global`, kode akan menghasilkan `UnboundLocalError` karena


Python akan menganggap `total_items` sebagai variabel lokal yang belum
diinisialisasi.

________________________________________67

Berikut terjemahan dalam Bahasa Indonesia:

**Sekarang, Mari Beralih ke Topik Berikutnya dalam Seri Belajar Python**


***Bekerja dengan Tanggal & Waktu*** 📅⏰

### **1. Mengimpor Modul `datetime`**

Untuk bekerja dengan tanggal dan waktu, Python menyediakan modul


bawaan bernama `datetime`.

```python

Import datetime

```

### **2. Mendapatkan Tanggal dan Waktu Saat Ini**

```python

From datetime import datetime

Sekarang = datetime.now()

Print(sekarang) # Menampilkan tanggal dan waktu lengkap

Print(sekarang.date()) # Hanya bagian tanggal

Print(sekarang.time()) # Hanya bagian waktu

```

### **3. Membuat Tanggal atau Waktu Spesifik**

```python

From datetime import datetime

Ulang_tahun = datetime(1995, 8, 25) # Tahun, Bulan, Hari

Print(ulang_tahun)
```

Bisa juga menambahkan jam, menit, detik:

```python

Waktu_spesifik = datetime(2023, 10, 5, 15, 30, 45)

```

### **4. Memformat Tanggal (`strptime` & `strftime`)**

- **`strftime()`** → Konversi `datetime` ke string dengan format yang


diinginkan:

```python

Sekarang = datetime.now()

Print(sekarang.strftime(“%Y-%m-%d”)) # Output: 2025-05-01

Print(sekarang.strftime(“%d/%m/%Y”)) # Output: 01/05/2025

```

- **`strptime()`** → Konversi string kembali ke objek `datetime`:

```python

Date_str = “01/05/2025”

Date_obj = datetime.strptime(date_str, “%d/%m/%Y”)

Print(date_obj)

```

### **5. Operasi Matematika dengan Tanggal (`timedelta`)**

Gunakan `timedelta` untuk menambah/mengurangi hari, jam, dll:

```python

From datetime import timedelta


Hari_ini = datetime.now()

Besok = hari_ini + timedelta(days=1)

Kemarin = hari_ini – timedelta(days=1)

Print(“Besok:”, besok)

Print(“Kemarin:”, kemarin)

```

Menghitung selisih antara dua tanggal:

```python

D1 = datetime(2025, 5, 10)

D2 = datetime(2025, 5, 1)

Selisih = d1 – d2

Print(selisih.days) # Output: 9

```

### **Cara Menghitung Usia Seseorang**

```python

Tanggal_lahir = datetime(1998, 4, 15)

Hari_ini = datetime.now()

Usia = hari_ini.year – tanggal_lahir.year

# Sesuaikan jika ulang tahun tahun ini belum terjadi

If (hari_ini.month, hari_ini.day) < (tanggal_lahir.month, tanggal_lahir.day):

Usia -= 1

Print(“Usia:”, usia)

```
### **Kode Format Tanggal yang Berguna**

- `%Y` – Tahun lengkap (2025)

- `%y` – Tahun pendek (25)

- `%m` – Bulan (01-12)

- `%d` – Hari (01-31)

- `%H` – Jam (00-23)

- `%M` – Menit (00-59)

- `%S` – Detik (00-59)

Topik ini sangat berguna untuk otomasi, analisis data, hingga *web
scraping*.

**Beri reaksi ❤️jika siap untuk kuis berikutnya!**

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

---

### Catatan:

- Istilah teknis seperti `datetime`, `strftime`, `strptime`, dan `timedelta`


dipertahankan dalam bahasa Inggris karena sudah standar.

- Contoh kode tidak diubah untuk menjaga keakuratan sintaks Python.

- Penjelasan menggunakan bahasa Indonesia natural dengan istilah


konsisten.

________________________________________68
**Terjemahan dalam Bahasa Indonesia:**

Pemrograman Python

Apa output dari kode berikut?

```python

From datetime import datetime

Date_str = “30-04-2025”

Date_obj = datetime.strptime(date_str, “%d-%m-%Y”)

Print(date_obj.strftime(“%B %d, %Y”))

```

A. April 30, 2025

B. 04-30-2025

C. 30-April-2025

D. 2025/04/30

**Jawaban:**

**A. April 30, 2025**

### Penjelasan:

1. **`datetime.strptime(date_str, “%d-%m-%Y”)`**

- Mengonversi string `”30-04-2025”` menjadi objek datetime.

- Format `%d-%m-%Y` artinya: **hari** (30), **bulan** (04), **tahun**


(2025).

2. **`date_obj.strftime(“%B %d, %Y”)`**


- Mengonversi objek datetime kembali ke string dengan format baru.

- `%B`: Nama bulan penuh dalam bahasa Inggris (*April*).

- `%d`: Hari (30).

- `%Y`: Tahun (2025).

- Format akhir: `April 30, 2025`.

> **Catatan**:

> - Output menggunakan nama bulan dalam **bahasa Inggris** karena `


%B` bergantung pada pengaturan lokal sistem.

> - Jika sistem menggunakan lokal Indonesia, output bisa berubah (misal:
*April* menjadi *April* tetap sama karena tidak ada terjemahan khusus).

______________________________________69

**Jawaban Benar: A. April 30, 2025**

Mari kita uraikan:

*1. `from datetime import datetime`*

Mengimpor kelas `datetime` dari modul `datetime`.

*2. `date_str = “30-04-2025”`*

Ini adalah tanggal dalam format **DD-MM-YYYY** (Hari-Bulan-Tahun).

*3. `datetime.strptime(date_str, “%d-%m-%Y”)`*

Mengonversi string menjadi objek datetime menggunakan format yang


sesuai:

- `strptime()` = **”string parse time”** (parsing string menjadi waktu).

- `%d` = Hari (30), `%m` = Bulan (04), `%Y` = Tahun (2025).

*4. `date_obj.strftime(“%B %d, %Y”)`*


Memformat objek datetime menjadi string yang mudah dibaca:

- `%B` → Nama bulan penuh (**April**)

- `%d` → Tanggal tanpa leading zero (**30**, bukan 30 dengan nol di


depan)

- `%Y` → Tahun lengkap (**2025**)

**Output akhir: `”April 30, 2025”`**

❤️*Reaksi jika jawabanmu benar!*

________________________________________70

**Terjemahan dalam Bahasa Indonesia:**

Sekarang, mari kita lanjutkan ke topik berikutnya dalam Seri Belajar


Python.

*Kelas dan Objek*

*Apa itu Kelas?*

Kelas adalah cetak biru — seperti rencana arsitek untuk membangun


rumah.

Dalam Python, Anda membuat kelas menggunakan kata kunci `class`.

```python

Class Dog:

# Ini adalah sebuah kelas

Pass

```

Ini belum melakukan banyak hal — hanya rencana kosong.


*Apa itu Objek?*

Objek adalah sesuatu yang dibuat dari kelas — seperti rumah nyata yang
dibangun dari rencana.

```python

My_dog = Dog()

```

Sekarang, `my_dog` adalah objek (atau *instance*) dari kelas `Dog`.

*Mari Buat Contoh yang Berguna*

*1. Definisikan Kelas*

```python

Class Dog:

Def __init__(self, name, breed):

Self.name = name # Atribut

Self.breed = breed # Atribut

Def bark(self):

Print(f”{self.name} says: Woof!”)

```

- `__init__()` adalah metode khusus yang berjalan otomatis saat objek


dibuat.

- `self` merujuk ke objek yang sedang dibuat.

- `name` dan `breed` adalah atribut.

*2. Buat Objek*

```python

Dog1 = Dog(“Bruno”, “Labrador”)

Dog2 = Dog(“Tommy”, “Pug”)

```
Anda telah membuat dua objek dari kelas `Dog`.

*3. Panggil Metode pada Objek*

```python

Dog1.bark() # Output: Bruno says: Woof!

Dog2.bark() # Output: Tommy says: Woof!

```

*Contoh Lain: Kelas Siswa (Student)*

```python

Class Student:

Def __init__(self, name, grade):

Self.name = name

Self.grade = grade

Def display_info(self):

Print(f”Nama: {self.name}, Kelas: {self.grade}”)

S1 = Student(“Alice”, “A”)

S2 = Student(“Bob”, “B”)

S1.display_info() # Output: Nama: Alice, Kelas: A

S2.display_info() # Output: Nama: Bob, Kelas: B

```

*Ringkasan Singkat:*

- **Kelas**: Cetak biru atau desain untuk membuat objek.

- **Objek**: Instance yang dibuat dari kelas.


- **`__init__`**: Metode khusus (*konstruktor*) yang berjalan otomatis
saat objek dibuat.

- **`self`**: Merujuk ke objek itu sendiri.

- **Metode**: Fungsi dalam kelas yang melakukan aksi pada objek.

- **Atribut**: Variabel yang dimiliki objek, biasanya didefinisikan di


`__init__`.

❤️*Beri reaksi jika Anda siap untuk kuis berikutnya*

**Seri Belajar Python**:


[https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527]
(https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527)

________________________________________71

**Terjemahan dalam Bahasa Indonesia:**

Pemrograman Python

Apa output dari kode berikut?

```python

Class Student:

Def _init_(self, name):

Self.name = name

Def greet(self):

Return “Hello, “ + self.name

S1 = Student(“Amit”)

Print(s1.greet())

```
A. Hello, Student

B. Hello, Amit

C. Amit

D. Error: greet() take 0 positional arguments

**Jawaban Benar:**

**D. Error: greet() take 0 positional arguments**

### Penjelasan:

Kode mengandung **kesalahan kritis**:

1. **Metode `__init__` salah ditulis** sebagai `_init_` (hanya satu


underscore `_`).

- Seharusnya: `__init__` (dua underscore di awal dan akhir: `__`).

- Akibatnya: Python tidak mengenali ini sebagai konstruktor.

2. **Saat membuat objek**:

```python

S1 = Student(“Amit”) # Error!

```

- Konstruktor default Python (tanpa argumen) dipanggil, tapi diberi


argumen `”Amit”`.

- Error yang muncul:

```python

TypeError: Student() takes no arguments

```

3. **Jika perbaikan dilakukan** (misal, ubah `_init_` menjadi `__init__`),


output akan menjadi:

```python
Hello, Amit # Jawaban B

```

**Tapi sesuai kode asli, outputnya adalah error.**

5. **Opsi D tidak sepenuhnya akurat** karena pesan error sebenarnya


terkait *pembuatan objek*, bukan pemanggilan `greet()`. Namun,
ini satu-satunya opsi yang menunjukkan error.

### Solusi Perbaikan:

Ganti `_init_` dengan `__init__` (dua underscore):

```python

Class Student:

Def __init__(self, name): # Perbaikan di sini

Self.name = name

Def greet(self):

Return “Hello, “ + self.name

S1 = Student(“Amit”)

Print(s1.greet()) # Output: Hello, Amit (Jawaban B)

```

_______________________________________72

**Jawaban Benar: B. Hello, Amit**

` s1 = Student(“Amit”) ` membuat objek `s1` dengan atribut `name =


“Amit”`.
` s1.greet() ` memanggil metode `greet()`, yang mengembalikan `”Hello,
“ + self.name`.

Jadi, outputnya adalah **`”Hello, Amit”`**.

❤️*Beri reaksi jika jawabanmu benar!*

### Catatan Penting:

**Penjelasan di atas mengasumsikan kode sudah diperbaiki** (metode


`__init__` ditulis dengan benar menggunakan dua underscore `__`).

Pada kode asli di soal sebelumnya:

```python

Def _init_(self, name): # SALAH! (seharusnya __init__)

```

Akan menyebabkan **error** (Opsi D). Jika Anda menjawab B, berarti


Anda telah memahami konsep kelas dengan benar untuk kode yang sudah
diperbaiki.

________________________________________73

**Terjemahan dalam Bahasa Indonesia:**

*Sekarang, mari lanjut ke topik berikutnya dalam Seri Belajar Python*

Bagi yang baru bergabung, silakan pelajari topik sebelumnya di:

[https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527]
(https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527)

*Pewarisan (Inheritance) dan Polimorfisme (Polymorphism)*


**Apa itu Pewarisan?**

Pewarisan adalah konsep penting dalam Pemrograman Berorientasi Objek


(OOP). Ini memungkinkan satu kelas mewarisi properti dan metode dari
kelas lain. Konsep ini membantu membuat hierarki kelas, di mana kelas
dasar (*parent class*) diperluas oleh satu atau lebih kelas turunan (*child
classes*).

Secara sederhana, pewarisan memungkinkan Anda menggunakan kembali


kode dengan membuat kelas baru berdasarkan kelas yang sudah ada.

*Contoh Dunia Nyata:*

Bayangkan kelas induk bernama `Animal` dan dua kelas turunan: `Dog`
dan `Cat`. Kelas `Dog` dan `Cat` mewarisi properti dari `Animal` (seperti
`name` dan `age`), dan bisa menambahkan perilaku spesifik (`bark`
untuk anjing, `meow` untuk kucing).

```python

Class Animal:

Def __init__(self, name, age):

Self.name = name

Self.age = age

Def speak(self):

Return “Animal sound”

Class Dog(Animal):

Def speak(self):

Return “Woof!”

Class Cat(Animal):

Def speak(self):
Return “Meow!”

# Membuat objek

Dog = Dog(“Buddy”, 3)

Cat = Cat(“Whiskers”, 2)

Print(dog.speak()) # Output: Woof!

Print(cat.speak()) # Output: Meow!

```

*Penjelasan:*

- `Animal` adalah kelas induk (*base class*).

- `Dog` dan `Cat` adalah kelas turunan yang mewarisi dari `Animal`.

- Keduanya *mengganti (override)* metode `speak()` untuk perilaku


spesifik.

**Apa itu Polimorfisme?**

Polimorfisme adalah konsep OOP lain yang memungkinkan satu metode


berperilaku berbeda tergantung objeknya. Singkatnya, Anda bisa
memanggil metode yang sama pada objek berbeda, tetapi responsnya
unik untuk setiap objek.

*Contoh Dunia Nyata:*

Pada kelas `Animal`, metode `speak()` menghasilkan output berbeda


untuk `Dog` (“Woof!”) dan `Cat` (“Meow!”).

```python

# Nama metode sama, perilaku berbeda

Def animal_sound(animal):

Print(animal.speak())
# Demonstrasi polimorfisme

Animal_sound(dog) # Output: Woof!

Animal_sound(cat) # Output: Meow!

```

*Penjelasan:*

Fungsi `animal_sound()` memanggil metode `speak()`.

Perilakunya berbeda tergantung objek yang diteruskan (`Dog` atau


`Cat`).

Ini disebut *method overriding* (bentuk polimorfisme).

**Jenis Polimorfisme di Python:**

1. *Method Overloading:*

Python tidak mendukung overloading langsung (beberapa metode


dengan nama sama tetapi parameter berbeda), tetapi bisa dicapai dengan
parameter default:

```python

Class Example:

Def greet(self, name=”Guest”):

Return f”Halo, {name}!”

Obj = Example()

Print(obj.greet()) # Output: Halo, Guest!

Print(obj.greet(“Alice”)) # Output: Halo, Alice!

```

2. *Method Overriding:*

Terjadi ketika kelas turunan menyediakan versi sendiri dari metode yang
sudah ada di kelas induk (seperti contoh `speak()` di atas).
**Hubungan Pewarisan dan Polimorfisme:**

Keduanya bekerja beriringan dalam OOP:

- Pewarisan memungkinkan kelas turunan mewarisi metode dari kelas


induk.

- Polimorfisme memungkinkan kelas turunan memodifikasi (mengganti)


metode tersebut.

```python

Class Animal:

Def sound(self):

Return “Suara umum”

Class Dog(Animal):

Def sound(self):

Return “Woof!”

Class Cat(Animal):

Def sound(self):

Return “Meow!”

# Membuat objek

Animals = [Dog(), Cat()]

# Demonstrasi polimorfisme

For animal in animals:

Print(animal.sound())

```

*Output:*

```

Woof!
Meow!

```

Meski memanggil metode `sound()` yang sama, responsnya berbeda


berdasarkan objek.

**Poin Penting:**

- **Pewarisan**: Memungkinkan penggunaan kembali kode dan


pembuatan hierarki kelas.

- **Polimorfisme**: Membuat kode lebih fleksibel dan mudah


dikembangkan.

**Pertanyaan Interview Umum:**

1. Jelaskan pewarisan dan polimorfisme di Python beserta contohnya.

2. Apa itu *method overriding*? Beri contoh.

3. Apa itu *multiple inheritance* dan masalah potensialnya di Python?

4. Bagaimana polimorfisme meningkatkan fleksibilitas program?

5. Apa perbedaan kelas induk dan kelas turunan?

6. Bagaimana cara menerapkan *method overloading* di Python?

❤️*Beri reaksi jika siap untuk kuis tentang **Pewarisan & Polimorfisme***

________________________________________74

Berikut terjemahan materi tentang **Decorators** dalam Python ke


bahasa Indonesia:

Sekarang, mari beralih ke topik penting berikutnya dalam **Seri


Pembelajaran Python**:

***Decorators***
Decorator adalah fungsi yang menambahkan fungsionalitas ekstra ke
fungsi lain tanpa mengubah kode aslinya.

Bayangkan seperti membungkus hadiah — hadiahnya (fungsi) tetap sama,


tetapi Anda menambahkan kemasan indah (fitur tambahan).

***Bagaimana Cara Kerjanya?***

Di Python, fungsi adalah *first-class objects* — mereka bisa diteruskan


seperti variabel. Inilah yang memungkinkan decorator ada.

***Contoh Sintaks:***

```python

Def greet(func):

Def wrapper():

Print(“Halo!”)

Func()

Print(“Semoga harimu menyenangkan!”)

Return wrapper

@greet

Def sebut_nama():

Print(“Saya sedang belajar Python.”)

Sebut_nama()

```

***Output:***
```

Halo!

Saya sedang belajar Python.

Semoga harimu menyenangkan!

```

Di sini, `@greet` adalah decorator yang membungkus `sebut_nama()`.

***Tanpa Menggunakan Simbol @:***

```python

Def greet(func):

Def wrapper():

Print(“Halo!”)

Func()

Print(“Semoga harimu menyenangkan!”)

Return wrapper

Def sebut_nama():

Print(“Saya sedang belajar Python.”)

Sebut_nama = greet(sebut_nama)

Sebut_nama()

```

Hasilnya sama!

***Di Mana Decorators Digunakan?***

- Pencatatan log (*logging*)


- Kontrol akses

- Pengukuran waktu eksekusi fungsi

- Memodifikasi perilaku untuk framework (seperti Flask, Django)

***Beri reaksi ❤️jika Anda siap untuk kuis berikutnya tentang decorators!
***

📚 **Seri Pembelajaran Python**:

[https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527]
(https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527)

---

### Perubahan Penting:

1. Istilah teknis seperti *decorators*, *logging*, *framework* tetap dalam


bentuk asli (karena istilah baku pemrograman).

2. Analogi “membungkus hadiah” disesuaikan dengan konteks bahasa


Indonesia.

3. Nama fungsi diubah agar lebih intuitif (`say_name` → `sebut_nama`).

4. Output/print disesuaikan dengan terjemahan natural (“Hello!” →


“Halo!”).

5. Struktur penulisan (seperti bold/italic) dipertahankan sesuai format asli.

________________________________________75

Berikut terjemahan soal pilihan ganda tentang Python decorator dalam


bahasa Indonesia:

**Pemrograman Python**

Manakah yang paling tepat mendeskripsikan fungsi *decorator* dalam


Python?
A. Menambahkan fungsionalitas tambahan ke fungsi yang sudah ada
**tanpa memodifikasinya**

B. Membuat kelas baru dari kelas yang sudah ada

C. Mengubah tipe kembalian (*return type*) suatu fungsi

D. Menjalankan dua fungsi secara bersamaan

### Penjelasan:

- **Opsi A** adalah jawaban benar sesuai konsep decorator (*extend


functionality without changing source code*).

- Istilah kunci:

- *Decorator* → **decorator** (dipertahankan sebagai istilah teknis)

- *Functionality* → **fungsionalitas**

- *Without modifying* → **tanpa memodifikasi**

- *Simultaneously* → **secara bersamaan**

________________________________________76

Berikut terjemahannya dalam bahasa Indonesia:

***Jawaban Benar: A***

Sebuah decorator digunakan untuk **memodifikasi atau memperluas


perilaku** suatu fungsi **tanpa mengubah kode aslinya**. Decorator
membungkus fungsi asli dan menambahkan perilaku tambahan *sebelum
atau sesudah* pemanggilannya.

*Beri reaksi ❤️jika jawabanmu benar!*


### Penjelasan penerjemahan:

1. **Mempertahankan istilah teknis**:

- *Decorator* → **decorator** (istilah baku dalam pemrograman Python)

- *Behavior* → **perilaku** (konteks fungsionalitas fungsi)

2. **Frasa kunci**:

- *Modify or extend* → **memodifikasi atau memperluas**

- *Without changing its actual code* → **tanpa mengubah kode


aslinya**

- *Wraps the original function* → **membungkus fungsi asli**

- *Adds extra behavior* → **menambahkan perilaku tambahan**

3. **Konsistensi**:

- Mengikuti pola terjemahan sebelumnya (*without modifying* →


**tanpa mengubah**)

- Format penekanan (bold/italic) dipertahankan sesuai gaya


pembelajaran.

4. **Naturalisasi**:

- *Before or after the call* → **sebelum atau sesudah pemanggilannya**


(lebih natural dibanding “sebelum/sesudah dipanggil”)

________________________________________77

Berikut terjemahan materi **Generators & Iterators** dalam bahasa


Indonesia:

Sekarang, mari beralih ke topik penting berikutnya dalam **Seri


Pembelajaran Python**:
***Generators & Iterators***

*1. Apa Itu Iterator?*

Iterator adalah objek yang memungkinkan Anda melakukan iterasi


(perulangan) pada rangkaian nilai. Iterator mengimplementasikan dua
metode spesial:

- `__iter__()` → Mengembalikan objek iterator itu sendiri

- `__next__()` → Mengembalikan nilai berikutnya; menimbulkan


`StopIteration` jika data habis

*Contoh:*

```python

My_list = [1, 2, 3]

Iterator = iter(my_list)

Print(next(iterator)) # 1

Print(next(iterator)) # 2

Print(next(iterator)) # 3

```

*2. Apa Itu Generator?*

Generator adalah cara lebih sederhana untuk membuat iterator


menggunakan fungsi dan kata kunci `yield`.

*Perbedaan Utama:*

- Menggunakan `yield` alih-alih `return`

- Mempertahankan status antar pemanggilan

- Lebih efisien memori untuk data besar

*Contoh:*
```python

Def countdown(n):

While n > 0:

Yield n

N -= 1

For i in countdown(3):

Print(i)

```

*Output:*

```

```

*3. Ekspresi Generator*

```python

Squares = (x*x for x in range(5))

For num in squares:

Print(num)

```

Mirip dengan *list comprehension*, tetapi mengembalikan generator


(bukan list).

*4. Mengapa Menggunakan Generator?*

- Efisien untuk membaca file besar atau memproses aliran data

- *Lazy evaluation*: tidak menyimpan seluruh rangkaian di memori


- Cocok untuk *pipeline*, *streaming API*, dll.

**Kesimpulan Praktis:**

- Jika perlu membuat kelas iterable, gunakan `__iter__()` dan `__next__()`

- Jika perlu iterasi cepat pada rangkaian besar — gunakan `yield`

*Beri reaksi ❤️jika Anda siap untuk kuis berikutnya tentang decorators!*

📚 **Seri Pembelajaran Python**:

[https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527]
(https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527)

### Catatan Penerjemahan:

1. **Istilah teknis** dipertahankan dalam bentuk asli:

- *Iterator*, *generator*, `yield`, `StopIteration`, *lazy evaluation*,


*pipeline*, *streaming API*

2. **Penyesuaian natural**:

- “iterate over a sequence” → “melakukan iterasi pada rangkaian nilai”

- “exhausted” → “data habis”

- “maintains state between calls” → “mempertahankan status antar


pemanggilan”

3. **Konsistensi format**:

- Kode program tetap dalam blok terpisah

- Poin-poin penting menggunakan format teks tebal/italic

- Spasi dan struktur dipertahankan untuk kejelasan

________________________________________78
Berikut terjemahan pertanyaan dan pilihan jawaban tentang *generators*
dalam Python ke bahasa Indonesia:

**Pemrograman Python**

Manakah yang **tidak benar** tentang generator di Python?

A. Generator menggunakan kata kunci `yield` untuk mengembalikan nilai


satu per satu

B. Generator lebih efisien memori dibandingkan list

C. Fungsi generator mengembalikan objek iterator

D. Anda dapat menggunakan kembali objek generator yang sama setelah


habis

### Catatan:

- **Pernyataan D salah** (jawaban yang diminta karena pertanyaan


meminta yang *tidak benar*).

Generator yang sudah habis (*exhausted*) tidak bisa digunakan ulang.


Contoh:

```python

Gen = (x for x in range(3))

List(gen) # [0, 1, 2]

List(gen) # [] (kosong karena sudah habis)

```

- Istilah teknis:

- *Generator* → **generator**

- *yield* → **`yield`** (dipertahankan)

- *Exhausted* → **habis**

- *Iterator object* → **objek iterator**


________________________________________79

Berikut terjemahan penjelasan jawabannya dalam bahasa Indonesia:

***Jawaban Benar: D***

Setelah generator habis (*exhausted*) – semua nilai `yield` telah


dikonsumsi – generator **tidak dapat digunakan kembali**. Anda perlu
memanggil fungsi generator lagi untuk mendapatkan iterator baru.

*Beri reaksi ❤️jika jawabanmu benar!*

### Penjelasan penerjemahan:

1. **Istilah kunci**:

- *Exhausted* → **habis**

- *Yields are consumed* → **nilai `yield` telah dikonsumsi**

- *Cannot be reused* → **tidak dapat digunakan kembali**

- *Fresh iterator* → **iterator baru**

2. **Penekanan pada kesalahan umum**:

- Poin D dalam soal merupakan kesalahan konsep umum (banyak yang


mengira generator bisa dipakai ulang setelah habis).

3. **Naturalisasi kalimat**:

- “You need to call...” → **”Anda perlu memanggil...”**

- Mempertahankan istilah teknis `yield` dan *iterator* karena sudah


menjadi kosakata baku di pemrograman Python.

________________________________________80
Berikut terjemahan soal pemrograman Python beserta pilihan jawabannya
dalam bahasa Indonesia:

**Pemrograman Python**

Apa Output dari kode berikut?

```python

Def even_numbers(n):

Num = 0

While num < n:

Yield num

Num += 2

Gen = even_numbers(5)

Print(list(gen))

```

A. `[0, 1, 2, 3, 4]`

B. `[0, 2, 4]`

C. `[0, 2, 4, 6, 8]`

D. `[0, 2, 4, 6]`

### Catatan:

- **Jawaban benar: B**

Generator akan menghasilkan bilangan genap dimulai dari 0 hingga


kurang dari 5:
0 (0 < 5 → yield)

2 (2 < 5 → yield)

4 (4 < 5 → yield)

6 (6 ≥ 5 → berhenti)

- Perbaikan typo pada kode asli:

- `dev` → `def` (diperbaiki dalam terjemahan)

- `While` → `while` (huruf kecil)

- *Generator* berhenti saat `num >= n` sesuai kondisi `while num <
n`.

________________________________________81

Berikut terjemahan penjelasan jawabannya dalam bahasa Indonesia:

***Jawaban: B) [0, 2, 4]***

Generator `even_numbers()` menghasilkan bilangan genap mulai dari 0


hingga **tepat sebelum** angka `n` yang diberikan. Dalam kasus ini, `n =
5`, sehingga generator menghasilkan 0, 2, dan 4. Ketika dikonversi ke list
menggunakan `list(gen)`, outputnya menjadi `[0, 2, 4]`.

*Beri reaksi ❤️jika jawabanmu benar!*

### Penjelasan tambahan:

- **Batas eksklusif**: Kondisi `while num < n` berarti generator berhenti


saat `num` mencapai atau melebihi `n` (5).

- **Mekanisme generator**:
- `yield num` mengembalikan nilai saat ini (0, 2, 4)

- `num += 2` meningkatkan nilai untuk iterasi berikutnya

- **Ketika `num = 6`**:

- 6 > 5 → loop berhenti → generator selesai (*exhausted*)

### Contoh visual:

```

N=5

Iterasi 1: num=0 → 0 < 5 → yield 0

Iterasi 2: num=2 → 2 < 5 → yield 2

Iterasi 3: num=4 → 4 < 5 → yield 4

Iterasi 4: num=6 → 6 ≥ 5 → stop

```

________________________________________82

Berikut terjemahan materi tentang penulisan kode Python yang bersih dan
mudah dibaca ke dalam bahasa Indonesia:

Sekarang, mari beralih ke topik berikutnya dalam **Seri Pembelajaran


Python**:

***Menulis Kode yang Bersih dan Mudah Dibaca***

Topik ini sangat penting baik untuk wawancara maupun pemrograman


dunia nyata, terutama dalam lingkungan kolaboratif. Mari pahami
beberapa aturan emas:

*1. Nama Variabel & Fungsi yang Bermakna*

Hindari:
```python

X = 10

```

Lebih baik:

```python

Jumlah_siswa = 10

```

*2. Ikuti PEP 8 (Panduan Gaya Python)*

- Indentasi: Gunakan 4 spasi

- Panjang baris maksimal: 79 karakter

- Nama fungsi: `snake_case`

- Nama kelas: `CamelCase`

*3. Hindari Nesting Terlalu Dalam*

Buruk:

```python

If a:

If b:

If c:

Lakukan_sesuatu()

```

*Lebih baik:*

```python

If not a or not b or not c:

Return

Lakukan_sesuatu()

```
*4. Gunakan Fungsi untuk Memecah Logika*

Buat setiap fungsi fokus pada satu tugas.

```python

Def validasi_input(data):

Pass

Def proses_data(data):

Pass

```

*5. Gunakan List Comprehension (Saat Tepat)*

```python

Kuadrat = [x**2 for x in range(10)]

```

*6. Hindari Angka Ajaib (Magic Numbers)*

```python

# Buruk

If umur > 18:

# Baik

UMUR_DEWASA = 18

If umur > UMUR_DEWASA:

```

*7. Beri Komentar Hanya Saat Diperlukan*

Tulis kode yang dapat menjelaskan sendiri, dan gunakan komentar hanya
untuk logika kompleks.
*Beri reaksi ❤️jika Anda siap untuk kuis berikutnya tentang decorators!*

📚 **Seri Pembelajaran Python**:

[https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527]
(https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527)

### Penyesuaian istilah:

- *Clean & Readable Code* → **Kode yang Bersih dan Mudah Dibaca**

- *Deep Nesting* → **Nesting Terlalu Dalam**

- *Magic Numbers* → **Angka Ajaib**

- *Snake_case* → **snake_case** (dipertahankan sebagai istilah teknis)

- *CamelCase* → **CamelCase** (dipertahankan)

### Tips tambahan:

- “PEP 8” tetap dipertahankan sebagai nama resmi panduan gaya Python

- Contoh kode diterjemahkan sebagian (hanya komentar dan nama fungsi)


agar tetap berfungsi saat dijalankan

- “Collaborative environments” → **lingkungan kolaboratif**

________________________________________83

**Manakah dari berikut ini yang BUKAN praktik baik untuk menulis kode
yang bersih dan mudah dibaca?**

A. Menggunakan nama variabel yang bermakna

B. Membuat fungsi tidak lebih dari 20 baris

C. **Mencampurkan banyak tanggung jawab dalam satu fungsi**

D. Menambahkan komentar hanya untuk bagian kode yang kompleks


### **Jawaban yang Benar: C**

**Penjelasan:**

- **C (Mencampur tanggung jawab dalam satu fungsi)** melanggar prinsip


*Single Responsibility Principle* (SRP).

- Contoh buruk:

```python

Def proses_data(data):

# 1. Membersihkan data

# 2. Menghitung statistik

# 3. Menyimpan ke file

# ... (semua dilakukan dalam 1 fungsi)

```

- Seharusnya:

```python

Def bersihkan_data(data): ...

Def hitung_statistik(data): ...

Def simpan_ke_file(data): ...

```

**Alasan opsi lain adalah praktik baik:**

- **A**: Nama variabel bermakna (misal: `total_harga` bukan `x`)


meningkatkan kejelasan.

- **B**: Fungsi pendek (<20 baris) lebih mudah dipahami dan diuji.

- **D**: Komentar hanya untuk logika kompleks menghindari “noise” yang


tidak perlu.

**Kesimpulan:**

Mencampur banyak tanggung jawab dalam satu fungsi membuat kode


sulit dipelihara, di-debug, dan digunakan kembali.
**Beri reaksi ❤️jika Anda setuju!**

________________________________________84

***Jawaban Benar: C***

Mencampurkan banyak tanggung jawab dalam satu fungsi melanggar


**Prinsip Tanggung Jawab Tunggal (Single Responsibility Principle)** dan
membuat kode lebih sulit dibaca dan dipelihara. Setiap fungsi seharusnya
memiliki **satu tugas yang jelas**.

*Beri reaksi ❤️jika jawabanmu benar*

### Penjelasan:

- **Prinsip Tanggung Jawab Tunggal**: Setiap fungsi/kelas harus fokus


pada satu tugas spesifik.

- **Dampak Buruk Pencampuran**:

- Kode jadi rumit dan sulit dilacak

- Sulit di-debug dan diuji

- Rentan error saat dimodifikasi

- **Solusi**: Pecah fungsi besar menjadi beberapa fungsi kecil yang


terfokus.

Contoh implementasi baik:

```python

# Fungsi 1: Hanya membersihkan data

Def bersihkan_data(data): ...

# Fungsi 2: Hanya menghitung statistik

Def hitung_statistik(data): ...


# Fungsi 3: Hanya menyimpan hasil

Def simpan_hasil(data): ...

```

________________________________________85

Berikut terjemahan dalam Bahasa Indonesia:

**Sekarang, Mari Beralih ke Topik Penting Berikutnya dalam Seri Belajar


Python**

***Web Scraping dengan BeautifulSoup***

### **Apa Itu Web Scraping?**

Web Scraping adalah proses mengekstrak data dari situs web secara
otomatis.

*Contoh:*

Jika Anda ingin mengumpulkan semua nama dan harga produk dari situs
e-commerce — alih-alih menyalinnya manual, Anda bisa menulis skrip
Python untuk melakukannya.

### **BeautifulSoup & Requests**

- **BeautifulSoup**: Library Python untuk mengekstrak data dari situs web


dengan mengurai kode HTML/XML.

- **requests**: Library untuk mengambil kode HTML halaman web.


### **Tutorial Langkah Demi Langkah**

#### **Langkah 1: Instal Library**

```bash

Pip install requests

Pip install beautifulsoup4

```

#### **Langkah 2: Ambil Halaman Web**

```python

Import requests

url = https://quotes.toscrape.com

response = requests.get(url)

print(response.text) # Mencetak konten HTML

```

#### **Langkah 3: Parsing HTML dengan BeautifulSoup**

```python

From bs4 import BeautifulSoup

Soup = BeautifulSoup(response.text, ‘html.parser’)

```

#### **Langkah 4: Ekstrak Data Spesifik (Contoh: Kutipan & Penulis)**

Setiap kutipan ada di dalam `<div class=”quote”>`:

```python
Quotes = soup.find_all(‘div’, class_=’quote’)

For quote in quotes:

Text = quote.find(‘span’, class_=’text’).text

Author = quote.find(‘small’, class_=’author’).text

Print(f”{text} — {author}”)

```

#### **Langkah 5: Simpan ke CSV (Opsional)**

```python

Import csv

With open(‘quotes.csv’, ‘w’, newline=’’, encoding=’utf-8’) as file:

Writer = csv.writer(file)

Writer.writerow([‘Kutipan’, ‘Penulis’])

For quote in quotes:

Text = quote.find(‘span’, class_=’text’).text

Author = quote.find(‘small’, class_=’author’).text

Writer.writerow([text, author])

```

### **Metode Penting di BeautifulSoup**

- `soup.find(“tag”)`: Temukan tag pertama yang cocok.

- `soup.find_all(“tag”)`: Temukan semua tag dengan tipe tersebut.

- `soup.select(“css-selector”)`: Temukan elemen menggunakan selector


CSS (seperti `.class` atau `#id`).

- `.text`: Ekstrak teks di dalam tag HTML.


- `.attrs`: Akses atribut tag seperti `href`, `src`, dll.

### **Etika Web Scraping**

- **Selalu cek `robots.txt` atau ketentuan layanan situs** sebelum


melakukan scraping.

- **Hindari scraping situs yang melarangnya** atau membebani server


dengan permintaan terlalu sering.

**Beri reaksi ❤️jika siap untuk kuis tentang Web Scraping!**

🔗 **Proyek Web Scraping**:

https://whatsapp.com/channel/0029Vau5fZECsU9HJFLacm2a/205

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

---

### Catatan:

- Istilah teknis seperti *web scraping*, *BeautifulSoup*, *HTML*, *CSS


selector*, dll. Dipertahankan dalam bahasa Inggris karena sudah standar.

- Sintaks kode tidak diubah untuk menjaga keakuratan.

- Penjelasan menggunakan bahasa Indonesia natural dengan istilah


konsisten.

________________________________________86

**Pemrograman Python**

Metode mana yang digunakan untuk mendapatkan semua elemen HTML


yang sesuai dengan tag tertentu menggunakan BeautifulSoup?
A. `soup.find()`

B. `soup.get_all()`

C. `soup.select_one()`

D. `soup.find_all()`

### **Jawaban yang Benar: D) `soup.find_all()`**

**Penjelasan:**

- **`soup.find_all()`** digunakan untuk mengembalikan **semua elemen**


yang cocok dengan tag atau kriteria tertentu dalam bentuk *list*.

- Contoh:

```python

All_links = soup.find_all(‘a’) # Mengambil semua tag <a>

```

**Alasan opsi lain salah:**

- **A** `soup.find()`: Hanya mengembalikan **elemen pertama** yang


cocok.

- **B** `soup.get_all()`: **Bukan metode valid** di BeautifulSoup (tidak


ada dalam dokumentasi resmi).

- **C** `soup.select_one()`: Mengembalikan **satu elemen** pertama


yang cocok dengan *CSS selector*.

**Beri reaksi ❤️jika jawabanmu benar!**

---

### Catatan:
- `find_all()` adalah metode paling umum untuk *scraping* data berulang
(seperti daftar produk, artikel, dll.).

- Dokumentasi resmi: [BeautifulSoup – find_all()]


(https://www.crummy.com/software/BeautifulSoup/bs4/doc/#find-all).

_______________________________________87

***Jawaban Benar: D) `soup.find_all()`***

- **`find_all()`**: Mengembalikan **daftar semua elemen** yang cocok.

- **`find()`**: Hanya mengembalikan **kecocokan pertama**.

- **`select_one()`**: Menggunakan *CSS selector* tetapi hanya


mengembalikan **satu elemen**.

- **`get_all()`**: **Bukan metode valid** di BeautifulSoup.

*Beri reaksi ❤️jika jawabanmu benar*

### Penjelasan Tambahan:

- **Contoh Penggunaan**:

```python

# Ambil SEMUA tag <p>

Semua_paragraf = soup.find_all(‘p’)

# Ambil tag <p> PERTAMA saja

Paragraf_pertama = soup.find(‘p’)

```

- **Perbedaan Penting**:

- Gunakan `find_all()` untuk mengumpulkan data berulang (seperti


daftar produk).
- Gunakan `find()`/`select_one()` untuk mengambil satu elemen spesifik
(seperti judul halaman).

________________________________________88

**Pemrograman Python**

Apa cara yang benar untuk mengekstrak teks dari elemen HTML
menggunakan BeautifulSoup?

A. `element.text()`

B. `element.get_text()`

C. `element.extract()`

D. `element.innerText()`

### **Jawaban yang Benar: B) `element.get_text()`**

**Penjelasan:**

- **`get_text()`** adalah metode BeautifulSoup yang mengembalikan


**semua teks** dalam elemen HTML dan turunannya.

Contoh:

```python

Teks = element.get_text()

```

**Alasan opsi lain salah:**

- **A** `element.text()`: Kesalahan sintaks — `.text` adalah **atribut**


(bukan metode), jadi cukup gunakan `element.text` tanpa `()`.

- **C** `element.extract()`: Menghapus elemen dari pohon HTML dan


mengembalikan elemen tersebut (bukan teks).

- **D** `element.innerText()`: Tidak ada di BeautifulSoup (ini adalah


konsep JavaScript).
**Beri reaksi ❤️jika jawabanmu benar!**

---

### Contoh Penggunaan Benar:

```python

From bs4 import BeautifulSoup

Html = “<div>Hello <b>World</b></div>”

Soup = BeautifulSoup(html, ‘html.parser’)

Element = soup.div

Print(element.get_text()) # Output: “Hello World”

Print(element.text) # Output: “Hello World” (tanpa tanda kurung)

```

________________________________________89

***Jawaban Benar: B) `element.get_text()`***

`get_text()` adalah metode yang benar untuk mengambil teks dalam


elemen HTML menggunakan BeautifulSoup.

**Alasan opsi lain salah:**

- `text()` dan `innerText()` **tidak valid** di BeautifulSoup

- `extract()` digunakan untuk menghapus elemen dari pohon HTML (bukan


mengambil teks)

*Beri reaksi ❤️jika jawabanmu benar*


### Perbandingan Metode:

| Metode | Fungsi | Contoh Penggunaan |

|-----------------------|-----------------------------------------|-------------------------|

| **`get_text()`** | Mengambil semua teks dalam elemen | `teks =


elemen.get_text()` |

| `.text` (atribut) | Alternatif tanpa tanda kurung | `teks =


elemen.text` |

| `extract()` | Menghapus elemen dari dokumen |


`elemen_dihapus = elemen.extract()` |

_______________________________________90

Berikut terjemahan dalam Bahasa Indonesia:

**Sekarang, Mari Beralih ke Topik Penting Berikutnya dalam Seri Belajar


Python**

***Bekerja dengan API***

### **Apa Itu API?**

API (*Application Programming Interface*) memungkinkan komunikasi


antar sistem perangkat lunak. Di Python, kita biasanya berinteraksi
dengan API melalui HTTP untuk meminta atau mengirim data—bayangkan
API seperti pelayan yang mengantar pesanan (data) dari restoran (server).

### **Library `requests`**

Library `requests` di Python mempermudah pengiriman permintaan HTTP


seperti GET, POST, PUT, dan DELETE.
### **Contoh Dasar – Permintaan GET**

```python

Import requests

Response = requests.get(https://api.github.com)

Print(response.status_code) # 200 artinya sukses

Print(response.json()) # Cetak konten respons dalam format JSON

```

- `get()`: Ambil data dari API

- `.json()`: Konversi respons ke *dictionary* Python jika respons berbentuk


JSON

- `.status_code`: Kode status HTTP (misal: 200, 404)

### **Contoh – Permintaan POST**

```python

Import requests

Data = {“name”: “John”, “job”: “Developer”}

Response = requests.post(https://reqres.in/api/users, json=data)

Print(response.status_code)

Print(response.json())

```

- `post()`: Digunakan saat mengirim data ke server

- Parameter `json=` otomatis mengonversi *dictionary* Python ke format


JSON
### **Penanganan Error**

```python

Try:

R = requests.get(https://api.github.com/invalid)

r.raise_for_status()

except requests.exceptions.HTTPError as e:

print(f”Error: {e}”)

```

- `raise_for_status()`: Memunculkan error untuk respons buruk (404,


500, dll.)

### **Tips Menggunakan API**

- Selalu baca dokumentasi API

- Periksa kebutuhan otentikasi (kunci API, token)

- Tangani error dan batas permintaan (*rate limits*) dengan baik

**Beri reaksi ❤️jika siap untuk kuis tentang API!**

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

---

### Catatan:

- Istilah teknis seperti *API*, *GET*, *POST*, *JSON*, *HTTP* dipertahankan


dalam bahasa Inggris karena sudah standar.

- Kode tidak diubah untuk menjaga keakuratan sintaks Python.


- Penjelasan menggunakan analogi “restoran-pelayan” untuk
memudahkan pemahaman konsep API.

________________________________________91

**Pemrograman Python**

Metode mana dari library `requests` yang digunakan untuk mengirim data
ke API?

A. `requests.get()`

B. `requests.post()`

C. `requests.fetch()`

D. `requests.send()`

### **Jawaban yang Benar: B) `requests.post()`**

**Penjelasan:**

- **`requests.post()`** digunakan untuk mengirim data ke API/server


(misal: membuat data baru).

- Contoh:

```python

Import requests

Data = {“nama”: “Budi”, “pekerjaan”: “Developer”}

Response = requests.post(https://contoh-api.com/data, json=data)

```

**Alasan opsi lain salah:**

- **A** `requests.get()`: Hanya untuk mengambil data (*fetch*), bukan


mengirim.

- **C** `requests.fetch()`: Tidak ada dalam library `requests`.

- **D** `requests.send()`: Tidak ada dalam library `requests`.


**Beri reaksi ❤️jika jawabanmu benar!**

---

### Catatan:

- **POST** adalah metode HTTP untuk pengiriman data (login, upload,


pembuatan akun, dll.).

- **GET** digunakan untuk permintaan data tanpa mengubah sumber


daya (baca saja).

________________________________________92

***Jawaban Benar: B) requests.post()***

`requests.post()` digunakan untuk mengirim data (seperti data formulir


atau JSON) ke sebuah API.

- `requests.get()` hanya digunakan untuk **mengambil data**.

- `fetch()` dan `send()` **bukan fungsi valid** dalam library `requests`.

*Beri reaksi ❤️jika jawabanmu benar*

### Perbandingan Metode HTTP:

| **Metode** | **Fungsi** | **Contoh


Penggunaan** |

|---------------------|------------------------------------------|--------------------------------------
--|

| `requests.post()` | Mengirim data ke server |


`requests.post(url, json=data)` |
| `requests.get()` | Mengambil data dari server |
`requests.get(url)` |

| `requests.put()` | Memperbarui data di server |


`requests.put(url, json=updated_data)` |

| `requests.delete()` | Menghapus data di server |


`requests.delete(url)` |

________________________________________93

Berikut terjemahan dalam Bahasa Indonesia:

**Sekarang, Mari Beralih ke Topik Berikutnya dalam Seri Belajar Python**

***Analisis Data Menggunakan Pandas*** 🐼

### **1. Apa Itu Pandas?**

Pandas adalah library Python untuk bekerja dengan data terstruktur.


Memudahkan analisis, pembersihan, eksplorasi, dan manipulasi data.

### **2. Konsep Kunci**

#### **a. DataFrame dan Series**

- ***Series***: Array berlabel satu dimensi (seperti kolom).

```python

Import pandas as pd

Pd.Series([1, 2, 3])

```

- ***DataFrame***: Struktur data dua dimensi berlabel dengan baris


dan kolom (seperti lembar Excel).
```python

Pd.DataFrame({‘Nama’: [‘Tom’, ‘Jerry’], ‘Usia’: [28, 22]})

```

### **3. Membaca Data**

Dari CSV:

```python

Df = pd.read_csv(‘data.csv’)

```

Dari Excel:

```python

Df = pd.read_excel(‘data.xlsx’)

```

### **4. Operasi Dasar**

- **Meliht beberapa baris pertama/terakhir**:

```python

Df.head() # 5 baris pertama

Df.tail() # 5 baris terakhir

```

- **Informasi dasar**:

```python

Df.shape # (baris, kolom)

Df.info() # Ringkasan tipe data

Df.describe()# Statistik numerik

```

- **Akses kolom**:
```python

Df[‘Nama’] # Satu kolom

Df[[‘Nama’, ‘Usia’]] # Beberapa kolom

```

- **Filter baris**:

```python

Df[df[‘Usia’] > 25]

```

- **Tambah kolom baru**:

```python

Df[‘Gaji’] = [50000, 60000]

```

- **Hapus kolom**:

```python

Df.drop(‘Gaji’, axis=1, inplace=True)

```

### **5. Pengelompokan & Agregasi**

Kelompokkan berdasarkan kolom dan terapkan fungsi:

```python

Df.groupby(‘Departemen’)[‘Gaji’].mean()

```

### **6. Menangani Data Hilang**

- **Cek data hilang**:

```python

Df.isnull().sum()
```

- **Isi data hilang**:

```python

Df.fillna(0)

```

- **Hapus data hilang**:

```python

Df.dropna()

```

### **7. Pengurutan**

Urutkan berdasarkan kolom:

```python

Df.sort_values(by=’Usia’)

```

### **8. Menyimpan Data**

Ke CSV:

```python

Df.to_csv(‘data_bersih.csv’, index=False)

```

**Beri reaksi ❤️jika siap untuk kuis tentang Pandas!**

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527
---

### Catatan:

- Istilah teknis seperti *DataFrame*, *Series*, `groupby()`, dan `fillna()`


dipertahankan dalam bahasa Inggris karena sudah standar dalam
ekosistem data science.

- Fungsi dan sintaks kode tidak diubah untuk menjaga konsistensi.

- Penjelasan menggunakan padanan bahasa Indonesia yang natural.

________________________________________94

**Pemrograman Python**

Fungsi Pandas mana yang digunakan untuk menampilkan 5 baris pertama


dari sebuah DataFrame?

A. `df.tail()`

B. `df.describe()`

C. `df.head()`

D. `df.info()`

### **Jawaban yang Benar: C) `df.head()`**

**Penjelasan:**

- **`df.head()`** menampilkan **5 baris pertama** secara default.

- Contoh: `df.head(3)` akan menampilkan 3 baris pertama.

**Fungsi Lain:**

- **A** `df.tail()`: Menampilkan 5 baris **terakhir**.

- **B** `df.describe()`: Menampilkan statistik deskriptif (bukan data


aktual).
- **D** `df.info()`: Menampilkan ringkasan tipe data dan memori.

**Beri reaksi ❤️jika jawabanmu benar!**

---

### Contoh Penggunaan:

```python

Import pandas as pd

Data = pd.read_csv(“data.csv”)

Print(data.head()) # Menampilkan 5 baris pertama

```

________________________________________95

***Jawaban Benar: C. Df.head()***

`df.head()` mengembalikan **5 baris pertama** dari DataFrame secara


default. Fungsi ini berguna untuk memeriksa struktur dan konten dataset
dengan cepat.

**Fungsi lainnya:**

- `df.tail()` → Mengembalikan **5 baris terakhir** DataFrame.

- `df.describe()` → Menyediakan **statistik ringkasan** (seperti mean, std,


min, max) untuk kolom numerik.

- `df.info()` → Memberikan **ringkasan singkat** DataFrame, termasuk


nama kolom, tipe data, dan jumlah non-null.

*Beri reaksi ❤️jika jawabanmu benar*


### Contoh Penggunaan:

```python

Import pandas as pd

Data = pd.read_csv(“data.csv”)

# Menampilkan 5 baris pertama

Print(“5 Baris Pertama:”)

Print(data.head())

# Menampilkan 3 baris terakhir

Print(“\n3 Baris Terakhir:”)

Print(data.tail(3))

```

________________________________________96

**Pemrograman Python**

Apa yang dikembalikan oleh kode Pandas berikut?

```python

Df[‘column_name’].unique()

```

A. Semua baris dengan nilai duplikat di `column_name`

B. Jumlah nilai unik di `column_name`

C. **Daftar semua nilai unik di `column_name`**

D. Indeks baris unik dalam DataFrame

### **Jawaban yang Benar: C**


**Penjelasan:**

- **`unique()`** mengembalikan **array berisi semua nilai unik** dalam


kolom tersebut.

- Contoh:

```python

Import pandas as pd

Data = pd.DataFrame({“Warna”: [“Merah”, “Biru”, “Merah”, “Hijau”]})

Print(data[‘Warna’].unique())

# Output: [‘Merah’ ‘Biru’ ‘Hijau’]

```

**Alasan opsi lain salah:**

- **A**: Untuk duplikat gunakan `df.duplicated()`.

- **B**: Jumlah unik = `df[‘column_name’].nunique()`.

- **D**: Tidak mengembalikan indeks.

**Beri reaksi ❤️jika jawabanmu benar!**

---

### Perbandingan Metode:

| **Metode** | **Fungsi** |

|--------------------------------|---------------------------------------------|

| `.unique()` | Daftar nilai unik |

| `.nunique()` | Jumlah nilai unik |

| `.value_counts()` | Frekuensi kemunculan tiap nilai unik |

| `df.duplicated()` | Identifikasi baris duplikat |

________________________________________97
***Jawaban Benar: C) Daftar semua nilai unik di column_name***

Fungsi `.unique()` di Pandas digunakan untuk mengembalikan **nilai-nilai


unik** dari sebuah Series (dalam hal ini, kolom tertentu di DataFrame).
Fungsi ini tidak mengembalikan jumlah atau indeks, hanya nilai-nilai
berbeda dalam bentuk *array* NumPy.

*Contoh:*

```python

Import pandas as pd

Df = pd.DataFrame({‘column_name’: [1, 2, 2, 3, 1]})

Print(df[‘column_name’].unique())

```

*Output:*

```

[1 2 3]

```

Output menunjukkan bahwa **1, 2, dan 3** adalah nilai unik di kolom
`column_name`.

*Beri reaksi ❤️jika jawabanmu benar*

### Penjelasan:

- **Input**: Kolom dengan nilai `[1, 2, 2, 3, 1]`

- **Proses**: `.unique()` menyaring nilai duplikat

- **Output**: `[1, 2, 3]` (nilai unik tanpa duplikat)


- **Tipe Output**: `numpy.ndarray` (bisa dikonversi ke list dengan
`list(df[‘column_name’].unique())`).

________________________________________98

Berikut terjemahan dalam Bahasa Indonesia:

**Sekarang, Mari Beralih ke Bagian Sangat Penting dalam Seri Belajar


Python**

***Pola-Pola Coding untuk Wawancara***

Sejauh ini kita telah membahas konsep inti Python. Saatnya naik level!

Kita akan membahas berbagai pola yang sering ditanyakan dalam


wawancara coding. Pola-pola ini membantu Anda mengenali pendekatan
untuk berbagai jenis masalah coding secara cerdas — alih-alih
menyelesaikan setiap masalah dari nol.

Kita akan membaginya menjadi beberapa bagian — mulai dari dasar


hingga secara bertahap menuju tingkat lanjut.

### **Apa yang Akan Kita Bahas di Bagian Ini:**

1. *Stock Buy & Sell* (Transaksi Tunggal)

2. *Stock Buy & Sell* (Transaksi Berganda)

3. *Kadane’s Algorithm* (Subarray Maksimum)

4. *Sliding Window* (Ukuran Tetap + Variabel)

5. Teknik *Two Pointer*

6. *Prefix Sum*

7. Pola Berbasis *HashMap*

8. Variasi *Binary Search*


9. Dasar-dasar *Backtracking*

10. Konversi *Recursion* ke *DP*

11. Trik Berbasis *Sorting*

12. Pola *Greedy*

13. *Frequency Maps* dan *Counters*

14. Pola Berbasis *Stacks* dan *Queues*

15. Teknik *Substring* & *Subarray*

**Beri reaksi ❤️jika siap mempelajari pola-pola coding ini!**

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

---

### Catatan:

- Istilah teknis seperti *Sliding Window*, *Two Pointer*, dan *Kadane’s


Algorithm* dipertahankan dalam bahasa Inggris karena sudah menjadi
standar global dalam wawancara teknis.

- Penjelasan menggunakan bahasa Indonesia yang natural dengan


struktur yang jelas.

- Tujuan terjemahan: Memotivasi sekaligus mengkomunikasikan materi


kompleks dengan sederhana.

Pola-pola ini adalah kunci sukses menghadapi wawancara coding


perusahaan teknologi besar! 🚀

________________________________________99

### **Waktu Terbaik untuk Membeli dan Menjual Saham (Hanya Satu
Transaksi)**
**Pernyataan Masalah:**

Diberikan daftar harga di mana `prices[i]` adalah harga saham pada hari
ke-`i`.

Anda hanya boleh melakukan **satu transaksi** (membeli satu saham


dan menjual satu saham) untuk memaksimalkan keuntungan.

Kembalikan keuntungan maksimal yang bisa dicapai.

Jika tidak ada keuntungan, kembalikan 0.

**Contoh:**

- Input: `prices = [7, 1, 5, 3, 6, 4]` → Output: `5`

*Penjelasan:* Beli di hari 2 (harga=1), jual di hari 5 (harga=6),


keuntungan = 6 – 1 = 5.

- Input: `prices = [7, 6, 4, 3, 1]` → Output: `0`

*Penjelasan:* Harga terus turun, tidak ada keuntungan.

### **Ide Utama:**

1. **Beli di harga terendah**

2. **Jual di harga tertinggi setelahnya**

3. Lacak harga minimum sejauh ini, hitung keuntungan jika dijual hari ini.

4. Perbarui keuntungan maksimal selama iterasi.

**Kode:**

```python

Def maxProfit(prices):

Min_price = float(‘inf’) # Harga terendah diinisialisasi dengan nilai tak


terhingga

Max_profit = 0 # Keuntungan maksimal diinisialisasi dengan 0


For price in prices:

If price < min_price:

Min_price = price # Perbarui harga terendah

Else:

# Hitung keuntungan saat ini & perbarui keuntungan maksimal

Max_profit = max(max_profit, price – min_price)

Return max_profit

```

### **Simulasi Kering (`prices = [7, 1, 5, 3, 6, 4]`):**

- **Hari 1:** Harga=7 → `min_price = 7`

- **Hari 2:** Harga=1 → `min_price = 1`

- **Hari 3:** Harga=5 → Keuntungan=5-1=4 → `max_profit = 4`

- **Hari 4:** Harga=3 → Keuntungan=3-1=2 → `max_profit tetap 4`

- **Hari 5:** Harga=6 → Keuntungan=6-1=5 → `max_profit = 5`

- **Hari 6:** Harga=4 → Keuntungan=4-1=3 → `max_profit tetap 5`

**Output Akhir: 5**

### **Pola Greedy Klasik:**

- Tidak perlu cek semua pasangan hari beli/jual.

- Cukup lacak **harga terendah** dan **keuntungan terbaik** di setiap


langkah.

**Beri reaksi ❤️jika siap untuk kuis tentang pola ini!**


🔗 **Pola Coding Wawancara**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1629

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

---

### **Catatan:**

- `float(‘inf’)` mewakili bilangan tak terhingga (infinity).

- Algoritma ini bekerja dalam **waktu O(n)** — sangat efisien!

- Pola ini sering muncul di wawancara perusahaan teknologi (Google,


Amazon, dll.).

_______________________________________100

**Pemrograman Python**

Diberikan harga saham selama 7 hari: `[7, 1, 5, 3, 6, 4, 8]`.

Berapa keuntungan maksimal yang bisa diperoleh dengan **satu


transaksi**?

A. 7

B. 6

C. 8

D. 5

### **Jawaban yang Benar: A) 7**

**Penjelasan:**

- **Beli di harga terendah**: Hari ke-2 (harga = 1)


- **Jual di harga tertinggi setelahnya**: Hari ke-7 (harga = 8)

- **Keuntungan**: 8 – 1 = 7

**Simulasi Algoritma:**

```python

Def maxProfit(prices):

Min_price = float(‘inf’)

Max_profit = 0

For price in prices:

If price < min_price:

Min_price = price

Else:

Max_profit = max(max_profit, price – min_price)

Return max_profit

Prices = [7, 1, 5, 3, 6, 4, 8]

Print(maxProfit(prices)) # Output: 7

```

**Langkah Iterasi:**

- Hari 1: `min_price = 7`

- Hari 2: `min_price = 1`

- Hari 3: Keuntungan = 5 – 1 = 4 → `max_profit = 4`

- Hari 4: Keuntungan = 3 – 1 = 2 → `max_profit = 4`

- Hari 5: Keuntungan = 6 – 1 = 5 → `max_profit = 5`

- Hari 6: Keuntungan = 4 – 1 = 3 → `max_profit = 5`

- Hari 7: Keuntungan = 8 – 1 = 7 → `max_profit = 7`

**Beri reaksi ❤️jika jawabanmu benar!**


---

### Catatan:

- Keuntungan maksimal dicapai dengan membeli di **harga terendah (1)**


dan menjual di **harga tertinggi berikutnya (8)**.

- Pola ini menggunakan pendekatan *greedy* dengan kompleksitas waktu


**O(n)**.

_______________________________________101

***Jawaban Benar: A) 7***

Beli di harga 1 (Hari 2), Jual di harga 8 (Hari 7)

Keuntungan = 8 – 1 = 7

*Beri reaksi ❤️jika jawabanmu benar*

### **Koreksi:**

Perhatikan bahwa opsi jawaban yang tersedia adalah:

- **A. 7**

- B. 6

- C. 8

- D. 5

Pesan sebelumnya menyebutkan *”Correct Answer: B) 7”* tetapi **B


seharusnya merujuk ke angka 6** berdasarkan pilihan yang diberikan.

**Jawaban yang tepat adalah A. 7** karena:

- Harga beli terendah = 1


- Harga jual tertinggi setelahnya = 8

- Keuntungan = 7

### Simulasi Algoritma:

```python

Prices = [7, 1, 5, 3, 6, 4, 8]

Min_price = float(‘inf’)

Max_profit = 0

For price in prices:

If price < min_price:

Min_price = price

Else:

Max_profit = max(max_profit, price – min_price)

Print(max_profit) # Output: 7

```

_______________________________________102

**Pemrograman Python**

Diberikan harga saham selama 5 hari: `[9, 8, 7, 3, 1]`.

Berapa keuntungan maksimal yang bisa diperoleh dengan **satu


transaksi**?

A. 2

B. 0

C. 3

D. 1
### **Jawaban yang Benar: B) 0**

**Penjelasan:**

- Harga saham terus menurun setiap hari:

```

Hari 1: 9

Hari 2: 8 (turun 1)

Hari 3: 7 (turun 1)

Hari 4: 3 (turun 4)

Hari 5: 1 (turun 2)

```

- **Tidak mungkin mendapat keuntungan** karena tidak ada hari jual


yang harganya lebih tinggi dari hari beli.

- Jika membeli di hari apa pun, harga jual berikutnya selalu lebih rendah.

**Simulasi Algoritma:**

```python

Def maxProfit(prices):

Min_price = float(‘inf’)

Max_profit = 0

For price in prices:

If price < min_price:

Min_price = price

Else:

Max_profit = max(max_profit, price – min_price)

Return max_profit

Prices = [9, 8, 7, 3, 1]

Print(maxProfit(prices)) # Output: 0
```

**Beri reaksi ❤️jika jawabanmu benar!**

---

### Catatan:

- Algoritma akan mengembalikan `0` karena tidak ada kesempatan profit.

- Keuntungan hanya mungkin jika ada setidaknya satu kenaikan harga


setelah pembelian.

______________________________________103

***Jawaban Benar: B) 0***

Harga saham terus menurun secara berkelanjutan:

- Hari 1: 9

- Hari 2: 8

- Hari 3: 7

- Hari 4: 3

- Hari 5: 1

Tidak ada kesempatan untuk membeli rendah dan menjual tinggi karena
harga selalu turun setiap hari.

Oleh karena itu, tidak mungkin mendapat keuntungan. Keuntungan = 0.

*Beri reaksi ❤️jika jawabanmu benar*

### **Simulasi Algoritma:**


```python

Def maxProfit(prices):

Min_price = float(‘inf’)

Max_profit = 0

For price in prices:

If price < min_price:

Min_price = price # Update harga terendah

Else:

Max_profit = max(max_profit, price – min_price)

Return max_profit

Print(maxProfit([9, 8, 7, 3, 1])) # Output: 0

```

- Algoritma selalu memperbarui `min_price` karena harga selalu turun

- Tidak pernah masuk ke blok `else` sehingga `max_profit` tetap 0

_______________________________________104

### **Waktu Terbaik untuk Membeli dan Menjual Saham – II (Transaksi


Berganda Diizinkan)**

**Pernyataan Masalah:**

Diberikan array `prices[]` di mana `prices[i]` adalah harga saham pada


hari ke-`i`.

Anda dapat membeli dan menjual berkali-kali, tetapi harus menjual


sebelum membeli lagi.

**Tujuan:** Maksimalkan keuntungan.

### **Intuisi:**
- Berbeda dengan versi satu transaksi, di sini Anda diizinkan melakukan
transaksi sebanyak mungkin.

- Manfaatkan setiap peluang keuntungan (ketika `prices[i] > prices[i-1]`).

**Kode (Python):**

```python

Def maxProfit(prices):

Profit = 0

For i in range(1, len(prices)):

If prices[i] > prices[i – 1]:

Profit += prices[i] – prices[i – 1]

Return profit

```

**Contoh:**

Input: `prices = [7, 1, 5, 3, 6, 4]`

Output: `7`

Penjelasan:

1. Beli hari 2 (harga=1), jual hari 3 (harga=5) → untung = 4

2. Beli hari 4 (harga=3), jual hari 5 (harga=6) → untung = 3

Total = 4 + 3 = 7

### **Cara Kerja Kode:**

1. Iterasi melalui array harga mulai dari indeks 1.

2. Jika harga hari ini lebih tinggi dari kemarin (`prices[i] > prices[i-1]`):

- Tambahkan selisihnya ke total keuntungan.

3. Kembalikan total keuntungan.


**Contoh Simulasi (`prices = [7, 1, 5, 3, 6, 4]`):**

- `i=1`: 1 > 7? ❌

- `i=2`: 5 > 1? ✅ → `profit += 4` (profit=4)

- `i=3`: 3 > 5? ❌

- `i=4`: 6 > 3? ✅ → `profit += 3` (profit=7)

- `i=5`: 4 > 6? ❌

- **Total profit = 7**

### **Mengapa Ini Optimal?**

Strategi ini menangkap **semua kenaikan harga berturut-turut**. Dengan


membeli di awal kenaikan dan menjual di akhir, keuntungan total sama
dengan jumlah semua selisih kenaikan.

**Beri reaksi ❤️jika siap untuk kuis tentang pola ini!**

🔗 **Pola Coding Wawancara**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1629

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

---

### **Catatan:**

- Kompleksitas waktu: **O(n)** (hanya satu iterasi).

- Pola ini sering muncul di wawancara perusahaan seperti Amazon dan


Google.

_______________________________________105
**Pemrograman Python**

Diberikan daftar harga saham harian:

`prices = [7, 1, 5, 3, 6, 4]`

Anda diizinkan membeli dan menjual saham berkali-kali dengan syarat:

- Harus beli sebelum jual

- Tidak boleh memegang lebih dari satu saham sekaligus

Berapa keuntungan maksimal yang bisa diperoleh?

A. 7

B. 6

C. 5

D. 4

### **Jawaban yang Benar: A) 7**

**Penjelasan:**

Keuntungan maksimal dicapai dengan dua transaksi:

1. **Beli hari 2 (harga=1)**, jual hari 3 (harga=5) → Untung = 5 – 1 = 4

2. **Beli hari 4 (harga=3)**, jual hari 5 (harga=6) → Untung = 6 – 3 = 3

**Total keuntungan = 4 + 3 = 7**

**Simulasi Algoritma:**

```python

Def maxProfit(prices):

Profit = 0

For i in range(1, len(prices)):

If prices[i] > prices[i-1]:

Profit += prices[i] – prices[i-1]


Return profit

Print(maxProfit([7, 1, 5, 3, 6, 4])) # Output: 7

```

**Alasan opsi lain salah:**

- **B.6**: Tidak mungkin (selisih maksimal tunggal adalah 5, tapi transaksi


berganda lebih optimal)

- **C.5**: Hanya keuntungan dari transaksi pertama

- **D.4**: Hanya selisih hari 3 dan 5 (5-1=4), tapi melewatkan transaksi


kedua

**Beri reaksi ❤️jika jawabanmu benar!**

---

### **Strategi:**

Algoritma ini menangkap **semua kenaikan berurutan** dengan:

- Membeli di awal kenaikan

- Menjual di akhir kenaikan

- Menambahkan setiap selisih kenaikan ke total keuntungan

_______________________________________106

***Jawaban Benar: A. 7***

*Beri reaksi ❤️jika jawabanmu benar*

### **Penjelasan Singkat:**


Dengan harga saham `[7, 1, 5, 3, 6, 4]`, keuntungan maksimal **7**
dicapai melalui:

1. 🟢 **Beli hari 2 (harga=1)** → Jual hari 3 (harga=5)

💰 Untung = 4

2. 🟢 **Beli hari 4 (harga=3)** → Jual hari 5 (harga=6)

💰 Untung = 3

**Total = 7**

Strategi ini memanfaatkan semua kenaikan harga berurutan! 🚀

---

**🔗 Pola Coding Wawancara**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1629

_______________________________________107

**Pemrograman Python**

Diberikan array harga saham untuk hari berturut-turut:

`prices = [1, 2, 3, 4, 5]`

Anda diizinkan membeli dan menjual berkali-kali, tetapi hanya boleh


memegang satu saham sekaligus.

Berapa keuntungan maksimal yang bisa dicapai?

A. 0

B. 4

C. 5

D. 10

### **Jawaban yang Benar: B) 4**


**Penjelasan:**

Keuntungan maksimal dicapai dengan **memanfaatkan semua kenaikan


berturut-turut**:

- **Beli hari 1 (harga=1)**, jual hari 2 (harga=2) → Untung = 1

- **Beli hari 2 (harga=2)**, jual hari 3 (harga=3) → Untung = 1

- **Beli hari 3 (harga=3)**, jual hari 4 (harga=4) → Untung = 1

- **Beli hari 4 (harga=4)**, jual hari 5 (harga=5) → Untung = 1

**Total keuntungan = 1 + 1 + 1 + 1 = 4**

**Simulasi Algoritma:**

```python

Def maxProfit(prices):

Profit = 0

For i in range(1, len(prices)):

If prices[i] > prices[i-1]:

Profit += prices[i] – prices[i-1]

Return profit

Print(maxProfit([1, 2, 3, 4, 5])) # Output: 4

```

**Mengapa bukan 5?**

- Jika hanya satu transaksi (beli di hari 1, jual di hari 5): untung = 5 – 1 =
4 (sama).

- Tidak ada strategi yang menghasilkan lebih dari 4.

**Beri reaksi ❤️jika jawabanmu benar!**

---
### **Catatan:**

Strategi ini optimal karena menangkap **semua selisih kenaikan harga**


berurutan, di mana keuntungan akumulatif sama dengan selisih harga
terakhir dan pertama (`5 – 1 = 4`).

______________________________________108

***Jawaban Benar: B. 4***

Kita diizinkan melakukan banyak transaksi (beli-jual-beli-jual...), tetapi


hanya boleh memegang satu saham sekaligus.

Diberikan `harga = [1, 2, 3, 4, 5]`:

- **Beli di 1**, jual di 2 → untung = 1

- **Beli di 2**, jual di 3 → untung = 1

- **Beli di 3**, jual di 4 → untung = 1

- **Beli di 4**, jual di 5 → untung = 1

**Total untung = 1 + 1 + 1 + 1 = 4**

### **Mengapa ini optimal?**

- Pendekatan *greedy* ini menjumlahkan **semua kenaikan berturut-


turut**:

```

(2-1) + (3-2) + (4-3) + (5-4) = 4

```

- Hasilnya sama dengan satu transaksi besar: **5 – 1 = 4**

Pola ini dikenal sebagai **”Pendekatan Greedy”** di mana kita


memanfaatkan setiap peluang kenaikan kecil untuk keuntungan
maksimal.

*Beri reaksi ❤️jika jawabanmu benar*


---

### **Catatan:**

- Tidak ada cara mendapatkan lebih dari 4 karena harga maksimum (5)
hanya 4 poin lebih tinggi dari harga minimum (1).

- Algoritma bekerja dengan kompleksitas **O(n)** hanya dengan satu


iterasi.

_______________________________________109

### **Algoritma Kadane – Subarray Maksimum**

Ini adalah salah satu masalah *Dynamic Programming* paling populer:


mencari jumlah maksimum dari subarray berurutan (*contiguous*) dalam
array integer.

**Pernyataan Masalah:**

Diberikan array integer `nums`, temukan subarray berurutan (setidaknya


satu angka) dengan jumlah terbesar dan kembalikan jumlah tersebut.

**Contoh:**

`nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]`

**Output:** `6`

*Penjelasan:* Subarray `[4, -1, 2, 1]` memiliki jumlah terbesar = 6.

### **Cara Kerja Algoritma Kadane:**

1. **Inisialisasi dua variabel:**

- `max_current`: Jumlah maksimum subarray yang berakhir di posisi


saat ini.

- `max_global`: Jumlah maksimum yang ditemukan sejauh ini.


3. **Iterasi melalui array:**

Untuk setiap elemen:

- Bandingkan:

- Mulai subarray baru dari elemen saat ini (`nums[i]`), atau

- Lanjutkan subarray sebelumnya (`max_current + nums[i]`).

- Pilih nilai terbesar sebagai `max_current` baru.

- Perbarui `max_global` jika `max_current` lebih besar.

**Kode Python:**

```python

Def maxSubArray(nums):

Max_current = max_global = nums[0] # Inisialisasi dengan elemen


pertama

For i in range(1, len(nums)):

# Pilih antara memulai subarray baru atau melanjutkan subarray


sebelumnya

Max_current = max(nums[i], max_current + nums[i])

# Perbarui max_global jika ditemukan jumlah yang lebih besar

Max_global = max(max_global, max_current)

Return max_global

```

### **Simulasi Contoh (`nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]`):**

| Iterasi | `nums[i]` | `max_current` (Baru) | `max_global` (Diperbarui) |

|---------|-----------|----------------------|---------------------------|

| Awal |- | `-2` | `-2` |


| `i=1` | `1` | `max(1, -2+1)=1` | `max(-2, 1)=1` |

| `i=2` | `-3` | `max(-3, 1-3)=-2` | `1` (tidak berubah) |

| `i=3` | `4` | `max(4, -2+4)=4` | `max(1, 4)=4` |

| `i=4` | `-1` | `max(-1, 4-1)=3` | `4` (tidak berubah) |

| `i=5` | `2` | `max(2, 3+2)=5` | `max(4, 5)=5` |

| `i=6` | `1` | `max(1, 5+1)=6` | `max(5, 6)=6` |

| `i=7` | `-5` | `max(-5, 6-5)=1` | `6` (tidak berubah) |

| `i=8` | `4` | `max(4, 1+4)=5` | `6` (tidak berubah) |

**Output:** `6`

### **Keunggulan Algoritma Kadane:**

- **Kompleksitas waktu O(n)**: Sangat efisien untuk data besar.

- **Hanya satu iterasi**: Tidak perlu nested loop.

- **Solusi optimal**: Memastikan hasil terbaik dengan *Dynamic


Programming*.

**Beri reaksi ❤️jika siap untuk kuis tentang pola ini!**

🔗 **Pola Coding Wawancara**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1629

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

_______________________________________110

**Pemrograman Python**
Berapa jumlah maksimum yang dapat diperoleh dari subarray berurutan
(bagian dari array asli) menggunakan Algoritma Kadane?

`arr = [-1, 2, 3, -4, 5, -1, 2]`

A. 6

B. 8

C. 7

D. 5

### **Jawaban yang Benar: C) 7**

**Penjelasan:**

Subarray dengan jumlah maksimum adalah `[2, 3, -4, 5, -1, 2]` atau `[5, -
1, 2]` (keduanya berjumlah 7).

**Simulasi Algoritma Kadane:**

```python

Def maxSubArray(arr):

Max_current = max_global = arr[0]

For i in range(1, len(arr)):

Max_current = max(arr[i], max_current + arr[i])

Max_global = max(max_global, max_current)

Return max_global

Print(maxSubArray([-1, 2, 3, -4, 5, -1, 2])) # Output: 7

```
**Langkah Iterasi:**

| Iterasi | Elemen | `max_current` (Baru) | `max_global` (Diperbarui) |

|---------|--------|----------------------|---------------------------|

| Awal |- | `-1` | `-1` |

| **`i=1`** | `2` | `max(2, -1+2)=2` | `max(-1, 2)=2` |

| **`i=2`** | `3` | `max(3, 2+3)=5` | `max(2, 5)=5` |

| **`i=3`** | `-4` | `max(-4, 5-4)=1` | `5` (tidak berubah) |

| **`i=4`** | `5` | `max(5, 1+5)=6` | `max(5, 6)=6` |

| **`i=5`** | `-1` | `max(-1, 6-1)=5` | `6` (tidak berubah) |

| **`i=6`** | `2` | `max(2, 5+2)=7` | `max(6, 7)=7` |

**Output:** `7`

### **Mengapa Bukan 8?**

- Jika mengambil seluruh array: `-1 + 2 + 3 -4 + 5 -1 + 2 = 6`

- Jika mengambil `[2, 3, 5, 2]`: `2+3+5+2=12` ❌ (*tidak berurutan*


karena melewatkan `-4` dan `-1`).

- Subarray harus **berurutan** tanpa melompati elemen.

**Beri reaksi ❤️jika jawabanmu benar!**

---

### **Catatan:**

- Algoritma Kadane memiliki kompleksitas **O(n)** dan efisien untuk data


besar.

- Solusi manual:

`[5, -1, 2]` → `5 -1 + 2 = 6` ❌ (salah hitung)


`[2, 3, -4, 5, -1, 2]` → `2+3-4+5-1+2 = 7` ✅.

_______________________________________111

***Jawaban Benar: C) 7***

Jumlah maksimum dari subarray berurutan adalah **7**, diperoleh dari


subarray `[2, 3, -4, 5, -1, 2]`:

```

2+3=5

5–4=1

1+5=6

6–1=5

5+2=7

```

*Beri reaksi ❤️jika jawabanmu benar*

### **Verifikasi:**

- **Alternatif lain**:

- `[2, 3]` = 5 ❌

- `[5]` = 5 ❌

- `[5, -1, 2]` = 6 ❌

- `[2, 3, 5, 2]` = 12 ❌ (*tidak valid karena tidak berurutan*)

- **Hanya subarray penuh** `[2, 3, -4, 5, -1, 2]` yang menghasilkan **7**.

### **Algoritma Kadane Berbicara!**

Kode Python telah mengonfirmasi hasil ini:

```python
Print(maxSubArray([-1, 2, 3, -4, 5, -1, 2])) # Output: 7

```

_______________________________________112

### **Teknik Sliding Window (Ukuran Tetap & Variabel)**

Teknik Sliding Window adalah metode ampuh untuk menyelesaikan


masalah yang melibatkan urutan berurutan (contiguous) dalam array dan
string.

Bayangkan seperti memiliki jendela kecil di atas data yang bergerak


langkah demi langkah untuk memeriksa bagian-bagian berbeda tanpa
harus memulai ulang setiap kali. Ini sangat meningkatkan kinerja
dibandingkan solusi brute-force.

### **Kapan Menggunakan Sliding Window?**

- Saat diminta mencari nilai **maks/min/jumlah/rata-rata**


subarray/substring.

- Input memiliki elemen **berurutan**.

- Butuh alternatif lebih cepat dari nested loop (misal: dari O(n²) ke O(n)).

### **1. Sliding Window Ukuran Tetap**

**Pernyataan Masalah:**

Diberikan list bilangan bulat dan angka `k`. Temukan jumlah maksimum
dari sembarang subarray berurutan berukuran `k`.

**Solusi:**

```python

Def max_sum_fixed_window(arr, k):

Window_sum = sum(arr[:k]) # Jumlah jendela awal


Max_sum = window_sum

For i in range(k, len(arr)):

Window_sum += arr[i] – arr[i – k] # Geser jendela

Max_sum = max(max_sum, window_sum)

Return max_sum

# Contoh

Arr = [2, 1, 5, 1, 3, 2]

K=3

Print(max_sum_fixed_window(arr, k)) # Output: 9

```

**Cara Jendela Bergerak:**

```

[2, 1, 5] → jumlah = 8

[1, 5, 1] → jumlah = 7

[5, 1, 3] → jumlah = 9 (maks)

```

### **2. Sliding Window Ukuran Variabel**

**Pernyataan Masalah:**

Diberikan list bilangan bulat positif dan target `S`, temukan panjang
terkecil subarray berurutan yang jumlahnya ≥ `S`.

**Solusi:**

```python

Def min_subarray_len(target, arr):


Window_start = 0

Window_sum = 0

Min_length = float(‘inf’) # Panjang minimal diinisialisasi sebagai tak


hingga

For window_end in range(len(arr)):

Window_sum += arr[window_end] # Tambahkan elemen

While window_sum >= target:

Min_length = min(min_length, window_end – window_start + 1)

Window_sum -= arr[window_start] # Kurangi elemen yang keluar

Window_start += 1 # Geser jendela

Return min_length if min_length != float(‘inf’) else 0

# Contoh

Arr = [2, 1, 5, 2, 3, 2]

Target = 7

Print(min_subarray_len(target, arr)) # Output: 2

```

**Cara Kerja:**

- Perluas jendela ke kanan dengan menambahkan elemen.

- Ketika jumlah ≥ target, perkecil jendela dari kiri untuk temukan jendela
valid terkecil.

### **Kapan Menggunakan?**

- **Ukuran Tetap**: Ketika panjang subarray **tetap** (contoh: ukuran


`k`).
- **Ukuran Variabel**: Ketika panjang subarray **bergantung kondisi**
(contoh: jumlah ≥ target).

**Beri reaksi ❤️jika siap untuk kuis tentang topik ini!**

🔗 **Pola Coding Wawancara**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1629

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

---

### **Catatan:**

- Istilah teknis seperti *sliding window*, *array*, dan *loop* dipertahankan


dalam bahasa Inggris karena sudah umum.

- Kode tidak diubah untuk menjaga keakuratan sintaks Python.

- Penjelasan menggunakan analogi “jendela” untuk memudahkan


pemahaman.

_______________________________________113

**Pemrograman Python**

Diberikan array bilangan bulat dan angka `k`:

`arr = [1, 4, 2, 10, 23, 3, 1, 0, 20]`

`k = 4`

Tugas: Temukan jumlah maksimum dari subarray berurutan dengan


panjang tepat 4 elemen.

A. 39
B. 24

C. 50

D. 26

### **Jawaban yang Benar: A) 39**

**Penjelasan:**

Subarray dengan jumlah maksimal adalah `[4, 2, 10, 23]`:

`4 + 2 + 10 + 23 = 39`

**Simulasi dengan Teknik Sliding Window (Ukuran Tetap):**

```python

Def max_sum_fixed_window(arr, k):

Window_sum = sum(arr[:k]) # Hitung jendela awal: arr[0] hingga arr[3]

Max_sum = window_sum # Inisialisasi max_sum = 17 (1+4+2+10)

For i in range(k, len(arr)):

Window_sum = window_sum – arr[i – k] + arr[i] # Geser jendela

Max_sum = max(max_sum, window_sum)

Return max_sum

Arr = [1, 4, 2, 10, 23, 3, 1, 0, 20]

K=4

Print(max_sum_fixed_window(arr, k)) # Output: 39

```

**Langkah Iterasi:**

1. Jendela `[1,4,2,10]` → `sum = 17` → `max_sum = 17`

2. Geser: `[4,2,10,23]` → `sum = 17 – 1 + 23 = 39` → `max_sum = 39`


3. Geser: `[2,10,23,3]` → `sum = 39 – 4 + 3 = 38` → `max_sum = 39`

4. Geser: `[10,23,3,1]` → `sum = 38 – 2 + 1 = 37` → `max_sum = 39`

5. Geser: `[23,3,1,0]` → `sum = 37 – 10 + 0 = 27` → `max_sum = 39`

6. Geser: `[3,1,0,20]` → `sum = 27 – 23 + 20 = 24` → `max_sum = 39`

**Jumlah maksimum: 39**

**Beri reaksi ❤️jika jawabanmu benar!**

---

### **Catatan:**

- Teknik *sliding window* mengurangi kompleksitas dari O(n²) (brute-force)


menjadi **O(n)**.

- Tidak ada subarray lain yang memberikan jumlah lebih besar dari 39.

_______________________________________114

***Jawaban Benar: A) 39***

Dengan array `arr = [1, 4, 2, 10, 23, 3, 1, 0, 20]` dan `k = 4`:

Kita menggeser jendela berukuran 4 dan menghitung jumlah tiap jendela:

1. `[1, 4, 2, 10]` → **1 + 4 + 2 + 10 = 17**

2. `[4, 2, 10, 23]` → **4 + 2 + 10 + 23 = 39** ← **Maksimal**

3. `[2, 10, 23, 3]` → **2 + 10 + 23 + 3 = 38**

4. `[10, 23, 3, 1]` → **10 + 23 + 3 + 1 = 37**

5. `[23, 3, 1, 0]` → **23 + 3 + 1 + 0 = 27**

6. `[3, 1, 0, 20]` → **3 + 1 + 0 + 20 = 24**


**Jumlah maksimum subarray berukuran 4 adalah 39.**

### **Keunggulan Teknik Sliding Window:**

- **Efisien**: Tidak perlu menghitung ulang seluruh jendela setiap kali.

- **Optimal**: Hanya kurangi elemen yang keluar dan tambahkan elemen


baru.

- **Kompleksitas O(n)**: Sangat cepat untuk data besar.

*Beri reaksi ❤️jika jawabanmu benar*

### **Cara Kerja:**

```python

Window_sum = window_sum – elemen_keluar + elemen_masuk

```

Contoh dari jendela 1 ke jendela 2:

`17 (jendela 1) – 1 (elemen keluar) + 23 (elemen masuk) = 39`

Ini menghemat komputasi dibanding metode brute-force! 🚀

_______________________________________115

### **Teknik Dua Pointer (Two Pointer Technique)**

**Mengapa pewawancara menanyakan ini?**

Teknik Dua Pointer sangat umum dalam masalah array dan string,
terutama untuk mengoptimalkan kompleksitas waktu. Sering digunakan
untuk:

- Array terurut

- Mencari pasangan/triplet dengan kondisi tertentu

- Penggabungan array
- Masalah manipulasi string

Ini menunjukkan kemampuan Anda menulis solusi optimal tanpa *brute


force*.

**Gunakan teknik ini saat:**

- Membandingkan/memasangkan elemen dalam urutan

- Memecahkan masalah seperti:

- Jumlah pasangan dalam array terurut

- Membalik string/array

- Memindahkan nol ke akhir

- Mengkuadratkan & mengurutkan array terurut

- Memeriksa palindrom

### **Jenis Teknik Dua Pointer:**

1. **Arah Berlawanan:**

Pointer di awal dan akhir, bergerak ke tengah.

*Contoh:* Mencari pasangan dengan jumlah target.

2. **Arah Sama:**

Kedua pointer mulai dari awal, bergerak maju.

*Contoh:* Menghapus duplikat, menggabungkan array.

### **Contoh Masalah Penting:**

#### **1. Pasangan dengan Jumlah Target (Array Terurut)**

```python
Def has_pair_with_sum(arr, target):

Left, right = 0, len(arr)-1

While left < right:

Current_sum = arr[left] + arr[right]

If current_sum == target:

Return True

Elif current_sum < target:

Left += 1

Else:

Right -= 1

Return False

```

*Contoh:* `arr = [1,2,4,6,10]`, `target=8` → `True` (2+6)

**Keunggulan:**

- Brute-force: O(n²)

- Dua pointer: O(n)

#### **2. Menghapus Duplikat (Array Terurut)**

```python

Def remove_duplicates(nums):

If not nums: return 0

Slow = 0

For fast in range(1, len(nums)):

If nums[fast] != nums[slow]:

Slow += 1

Nums[slow] = nums[fast]

Return slow + 1
```

*Contoh:* `[1,1,2,2,3]` → `[1,2,3]` (panjang=3)

#### **3. Membalik String/Array**

```python

Def reverse_string(s):

Left, right = 0, len(s)-1

While left < right:

S[left], s[right] = s[right], s[left]

Left += 1

Right -= 1

```

*Contoh:* `”hello”` → `”olleh”`

#### **4. Memindahkan Nol ke Akhir**

```python

Def move_zeros(nums):

Non_zero = 0

For i in range(len(nums)):

If nums[i] != 0:

Nums[non_zero], nums[i] = nums[i], nums[non_zero]

Non_zero += 1

```

*Contoh:* `[0,1,0,3,12]` → `[1,3,12,0,0]`

#### **5. Memeriksa Palindrom**


```python

Def is_palindrome(s):

Left, right = 0, len(s)-1

While left < right:

If s[left] != s[right]:

Return False

Left += 1

Right -= 1

Return True

```

*Contoh:* `”racecar”` → `True`

#### **6. Kuadrat Terurut Array Terurut**

```python

Def sorted_squares(nums):

Result = [0] * len(nums)

Left, right = 0, len(nums)-1

Index = len(nums)-1

While left <= right:

If abs(nums[left]) > abs(nums[right]):

Result[index] = nums[left]**2

Left += 1

Else:

Result[index] = nums[right]**2

Right -= 1

Index -= 1

Return result

```
*Contoh:* `[-4,-1,0,3,10]` → `[0,1,9,16,100]`

**Teknik dua pointer mengoptimalkan masalah array/string — terutama


untuk data terurut atau pencarian.**

**Beri reaksi ❤️jika siap untuk kuis tentang topik ini!**

🔗 **Seri Belajar Python**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

🔗 **Pola Coding Wawancara**:

https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1629

---

### **Catatan:**

- Istilah teknis seperti *pointer*, *array*, dan *brute-force* dipertahankan


dalam bahasa Inggris karena sudah umum.

- Kode tidak diubah untuk menjaga keakuratan sintaks.

- Penjelasan menggunakan analogi pergerakan pointer untuk


memudahkan pemahaman.

______________________________________116

**Pemrograman Python**

Diberikan array terurut:

`arr = [-4, -1, 0, 3, 10]`

Dengan teknik dua pointer, apa output fungsi yang mengembalikan


kuadrat angka dalam urutan tidak menurun (*non-decreasing*)?
A. `[0, 1, 9, 16, 100]`

B. `[-16, -1, 0, 9, 100]`

C. `[100, 16, 9, 1, 0]`

D. `[1, 0, 9, 16, 100]`

### **Jawaban yang Benar: A) `[0, 1, 9, 16, 100]`**

**Penjelasan:**

Fungsi `sorted_squares` menggunakan dua pointer (kiri dan kanan) untuk


mengisi array hasil dari belakang ke depan:

```python

Def sorted_squares(nums):

Result = [0] * len(nums)

Left, right = 0, len(nums) – 1

Index = len(nums) – 1 # Penunjuk untuk mengisi hasil dari indeks


terbesar

While left <= right:

If abs(nums[left]) > abs(nums[right]):

Result[index] = nums[left] ** 2

Left += 1

Else:

Result[index] = nums[right] ** 2

Right -= 1

Index -= 1

Return result

```
**Simulasi Langkah Demi Langkah:**

1. **Iterasi 1**:

- `left=0` (nilai=-4), `right=4` (nilai=10)

- `abs(-4) < abs(10)` → `result[4] = 10**2 = 100`

- `right=3`, `index=3`

2. **Iterasi 2**:

- `left=0` (-4), `right=3` (3)

- `abs(-4) > abs(3)` → `result[3] = (-4)**2 = 16`

- `left=1`, `index=2`

3. **Iterasi 3**:

- `left=1` (-1), `right=3` (3)

- `abs(-1) < abs(3)` → `result[2] = 3**2 = 9`

- `right=2`, `index=1`

4. **Iterasi 4**:

- `left=1` (-1), `right=2` (0)

- `abs(-1) > abs(0)` → `result[1] = (-1)**2 = 1`

- `left=2`, `index=0`

5. **Iterasi 5**:

- `left=2` (0), `right=2` (0)

- `abs(0) == abs(0)` → `result[0] = 0**2 = 0`

**Output**: `[0, 1, 9, 16, 100]`

### **Mengapa Bukan Opsi Lain?**


- **B** ❌: Kuadrat tidak mungkin negatif.

- **C** ❌: Output terbalik (harus urutan menaik).

- **D** ❌: Urutan tidak menaik (1 > 0).

**Beri reaksi ❤️jika jawabanmu benar!**

---

### **Catatan:**

- Teknik dua pointer optimal karena bekerja dalam **O(n)**.

- Kuadrat angka negatif menjadi positif, sehingga perlu perbandingan nilai


absolut.

_______________________________________117

***Jawaban Benar: A) [0, 1, 9, 16, 100]***

Anda diberikan array yang sudah diurutkan, tetapi mengandung angka


negatif dan positif.

Ketika Anda mengkuadratkan angka-angka ini, urutannya mungkin tidak


lagi terurut.

Contoh:

`arr = [-4, -1, 0, 3, 10]`

Kuadratnya: `[16, 1, 0, 9, 100]` → tidak terurut.

Jadi, kita gunakan Teknik Dua Pointer untuk menyelesaikan ini secara
efisien.

**Langkah-langkah (Menggunakan Teknik Dua Pointer):**

1. Mulai dengan dua pointer:


- `left` di awal (indeks 0)

- `right` di akhir (indeks 4)

3. Buat array hasil kosong berukuran sama. Isi dari belakang ke depan,
menempatkan kuadrat terbesar terlebih dahulu.

3. Bandingkan nilai absolut di `left` dan `right`:

- Kuadratkan yang lebih besar.

- Tempatkan di indeks terakhir yang tersedia dalam array hasil.

- Geser pointer yang sesuai.

**Solusi Kode Python:**

```python

Def sorted_squares(arr):

N = len(arr)

Result = [0] * n

Left, right = 0, n – 1

Pos = n – 1 # Posisi untuk mengisi hasil

While left <= right:

If abs(arr[left]) > abs(arr[right]):

Result[pos] = arr[left] ** 2

Left += 1

Else:

Result[pos] = arr[right] ** 2

Right -= 1

Pos -= 1

Return result
# Contoh

Arr = [-4, -1, 0, 3, 10]

Print(sorted_squares(arr)) # Output: [0, 1, 9, 16, 100]

```

**Cara Kerja:**

- Membandingkan nilai absolut dari kedua ujung.

- Kuadrat terbesar ditempatkan di akhir array hasil (pos).

- Berlanjut sampai semua elemen diproses.

**Kompleksitas Waktu: O(n)** (pemindaian linear, sangat efisien).

*Beri reaksi ❤️jika jawabanmu benar*

### Penjelasan Tambahan:

- Output `[0, 1, 9, 16, 100]` sudah dalam urutan tidak menurun


(ascending).

- Teknik ini optimal karena hanya membutuhkan satu iterasi melalui array.

_______________________________________118

Berikut terjemahan lengkap teks Anda ke dalam Bahasa Indonesia:

Hai semua,

Sebelum membahas pola-pola coding wawancara tingkat lanjut, penting


untuk memastikan kalian memiliki dasar Python yang kuat.
Meskipun kami sudah membahas banyak konsep esensial dalam *Python
Learning Series*, penting untuk menyegarkan dan memperkuat beberapa
konsep inti sebelum beralih ke pola coding wawancara tingkat lanjut.

*Python Learning Series*:


https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

Dalam postingan ini, kita akan fokus pada konsep inti Python yang
diperlukan untuk memahami pola-pola coding yang akan datang.

Kami akan membaginya dalam lima bagian.

**Bagian 1: Kompleksitas Waktu & Kompleksitas Ruang (Big O Notation)**

Sebagai pemecah masalah berbasis data, memahami efisiensi algoritma


kalian sangat penting.

Dalam wawancara, kalian sering akan ditanya tentang kompleksitas waktu


dan ruang dari kode kalian. Memahami cara menganalisis algoritma
menggunakan *Big O Notation* membantu kalian menulis solusi optimal
yang bekerja efisien pada kumpulan data besar.

**Penjelasan Big O Notation:**

* **Kompleksitas Waktu:** Mengukur bagaimana waktu eksekusi


algoritma meningkat seiring ukuran input.

* **Kompleksitas Ruang:** Mengukur bagaimana penggunaan memori


meningkat seiring ukuran input.

**Kompleksitas Big O Umum yang Harus Diketahui:**


* `O(1)`: Waktu konstan (contoh: mengakses elemen dalam daftar
berdasarkan indeks).

* `O(n)`: Waktu linier (contoh: perulangan melalui semua elemen dalam


daftar).

* `O(log n)`: Waktu logaritmik (contoh: pencarian biner dalam daftar


terurut).

* `O(n^2)`: Waktu kuadratik (contoh: *Bubble Sort*).

**Bagian 2: Bekerja dengan Array dan List**

Array dan list adalah struktur data inti yang akan sering kalian gunakan
dalam wawancara coding. Memahami sifat dan operasinya akan
membantu kalian menyelesaikan masalah lebih efisien.

**Array vs List:**

* Array adalah blok memori *contiguous* berukuran tetap yang


menyimpan elemen dengan tipe sama. Akses elemennya cepat tetapi
mengubah ukuran (*resizing*) mahal.

* List di Python bersifat dinamis, artinya ukurannya bisa bertambah atau


menyusut sesuai kebutuhan. List Python mirip dengan array tetapi lebih
fleksibel.

**Operasi Umum:**

* Mengakses Elemen: `arr[i]`

* Menambahkan ke List: `list.append(elemen)`

* Menyisipkan pada Indeks: `list.insert(indeks, elemen)`

* Menghapus Elemen: `list.remove(elemen)` atau `del list[indeks]`


**Kapan Menggunakan List:**

Saat kalian memerlukan kumpulan item yang mungkin berubah


ukurannya atau membutuhkan modifikasi sering.

**Bagian 3: Rekursi**

Rekursi adalah teknik di mana suatu fungsi memanggil dirinya sendiri


untuk menyelesaikan sub-masalah yang lebih kecil. Teknik ini penting
untuk menyelesaikan masalah seperti deret Fibonacci, perhitungan
faktorial, dan banyak masalah terkait pohon/graf.

**Contoh Rekursi Dasar:**

Misalkan kalian ingin menghitung faktorial dari bilangan `n`. Faktorial `n`
(dilambangkan `n!`) adalah hasil perkalian semua bilangan bulat positif
hingga `n`.

**Berikut fungsi rekursifnya:**

```python

Def faktorial(n):

# Kasus dasar: faktorial 1 adalah 1

If n == 1:

Return 1

# Kasus rekursif: n * faktorial dari (n-1)

Else:

Return n * faktorial(n – 1)

Print(faktorial(5)) # Output: 120

```

**Poin Penting tentang Rekursi:**


* Fungsi memerlukan *base case* (kasus dasar) untuk mencegah rekursi
tak terhingga.

* *Recursive case* (kasus rekursif) memanggil fungsi dengan input yang


lebih kecil hingga mencapai *base case*.

**Bagian 4: Algoritma Pengurutan (Penting untuk Wawancara)**

Algoritma pengurutan mendasar dalam banyak masalah dan membantu


meningkatkan efisiensi solusi. Memahami berbagai algoritma pengurutan
dan kompleksitas waktunya adalah kunci untuk menyelesaikan masalah
secara efektif dalam wawancara.

**Algoritma Pengurutan Umum yang Harus Diketahui:**

* **Bubble Sort** (`O(n^2)`): Sederhana tetapi tidak efisien untuk


kumpulan data besar.

* **Merge Sort** (`O(n log n)`): Efisien, membagi list menjadi sublist
lebih kecil secara rekursif.

* **Quick Sort** (`O(n log n)` rata-rata): Algoritma pengurutan cepat


dengan pendekatan *divide-and-conquer*.

**Contoh Merge Sort:**

```python

Def merge_sort(arr):

If len(arr) > 1:

Mid = len(arr) // 2

Separuh_kiri = arr[:mid]

Separuh_kanan = arr[mid:]
Merge_sort(separuh_kiri)

Merge_sort(separuh_kanan)

I=j=k=0

While i < len(separuh_kiri) and j < len(separuh_kanan):

If separuh_kiri[i] < separuh_kanan[j]:

Arr[k] = separuh_kiri[i]

I += 1

Else:

Arr[k] = separuh_kanan[j]

J += 1

K += 1

While i < len(separuh_kiri):

Arr[k] = separuh_kiri[i]

I += 1

K += 1

While j < len(separuh_kanan):

Arr[k] = separuh_kanan[j]

J += 1

K += 1

Arr = [38, 27, 43, 3, 9, 82, 10]

Merge_sort(arr)

Print(arr) # Output: [3, 9, 10, 27, 38, 43, 82]

```
**Bagian 5: Struktur Data Kunci: Stack, Queue, dan Linked List**

Memahami stack, queue, dan linked list sangat penting karena sering
digunakan dalam soal wawancara. Struktur data ini sangat membantu
untuk masalah yang melibatkan penelusuran, pengelolaan urutan, atau
pemrosesan data yang efisien.

* **Stack:** *Last In, First Out* (LIFO). Sering digunakan untuk operasi
undo, parsing ekspresi, dan mengelola pemanggilan rekursif.

* **Queue:** *First In, First Out* (FIFO). Umum digunakan dalam


*Breadth-First Search* (BFS), antrian tugas, dan buffering.

* **Linked List:** Struktur data linear di mana setiap elemen (node)


menunjuk ke elemen berikutnya. Sering digunakan dalam masalah alokasi
memori dinamis atau implementasi queue dan stack.

Dalam postingan mendatang, kita akan menyelami konsep lanjutan


seperti *Sliding Window*, Teknik *Two Pointer*, dan *Backtracking*. Pola-
pola ini digunakan dalam banyak wawancara teknis untuk menguji
keterampilan pemecahan masalah.

Dengan memahami konsep-konsep esensial ini, kalian akan siap untuk


menghadapi pola-pola coding yang lebih kompleks dalam seri wawancara
ini.

Untuk memastikan kalian benar-benar memahami konsep dasar ini, kami


akan memposting beberapa kuis singkat untuk kalian!

**Beri reaksi ❤️jika kalian sudah siap untuk kuis berikutnya!**

_______________________________________119

Berikut terjemahan pertanyaan dan pilihan jawabannya dalam Bahasa


Indonesia:
**Pemrograman Python**

Apa yang akan menjadi Output dari kode Python berikut?

```python

A = [1, 2, 3]

B=a

b.append(4)

print(a)

```

A. `[1, 2, 3]`

B. `[1, 2, 3, 4]`

C. `[4, 1, 2, 3]`

D. `Error`

### Penjelasan Singkat:

- **Variabel `b` bukan salinan baru**, melainkan merujuk ke objek list


yang sama dengan `a` (*passed by reference*).

- Saat `b.append(4)` dijalankan, list yang dirujuk oleh `a` dan `b` sama-
sama berubah.

- **Output yang benar adalah `[1, 2, 3, 4]` (Jawaban B)**.

 💡 **Catatan**: Perilaku ini terjadi karena list bersifat *mutable*


dalam Python. Untuk membuat salinan independen, gunakan `b =
a.copy()` atau `b = a[:]`.

_______________________________________120
Berikut terjemahan penjelasannya dalam Bahasa Indonesia:

***Jawaban Benar: B) [1, 2, 3, 4]***

Dalam Python, list adalah objek yang dapat diubah (*mutable*). Saat
Anda menulis `b = a`, baik `a` maupun `b` merujuk ke list yang sama di
memori. Jadi ketika `b.append(4)` dieksekusi, itu mengubah list asli —
itulah sebabnya `a` juga ikut berubah.

***Beri reaksi ❤️jika jawabanmu benar***

---

### Penjelasan Tambahan:

- **Mutability**: List bersifat *mutable* (dapat dimodifikasi setelah


dibuat), sehingga operasi melalui variabel manapun yang merujuk objek
yang sama akan mempengaruhi data asli.

- **Cara menghindari**: Jika ingin membuat salinan independen, gunakan:

```python

B = a.copy() # atau

B = a[:] # slicing

```

_______________________________________121

Berikut terjemahan pertanyaan dan pilihan jawabannya dalam Bahasa


Indonesia:

**Pemrograman Python**

Apa yang akan menjadi Output dari kode berikut?


```python

Numbers = [1, 2, 3, 4, 5]

Squares = [x**2 for x in numbers if x % 2 ==0]

Print(squares)

```

A. `[1, 4, 9, 16, 25]`

B. `[4, 16]`

C. `[1, 9, 25]`

D. `[2, 4]`

### Penjelasan Singkat:

- Kode ini menggunakan *list comprehension* untuk membuat list baru


(`squares`)

- Hanya mengambil angka genap (`x % 2 == 0`) dari list `numbers` (yaitu
**2** dan **4**)

- Menghitung kuadratnya:

- `2² = 4`

- `4² = 16`

- **Output yang benar adalah `[4, 16]` (Jawaban B)**.

 💡 *Catatan*: List comprehension adalah cara ringkas untuk


membuat list baru dengan menerapkan operasi pada setiap item
dalam iterable yang memenuhi kondisi tertentu.

_______________________________________122

Berikut terjemahan penjelasannya dalam Bahasa Indonesia:


***Jawaban Benar: B) [4, 16]***

*List comprehension* melakukan iterasi pada setiap angka di dalam list.

Hanya angka genap (`x % 2 == 0`) yang dimasukkan dan kemudian


dikuadratkan (`x**2`).

Jadi, hanya angka 2 dan 4 yang diproses:

`2² = 4`

`4² = 16`

Hasil: `[4, 16]`

***Beri reaksi ❤️jika jawabanmu benar***

### Penjelasan Tambahan:

- **List Comprehension** = Cara ringkas membuat list baru dengan:

1. Iterasi elemen (`for x in numbers`)

2. Filter kondisi (`if x % 2 == 0`)

3. Transformasi nilai (`x**2`)

- Angka ganjil (1, 3, 5) tidak memenuhi filter sehingga tidak diproses.

_______________________________________123

Berikut terjemahan lengkapnya dalam Bahasa Indonesia:


Seseorang memberi tahu saya tentang **asisten AI gratis di WhatsApp**
yang dibuat oleh ***Perplexity***.

Anda bisa:

✔️**Membuat dan mengedit gambar**

✔️**Bertanya apa saja**

✔️**Memeriksa fakta secara instan** hanya dengan meneruskan


pesan/foto

Teman yang bekerja di sana mengatakan ini **gratis untuk 1 juta


pengguna pertama**, dan ini cara hebat dapatkan:

✨ **Generasi gambar tanpa batas**

✨ **Respons AI canggih** langsung di WhatsApp

Pantas banget dicoba di sini:

***http://wa.me/18334363285?text=What%20are%20the%20top%20news
%20for%20India***

### Penjelasan istilah:

- **Fact-check** = *Memeriksa kebenaran fakta*

- **Unlimited image generation** = *Pembuatan gambar tanpa batas*

- **AI responses** = *Tanggapan/respons kecerdasan buatan*

 💡 *Catatan*: Tautan tersebut akan membuka chat WhatsApp dengan


pertanyaan otomatis “What are the top news for India” yang bisa
diubah sesuai kebutuhan.

_______________________________________124

Berikut terjemahan konten tentang *Prefix Sum Technique* dalam Bahasa


Indonesia:
**Teknik Prefix Sum**

**Apa itu Prefix Sum?**

Teknik prefix sum membantu Anda menghitung jumlah kumulatif


(*cumulative sum*) array terlebih dahulu. Daripada berulang kali
menjumlahkan subarray, Anda bisa mendapatkan hasilnya dalam waktu
konstan (O(1)) menggunakan rumus sederhana.

**Mengapa Pewawancara Menanyakan Ini?**

- Menguji kemampuan mengoptimalkan solusi *brute-force*

- Umum digunakan untuk masalah subarray atau berbasis rentang

- Memeriksa pemahaman tentang *hashmap* + array + pertukaran


kompleksitas waktu

**1. Soal: Range Sum Query**

Diberikan array bilangan bulat dan beberapa *query* bentuk (i, j). Untuk
setiap *query*, kembalikan jumlah elemen dari indeks i ke j (inklusif).

*Contoh:*

```python

Arr = [2, 4, 6, 8, 10]

Query = (1, 3)

```

*Output yang Diharapkan:* 4 + 6 + 8 = 18

**Solusi Brute Force (Tidak Efisien):**

Loop dari i ke j dan jumlahkan setiap elemen — memerlukan O(n) per


*query*.
**Pendekatan Prefix Sum:**

1. Bangun array prefix sum:

```prefix[i] = jumlah elemen dari arr[0] hingga arr[i]```

2. Untuk jumlah dari indeks i ke j:

```sum = prefix[j] – prefix[i-1]```

(Jika i = 0, kembalikan prefix[j])

*Kode Python:*

```python

Def build_prefix_sum(arr):

Prefix = [0] * len(arr)

Prefix[0] = arr[0]

For i in range(1, len(arr)):

Prefix[i] = prefix[i-1] + arr[i]

Return prefix

Def range_sum(prefix, i, j):

If i == 0:

Return prefix[j]

Return prefix[j] – prefix[i-1]

# Contoh penggunaan

Arr = [2, 4, 6, 8, 10]

Prefix = build_prefix_sum(arr)

Print(range_sum(prefix, 1, 3)) # Output: 18

```
**2. Soal: Subarray Sum Equals K**

Diberikan array bilangan bulat dan angka k. Temukan jumlah subarray


yang jumlahnya tepat k.

*Contoh:*

```python

Arr = [1, 1, 1], k = 2

```

*Output yang Diharapkan:* 2

(Ada dua subarray: [1,1] pada indeks (0,1) dan (1,2))

**Pendekatan Prefix Sum + Hashmap:**

1. Simpan `prefix_sum` selama iterasi array

2. Gunakan *hashmap* untuk catat frekuensi kemunculan tiap


`prefix_sum`

3. Di setiap langkah, periksa apakah `(prefix_sum – k)` ada di *hashmap*

*Kode Python:*

```python

Def subarray_sum(nums, k):

Count = 0

Prefix_sum = 0

Seen = {0: 1} # Inisialisasi: satu cara untuk memiliki sum = 0 di awal

For num in nums:

Prefix_sum += num

If prefix_sum – k in seen:

Count += seen[prefix_sum – k]

Seen[prefix_sum] = seen.get(prefix_sum, 0) + 1
Return count

# Contoh penggunaan

Print(subarray_sum([1, 1, 1], 2)) # Output: 2

```

**Rekap Singkat**

- Prefix sum memungkinkan *query* rentang yang cepat

- Berfungsi baik dengan *hashmap* untuk menyelesaikan masalah


subarray secara efisien

- Sering dipasangkan dengan pola *sliding window*, *two-pointer*, atau


*hashmap*

**Beri reaksi ❤️jika sudah siap untuk kuis berikutnya tentang topik ini!**

### Tautan Referensi:

Python Learning Series:


https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

Interview Coding Patterns:


https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1629

_______________________________________125

Berikut terjemahan pertanyaan dan opsi jawabannya dalam Bahasa


Indonesia:

**Pemrograman Python**

Anda diberikan sebuah array:


```python

Arr = [3, 4, -2, 5, -1]

```

Dengan teknik prefix sum, berapa jumlah subarray dari indeks 1 hingga
indeks 3?

A. 7

B. 6

C. 8

D. 5

### Penjelasan Langkah Demi Langkah:

1. **Bangun array prefix sum**:

```

Prefix[0] = arr[0] = 3

Prefix[1] = 3 + 4 = 7

Prefix[2] = 7 + (-2) = 5

Prefix[3] = 5 + 5 = 10

Prefix[4] = 10 + (-1) = 9

```

2. **Hitung jumlah subarray indeks 1-3**:

```python

Sum = prefix[3] – prefix[0] # (karena i=1 → prefix[i-1] = prefix[0])

Sum = 10 – 3 = 7

```

3. **Verifikasi manual**:
Elemen indeks 1-3: `[4, -2, 5]`

`4 + (-2) + 5 = 7`

**Jawaban benar: A. 7** ✅

 💡 *Catatan*: Indeks array dimulai dari 0. Subarray indeks 1-3 berarti


elemen ke-1 sampai ke-3 (yaitu posisi ke-2, 3, dan 4 dalam array).

_______________________________________126

Berikut terjemahan penjelasan dan kode Python dalam Bahasa Indonesia:

***Jawaban Benar: A) 7***

Array prefix sum:

`prefix[0] = 3`

`prefix[1] = 3 + 4 = 7`

`prefix[2] = 7 – 2 = 5`

`prefix[3] = 5 + 5 = 10`

Jumlah dari indeks 1 hingga 3 = `prefix[3] – prefix[0] = 10 – 3 = 7`

*Kode Python:*

```python

Arr = [3, 4, -2, 5, -1]

# Bangun prefix sum

Prefix = [arr[0]]

For i in range(1, len(arr)):


Prefix.append(prefix[i – 1] + arr[i])

# Cari jumlah dari indeks 1 hingga 3:

Start = 1

End = 3

If start == 0:

Result = prefix[end]

Else:

Result = prefix[end] – prefix[start – 1]

Print(“Jumlah dari indeks 1 hingga 3 adalah:”, result)

```

***Beri reaksi ❤️jika jawabanmu benar***

### Penjelasan Tambahan:

1. **Cara kerja kode**:

- Loop `for` membangun array prefix sum secara bertahap

- `start-1` digunakan karena prefix sum menyimpan jumlah kumulatif


*hingga* indeks tertentu

- Operasi `prefix[end] – prefix[start-1]` mengisolasi jumlah elemen


antara indeks `start` dan `end`

2. **Verifikasi elemen**:

- Elemen indeks 1: 4

- Elemen indeks 2: -2

- Elemen indeks 3: 5
- Total: 4 + (-2) + 5 = 7

_______________________________________127

Berikut terjemahan daftar A-Z konsep esensial Python dalam Bahasa


Indonesia:

***Ini daftar A-Z konsep pemrograman Python yang esensial***

**A** - *Arguments* (Argumen)

**B** - *Built-in Functions* (Fungsi Bawaan)

**C** - *Comprehensions* (Ekspresi Ringkas)

**D** - *Dictionaries* (Kamus)

**E** - *Exceptions* (Eksepsi/Penanganan Kesalahan)

**F** - *Functions* (Fungsi)

**G** - *Generators* (Generator)

**H** - *Higher-Order Functions* (Fungsi Orde Tinggi)

**I** - *Iterators* (Iterator)

**J** - *Join Method* (Metode Join)

**K** - *Keyword Arguments* (Argumen Berkeyword)

**L** - *Lambda Functions* (Fungsi Lambda)

**M** - *Modules* (Modul)

**N** - *NoneType* (Tipe None)

**O** - *Object-Oriented Programming* (Pemrograman Berorientasi Objek)

**P** - *PEP8* (Panduan Gaya Penulisan Python)

**Q** - *Queue* (Antrian)

**R** - *Range Function* (Fungsi Range)

**S** - *Sets* (Himpunan)

**T** - *Tuples* (Tupel)


**U** - *Unpacking* (Pembongkaran)

**V** - *Variables* (Variabel)

**W** - *While Loop* (Perulangan While)

**X** - *XOR Operation* (Operasi XOR)

**Y** - *Yield Keyword* (Keyword Yield)

**Z** - *Zip Function* (Fungsi Zip)

Konsep-konsep ini merupakan fondasi untuk menguasai Python dan


menulis kode yang bersih, efisien, dan *Pythonic*.

***Beri reaksi ❤️untuk penjelasan detail setiap konsep***

### Penjelasan Singkat Beberapa Istilah:

- **Comprehensions**: Cara ringkas membuat list/dict/set (contoh: `[x*2


for x in range(5)]`)

- **Generators**: Fungsi yang menghasilkan nilai secara *lazy* dengan


`yield`

- **PEP8**: Pedoman penulisan kode Python standar (indentasi,


penamaan, dll)

- **Unpacking**: Membongkar koleksi nilai (contoh: `a, b, *c = [1, 2, 3,


4]`)

- **Zip**: Menggabungkan beberapa iterable (contoh: `list(zip([1,2],


[‘a’,’b’])) → [(1,’a’), (2,’b’)]`

_______________________________________128

Berikut terjemahan lengkap penjelasan konsep A-Z Python dalam Bahasa


Indonesia:

**Mari sekarang pahami A-Z konsep pemrograman Python lebih detail:**


**A – Arguments (Argumen)**

Input yang diberikan ke fungsi. Bisa berupa:

- *Positional*: berdasarkan urutan

- *Keyword*: ditentukan dengan nama

- *Default*: sudah didefinisikan sebelumnya jika tidak diberikan

- *Variable-length*: `*args`, `**kwargs` untuk input fleksibel.

**B – Built-in Functions (Fungsi Bawaan)**

Fungsi yang sudah didefinisikan sebelumnya di Python seperti:

`print()`, `len()`, `type()`, `int()`, `input()`, `sum()`, `sorted()`, dll.

Menyederhanakan tugas umum dan selalu tersedia tanpa perlu impor.

**C – Comprehensions (Ekspresi Ringkas)**

Sintaks ringkas untuk membuat sekuens:

- List: `[x*x for x in range(5)]`

- Set: `{x*x for x in range(5)}`

- Dict: `{x: x*x for x in range(5)}`

Cara efisien dan *Pythonic* untuk memproses koleksi.

**D – Dictionaries (Kamus)**

Struktur data pasangan kunci-nilai:

`person = {“nama”: “Alice”, “usia”: 30}`

- Pencarian cepat berdasarkan kunci

- Dapat diubah (*mutable*) dan dinamis

**E – Exceptions (Eksepsi)**

Mekanisme untuk menangani kesalahan:

```python
Try:

1/0

Except ZeroDivisionError:

Print(“Tidak bisa membagi dengan nol!”)

```

Meningkatkan ketangguhan dan kemudahan *debugging*.

**F – Functions (Fungsi)**

Blok kode yang dapat digunakan kembali dengan `def`:

```python

Def sapa(nama):

Return f”Halo, {nama}”

```

Mengenkapsulasi logika, mendukung prinsip DRY (*Don’t Repeat


Yourself*).

**G – Generators (Generator)**

Fungsi khusus yang menggunakan `yield` untuk mengembalikan nilai satu


per satu:

```python

Def hitung_mundur(n):

While n > 0:

Yield n

N -= 1

```

Efisien memori untuk sekuens besar.

**H – Higher-Order Functions (Fungsi Orde Tinggi)**

Fungsi yang menerima atau mengembalikan fungsi lain:

`map()`, `filter()`, `reduce()`


Fungsi kustom sebagai argumen.

**I – Iterators (Iterator)**

Objek yang dapat diiterasi:

Harus memiliki `__iter__()` dan `__next__()`

Digunakan dalam perulangan `for`, *comprehensions*, dll.

**J – Join Method (Metode Join)**

Menggabungkan elemen list menjadi string:

```python

“, “.join([“apel”, “pisang”, “ceri”])

# Output: “apel, pisang, ceri”

```

**K – Keyword Arguments (Argumen Berkeyword)**

Argumen yang diberikan sebagai pasangan `key=value`:

```python

Def sapa(nama=”Tamu”):

Print(f”Halo, {nama}”)

Sapa(nama=”Alice”)

```

Meningkatkan kejelasan dan fleksibilitas.

**L – Lambda Functions (Fungsi Lambda)**

Fungsi anonim:

`kuadrat = lambda x: x * x`

Digunakan untuk operasi jangka pendek seperti pengurutan atau


penyaringan.
**M – Modules (Modul)**

File yang berisi kode Python:

```python

Import math

Print(math.sqrt(16)) # 4.0

```

Mendorong penggunaan ulang dan pengorganisasian.

**N – NoneType**

Mewakili “tidak ada nilai”:

```python

Hasil = None

If hasil is None:

Print(“Belum ada hasil”)

```

**O – Object-Oriented Programming (Pemrograman Berorientasi


Objek/OOP)**

Paradigma pemrograman dengan kelas dan objek:

```python

Class Anjing:

Def gonggong(self):

Print(“Guk!”)

```

Mendukung pewarisan, enkapsulasi, polimorfisme.

**P – PEP8 (Python Enhancement Proposal 8)**

Panduan gaya resmi Python:


- Konvensi penamaan

- Indentasi (4 spasi)

- Panjang baris (≤ 79 karakter)

Mempromosikan kode yang bersih dan mudah dibaca.

**Q – Queue (Antrian)**

Struktur FIFO (*First In First Out*) untuk tugas:

```python

From collections import deque

Q = deque()

q.append(“tugas1”)

q.popleft()

```

**R – Range Function (Fungsi Range)**

Digunakan untuk membuat urutan angka:

`range(0, 5) # 0, 1, 2, 3, 4`

Sering digunakan dalam perulangan.

**S – Sets (Himpunan)**

Koleksi elemen unik yang tidak terurut:

```python

S = {1, 2, 3}

s.add(4)

```

Pengujian keanggotaan cepat dan operasi seperti gabungan, irisan.

**T – Tuples (Tupel)**

Koleksi terurut yang tidak dapat diubah (*immutable*):


`koordinat = (10, 20)`

Digunakan saat data tidak boleh berubah.

**U – Unpacking (Pembongkaran)**

Membagi koleksi menjadi variabel:

`a, b = [1, 2]`

Juga digunakan dalam pengembalian fungsi dan perulangan.

**V – Variables (Variabel)**

Referensi bernama untuk data:

```python

X = 10

Nama = “Alice”

```

Tidak perlu deklarasi tipe secara eksplisit.

**W – While Loop (Perulangan While)**

Perulangan yang berjalan berdasarkan kondisi:

```python

While hitung < 5:

Hitung += 1

```

Berguna untuk iterasi yang tidak pasti.

**X – XOR Operation (Operasi XOR)**

OR eksklusif logis, digunakan dalam operasi bitwise:

```python

A=5^3 #6

```
Mengembalikan benar jika input berbeda.

**Y – Yield Keyword (Kata Kunci Yield)**

Digunakan dalam generator untuk mengembalikan data secara *lazy*:

```python

Def angka():

Yield 1

Yield 2

```

Melanjutkan dari titik terakhir berhenti.

**Z – Zip Function (Fungsi Zip)**

Menggabungkan elemen dari beberapa *iterable*:

```python

Nama = [“A”, “B”]

Nilai = [90, 80]

Print(list(zip(nama, nilai)))

# [(‘A’, 90), (‘B’, 80)]

```

**Jika ini membantu, beri reaksi ❤️dan saya akan segera posting
*cheatsheet* cepat untuk Pemrograman Python!**

---

### Tips:

- *Pythonic* = Mengikuti gaya dan filosofi Python

- *DRY Principle* = Prinsip “Jangan Ulangi Diri Sendiri” (*Don’t Repeat


Yourself*)

- *Lazy Evaluation* = Evaluasi malas (hitung saat dibutuhkan)


_______________________________________129

**Cheatsheet Python** 🐍

Cheatsheet ini mencakup konsep inti Python yang wajib diketahui semua
orang.

### *1. Dasar-Dasar*

- `print()` – Menampilkan teks ke layar.

- **Komentar** – Gunakan `#` untuk satu baris dan tanda kutip tiga `”””`
untuk komentar multi-baris.

```python

Print(“Halo”) # Ini akan mencetak Halo

```

### *2. Variabel & Tipe Data*

Variabel menyimpan nilai dengan tipe berbeda seperti angka, teks,


boolean, list, dll.

```python

X = 10 # Integer (bilangan bulat)

Nama = “Alice” # String (teks)

Flag = True # Boolean (True/False)

```

### *3. Pengondisian*

Digunakan untuk pengambilan keputusan dengan `if`, `elif`, dan `else`.

```python

If x > 0:

Print(“Positif”)

Else:

Print(“Tidak positif”)
```

### *4. Perulangan*

- **For loop**: Iterasi melalui suatu urutan.

- **While loop**: Berulang selama kondisi benar.

```python

For i in range(3):

Print(i) # Output: 0, 1, 2

```

### *5. Fungsi*

Blok kode yang dapat digunakan kembali (didefinisikan dengan `def`).

```python

Def sapa(nama):

Return “Halo “ + nama

```

### *6. List & List Comprehension*

- **List**: Menyimpan banyak item dalam satu variabel.

- **List comprehension**: Cara ringkas membuat list.

```python

Angka = [1, 2, 3]

Kuadrat = [x**2 for x in angka] # [1, 4, 9]

```

### *7. Dictionary*

Pasangan *key-value* (seperti database mini).

```python

Pengguna = {“nama”: “Bob”, “usia”: 25}


Print(pengguna[“nama”]) # “Bob”

```

### *8. Metode String*

Teks dapat dimanipulasi dengan metode bawaan.

```python

S = “hello”

Print(s.upper()) # “HELLO”

Print(s.replace(“e”, “a”)) # “hallo”

```

### *9. Penanganan File*

Baca/tulis file dengan `open()`.

```python

With open(“file.txt”, “w”) as f:

f.write(“Hai!”)

```

### *10. Penanganan Error*

Cegah program berhenti mendadak dengan `try`, `except`, dan `finally`.

```python

Try:

X = 10 / 0

Except:

Print(“Terjadi error”)

```

### *11. Kelas & Objek*

Digunakan dalam Pemrograman Berorientasi Objek (OOP).


```python

Class Anjing:

Def __init__(self, nama):

Self.nama = nama

```

### *12. Fungsi Bawaan Berguna*

Alat praktis yang tersedia di Python.

```python

Len(), type(), sum(), min(), max(), sorted()

```

**Beri reaksi ❤️untuk penjelasan detail setiap konsep Python!**

### Contoh Implementasi:

```python

# Hitung rata-rata menggunakan fungsi bawaan

Nilai = [85, 90, 78, 92]

Rata_rata = sum(nilai) / len(nilai) # 86.25

```

_______________________________________130

**Pengumuman Besar, Teman-teman!**

*Kami resmi mencapai **2 JUTA pengikut** — saatnya bawa perjalanan


Python kita ke level berikutnya!*
Saya sangat bersemangat meluncurkan **30-Hari Tantangan Coding
Python** — cocok untuk:

- Pemula mutlak

- Persiapan wawancara

- Siapa pun yang ingin membangun proyek nyata dari nol!

Tantangan ini adalah **asupan Python harian** Anda: pelajaran singkat


dengan proyek praktis sehingga Anda benar-benar ngoding tiap hari dan
cepat meningkat!

### **Yang akan dipelajari dalam 30 hari ke depan:**

**Minggu 1: Dasar-Dasar Python**

- Variabel & Tipe Data (*Buat script biodata/profil sendiri*)

- Operator (*Kalkulator mini untuk asah skill matematika*)

- String & Metode String (*Penghitung kata & pemeriksa palindrome*)

- List & Tuple (*Kelola daftar belanja ala profesional*)

- Dictionary & Set (*Buat buku kontak pribadi*)

- Pengondisian (*Game tebak-angka*)

- Perulangan (*Tabel perkalian & mencetak pola*)

**Minggu 2: Fungsi & Logika — Jadikan Kode Lebih Cerdas**

- Fungsi (*Pemeriksa bilangan prima*)

- Argumen Fungsi (*Kalkulator tip dengan persenan kustom*)

- Dasar Rekursi (*Faktorial & deret Fibonacci*)

- Lambda, map & filter (*Proses list secara efisien*)

- List Comprehension (*Saring angka ganjil/genap dengan mudah*)

- Penanganan Error (*Pembaca input aman*)

- Review + Proyek Mini (*To-do list command-line*)


**Minggu 3: File, Modul & OOP**

- Baca/Tulis File (*Simpan dan muat catatan*)

- Modul Kustom (*Buat modul utilitas matematika sendiri*)

- Kelas & Objek (*Pelacak nilai mahasiswa*)

- Pewarisan & OOP (*Sistem karakter RPG*)

- Metode Dunder (*Buat kelas string kustom*)

- Proyek Mini OOP (*Sistem akun bank sederhana*)

- Review & Praktik (*Aplikasi kuis menggunakan konsep OOP*)

**Minggu 4: Python Dunia Nyata & API — Bangun Aplikasi Keren!**

- JSON & API (*Ambil data cuaca*)

- Web Scraping (*Ekstrak judul dari HTML*)

- Ekspresi Reguler (*Temukan email & nomor telepon*)

- GUI Tkinter (*Buat aplikasi penghitung sederhana*)

- Alat CLI (*Kalkulator command-line dengan argparse*)

- Otomasi (*Skrip pengatur file*)

- **Proyek Final**: Pilih, bangun, dan sempurnakan aplikasi Anda!

**Beri reaksi ❤️jika siap memulai perjalanan baru ini!**

🔗 *Python Learning Series*:


https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1527

### Mengapa Ikut Tantangan Ini?

1. **Dari Nol ke Mahir**: Materi disusun bertahap untuk semua level

2. **Proyek Nyata**: Langsung praktik dengan ide aplikasi kehidupan


nyata

3. **Komunitas 2 Juta Orang**: Belajar bersama jutaan programmer


Python lainnya!
 🚀 *”Komitmen 30 hari ini bisa mengubah karir coding Anda
selamanya!”*

_______________________________________131

### **Hari 1: Tantangan Coding Python**

**Topik: Variabel & Tipe Data**

**Apa itu variabel?**

Bayangkan variabel seperti label pada wadah yang menyimpan data.


Anda membuatnya dengan memberi nama dan memasukkan nilai.

Contoh di Python:

```python

Nama = “Alex”

Umur = 25

Tinggi = 5.9

Is_mahasiswa = True

```

- `nama` menyimpan teks (*string*) — gunakan tanda kutip!

- `umur` menyimpan bilangan bulat (*integer*)

- `tinggi` menyimpan bilangan desimal (*float*)

- `is_mahasiswa` menyimpan nilai True/False (*boolean*)

Cek tipe variabel dengan `type()`:

```python

Print(type(nama)) # <class ‘str’>

Print(type(umur)) # <class ‘int’>

```

**Mengapa menggunakan variabel?**


Untuk menyimpan informasi agar program dapat menggunakannya nanti,
seperti skor pemain atau nama pengguna.

**Aturan Penamaan Variabel**

✅ Harus dimulai huruf/underscore (`_`)

✅ Boleh berisi huruf, angka, underscore

❌ Tidak boleh mulai dengan angka

❌ Tidak boleh gunakan *keyword* Python (seperti `if`, `while`)

*Contoh:*

```python

Nama_pengguna = “Amit” # ✅ Valid

_user2 = “Riya” # ✅ Valid

2nd_user = “Error!” # ❌ Tidak valid (awalan angka)

```

### **Mari Bangun Proyek Kecil!**

Program yang meminta nama, umur, dan hobi favorit, lalu menampilkan
pesan personalisasi.

**Kode Lengkap:**

```python

# Minta nama user dan simpan di variabel

Nama = input(“Siapa namamu? “)

# Minta umur dan simpan

Umur = input(“Berapa umurmu? “)


# Minta hobi favorit dan simpan

Hobi = input(“Apa hobimu? “)

# Tampilkan pesan personalisasi

Print(f”Hai {nama}! Umurmu {umur} tahun dan suka {hobi}. Keren


banget!”)

```

**Cara Kerja:**

1. `input()`: Menunggu Anda mengetik lalu menyimpannya di variabel

2. `print()`: Menampilkan pesan di layar

3. `f”...”`: Memungkinkan sisipkan variabel langsung dalam teks (*f-


string*)

**Contoh Output:**

```

Siapa namamu? Budi

Berapa umurmu? 22

Apa hobimu? Main game

Hai Budi! Umurmu 22 tahun dan suka main game. Keren banget!

```

**Beri reaksi ❤️jika siap untuk kuis berikutnya!**

🔗 *Tantangan Coding Python*:


https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1661

### **Tips Penting:**

1. **Case Sensitivity**: `Nama` dan `nama` dianggap berbeda!


2. **Konversi Tipe**: Input selalu berupa *string*. Untuk angka, gunakan
`int(umur)` atau `float(tinggi)`.

3. **Praktik Langsung**: Ubah kode di atas untuk menambahkan


pertanyaan baru (misal: warna favorit)!

_______________________________________132

Berikut terjemahan pertanyaan dan pilihan jawabannya dalam Bahasa


Indonesia:

**Pemrograman Python**

Manakah yang merupakan **nama variabel valid** dalam Python?

A. `2user`

B. `user-name`

C. `user_2`

### Jawaban Benar: **C. `user_2`** ✅

**Penjelasan:**

- **A. `2user`** : ❌ Tidak valid (tidak boleh diawali angka)

- **B. `user-name`** : ❌ Tidak valid (tidak boleh mengandung tanda


hubung `-`)

- **C. `user_2`** : ✅ Valid (menggunakan huruf, angka, underscore)

### Aturan Penamaan Variabel Python:

1. ✅ Boleh dimulai huruf atau underscore (`_`)

Contoh: `nama`, `_alamat`

2. ✅ Boleh mengandung huruf, angka, underscore


Contoh: `user2`, `nilai_akhir`

3. ❌ **Tidak boleh** diawali angka

Contoh salah: `123abc`

4. ❌ **Tidak boleh** mengandung spasi/simbol (`-`, `@`, dll)

Contoh salah: `user-name`, `email@`

 💡 **Tip**: Gunakan `snake_case` seperti `nama_lengkap` untuk


penamaan multi-kata.

_______________________________________133

**Pemrograman Python**

Apa yang akan menjadi Output dari kode berikut?

```python

X = “10”

X=5

Print(x * y)

```

A. `50`

B. `1010101010`

C. `Error`

### Jawaban Benar: **C. Error**

**Penjelasan:**

1. `x = “10”` → Variabel `x` bertipe *string*

2. `x = 5` → Nilai `x` diubah menjadi *integer*

3. `print(x * y)` → **Error karena `y` tidak didefinisikan**


### Alasan Detil:

- **`y` tidak pernah diberi nilai** sebelumnya dalam kode.

- Python akan menampilkan **`NameError: name ‘y’ is not defined`**


karena variabel `y` tidak dikenal.

### Contoh Perbaikan:

```python

X=5

Y = 10 # Definisikan y terlebih dahulu

Print(x * y) # Output: 50

```

> 💡 **Catatan**:

> - Python bersifat *case-sensitive* (`y` dan `Y` berbeda).

> - Variabel harus didefinisikan sebelum digunakan.

_______________________________________134

**Pemrograman Python**

Apa tipe dari variabel berikut?

```python

Flag = True

```

A. `str` (string)

B. `int` (integer)

C. `bool` (boolean)
D. `float` (float)

### Jawaban Benar: **C. `bool`** ✅

**Penjelasan:**

- `True` adalah nilai **boolean** (tipe data logika yang hanya memiliki
dua nilai: `True` atau `False`).

- Konfirmasi dengan kode:

```python

Print(type(flag)) # Output: <class ‘bool’>

```

### Perbandingan Tipe Data:

| Nilai | Tipe Data | Contoh Penggunaan |

|---------------|------------|----------------------------|

| `”True”` | `str` | Teks dengan tanda kutip |

| `5` | `int` | Bilangan bulat |

| `5.0` | `float` | Bilangan desimal |

| **`True`** | **`bool`** | Logika benar/salah |

 💡 **Fakta**: Boolean dinamai dari matematikawan George Boole dan


sering digunakan dalam pengondisian (`if flag:`).

_______________________________________135

**Pemrograman Python**

Tipe data apa yang digunakan untuk menyimpan **bilangan desimal** di


Python?

A. `int`
B. `float`

C. `str`

D. `bool`

### Jawaban Benar: **B. `float`** ✅

**Penjelasan:**

- **`float`** (*floating-point*) digunakan untuk menyimpan bilangan


desimal.

Contoh:

```python

Harga = 12.99 # tipe float

Pi = 3.14 # tipe float

Suhu = -5.7 # tipe float

```

### Perbandingan Tipe Data Lain:

| Tipe Data | Keterangan | Contoh |

|-----------|-------------------------------------|------------------|

| `int` | Bilangan bulat | `10`, `-5` |

| **`float`** | **Bilangan desimal** | `2.5`, `-0.3` |

| `str` | Teks | `”Hello”` |

| `bool` | Logika (`True`/`False`) | `True` |

> 💡 **Fakta**:

> - Angka seperti `5.0` atau `3e-2` (0.03) juga termasuk `float`.

> - Konfirmasi tipe data:

> ```python

> print(type(3.14)) # Output: <class ‘float’>


> ```

_______________________________________136

**Pemrograman Python**

Apa yang dicetak oleh kode berikut?

```python

Name = “Alice”

Print(type(name))

```

A. `<type: string>`

B. `<class ‘str’>`

C. `”Alice”`

### Jawaban Benar: **B. `<class ‘str’>`** ✅

**Penjelasan:**

1. `name = “Alice”` → Variabel `name` bertipe **string** (teks)

2. `type(name)` → Mengembalikan tipe data variabel

3. Output Python untuk string adalah **`<class ‘str’>`**

**Konfirmasi dengan kode:**

```python

>>> name = “Alice”

>>> print(type(name))

# Output: <class ‘str’>

```
### Perbandingan Output:

| Kode | Output | Keterangan |

|-----------------------|---------------------|--------------------------------|

| `print(type(“Alice”))`| `<class ‘str’>` | Tipe data string |

| `print(“Alice”)` | `Alice` | Nilai variabel (bukan tipe) |

> 💡 **Catatan**:

> - `str` adalah singkatan dari *string* (deretan karakter)

> - Format `<class ‘...’>` adalah cara Python menampilkan tipe data

_______________________________________137

**Kunci Jawaban Kuis Python**

### *Q1. Manakah nama variabel yang valid di Python?*

✅ **Jawaban: c) `user_2`**

- `2user` tidak valid (tidak boleh diawali angka)

- `user-name` tidak valid (tidak boleh pakai tanda hubung)

- `user_2` valid (huruf, angka, underscore diperbolehkan)

### *Q2. Output kode berikut?*

```python

X = “10”

Y=5

Print(x * y)

```

✅ **Jawaban: b) `1010101010`**

Operasi `”10” * 5` mengulang string “10” sebanyak 5 kali.


### *Q3. Tipe variabel `flag = True`?*

✅ **Jawaban: c) `bool`**

`True` adalah nilai boolean (logika benar/salah).

### *Q4. Tipe data untuk menyimpan bilangan desimal?*

✅ **Jawaban: b) `float`**

Contoh: `3.14`, `-0.5`, `2.0`.

### *Q5. Output kode berikut?*

```python

Name = “Alice”

Print(type(name))

```

✅ **Jawaban: b) `<class ‘str’>`**

Fungsi `type()` mengembalikan tipe data variabel, dan untuk teks bertipe
`str` (*string*).

**Beri reaksi ❤️jika siap untuk topik selanjutnya!**

🔗 *Tantangan Coding Python*:


https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1661

### 📌 **Rangkuman Pembelajaran:**

1. **Penamaan Variabel**: Gunakan huruf/underscore di awal


(`nama_user` ✅)

2. **Operasi String**: `”teks” * angka` → replikasi teks


3. **Tipe Data Dasar**:

- `bool`: `True`/`False`

- `float`: bilangan desimal

- `str`: teks (ditampilkan sebagai `<class ‘str’>`)

 💡 *Tips*: Selalu uji kode langsung di interpreter Python untuk


memverifikasi perilakunya!

_______________________________________138

### **Topik Berikutnya: Tantangan Coding Python**

**Operator di Python**

Operator adalah simbol atau kata kunci khusus yang melakukan operasi
pada variabel dan nilai.

### **Jenis Operator di Python:**

#### *1. Operator Aritmatika*

Digunakan untuk matematika dasar:

- `+` (tambah), `-` (kurang), `*` (kali), `/` (bagi)

- `//` (pembagian bulat), `%` (modulus/sisa bagi), `**` (pangkat)

**Contoh:**

```python

A = 10

B=3

Print(a + b) # 13

Print(a ** b) # 1000
```

#### *2. Operator Perbandingan*

Membandingkan dua nilai:

`==` (sama dengan), `!=` (tidak sama), `>` (lebih besar), `<` (lebih
kecil), `>=` (lebih besar/sama), `<=` (lebih kecil/sama)

**Contoh:**

```python

X=5

Print(x == 5) # True

Print(x != 3) # True

```

#### *3. Operator Logika*

Menggabungkan pernyataan kondisional:

`and`, `or`, `not`

**Contoh:**

```python

Umur = 20

Print(umur > 18 and umur < 25) # True

```

#### *4. Operator Penugasan*

Memberikan nilai ke variabel:


`=`, `+=`, `-=`, `*=`, `/=`, dll.

**Contoh:**

```python

Skor = 10

Skor += 5 # skor sekarang 15

```

### **Proyek Mini: Kalkulator Sederhana**

Aplikasikan yang telah dipelajari!

**Tugas:**

Buat kalkulator yang meminta dua angka dan operator dari user, lalu
tampilkan hasilnya.

**Langkah Solusi:**

1. Minta input dua angka dari user.

2. Minta operator (`+`, `-`, `*`, `/`).

3. Lakukan operasi sesuai input.

4. Tampilkan hasil atau “Operator tidak valid!” jika salah.

**Kode Python:**

```python

Angka1 = float(input(“Masukkan angka pertama: “))

Operator = input(“Masukkan operator (+, -, *, /): “)

Angka2 = float(input(“Masukkan angka kedua: “))

If operator == “+”:
Print(angka1 + angka2)

Elif operator == “-“:

Print(angka1 – angka2)

Elif operator == “*”:

Print(angka1 * angka2)

Elif operator == “/”:

Print(angka1 / angka2)

Else:

Print(“Operator tidak valid!”)

```

**Contoh Output:**

```

Masukkan angka pertama: 8

Masukkan operator (+, -, *, /): *

Masukkan angka kedua: 3

24.0

```

**Beri reaksi ❤️jika siap untuk kuis berikutnya!**

🔗 *Tantangan Coding Python*:


https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1661

### 💡 **Tips Penting:**

- Gunakan `float()` untuk menerima input desimal (misal: `7.5`).

- Tambahkan penanganan error (misal: pembagian dengan nol) untuk


versi lebih baik!

_______________________________________139
**Pemrograman Python**

Apa output dari kode berikut?

```python

X = 10

Y=4

Print(x % y)

```

A. `2`

B. `2.5`

C. `0`

D. `6`

### Jawaban Benar: **A. `2`** ✅

**Penjelasan:**

Operator `%` (modulus) menghitung **sisa hasil pembagian**.

```python

10 ÷ 4 = 2 (sisa 2)

```

**Contoh lain:**

- `7 % 3` → 1 (karena 7 ÷ 3 = 2 sisa 1)

- `15 % 4` → 3 (karena 15 ÷ 4 = 3 sisa 3)

> 💡 **Catatan**:

> - Operator modulus sering digunakan untuk:

> - Mengecek bilangan genap/ganjil (`x % 2 == 0`)


> - Pemrosesan siklik (misal: rotasi array)

> - Output selalu bilangan bulat (`int`) jika kedua operand adalah integer.

_______________________________________140

**Pemrograman Python**

Manakah yang merupakan **operator logika** di Python?

A. `++`

B. `or`

C. `not=`

D. `&`

### Jawaban Benar: **B. `or`** ✅

**Penjelasan:**

Operator logika digunakan untuk menggabungkan pernyataan


kondisional:

1. **`and`** → Kedua kondisi harus benar

2. **`or`** → Salah satu kondisi benar

3. **`not`** → Membalikkan nilai boolean

**Contoh:**

```python

Print(True or False) # Output: True

Print(5 > 3 or 2 < 1) # Output: True (karena 5>3 benar)

```

### Penjelasan Opsi Lain:


- **A. `++`** : ❌ Bukan operator Python (digunakan di bahasa lain untuk
*increment*)

- **C. `not=`** : ❌ Tidak valid (operator “tidak sama” adalah `!=`)

- **D. `&`** : ❌ Operator *bitwise* (bukan logika)

> 💡 **Fakta**:

> Operator logika sering digunakan dalam pengondisian:

> ```python

> if umur >= 18 or disertai_ortu:

> print(“Boleh masuk”)

> ```

_______________________________________141

**Pemrograman Python**

Apa fungsi operator `//` di Python?

A. Pembagian dengan sisa

B. Pembagian biasa

C. **Pembagian bulat ke bawah** (tanpa bagian desimal)

D. Menimbulkan error

### Jawaban Benar: **C. Pembagian bulat ke bawah** ✅

**Penjelasan:**

Operator `//` disebut **floor division** atau **integer division**.

- Membagi dua bilangan dan **membulatkan hasil ke bawah** ke bilangan


bulat terdekat

- **Menghilangkan bagian desimal**


**Contoh:**

```python

Print(10 // 3) # 3 (bukan 3.333...)

Print(7.5 // 2) # 3.0 (hasil float tapi tanpa desimal)

Print(-10 // 3) # -4 (pembulatan ke bawah untuk bilangan negatif)

```

### Perbandingan Operator Pembagian:

| Operator | Contoh | Hasil | Keterangan |

|----------|-------------|--------|--------------------------------|

| `/` | `10 / 3` | `3.333...` | Pembagian biasa (hasil float) |

| `//` | `10 // 3` | `3` | **Pembagian bulat** (hilang desimal) |

| `%` | `10 % 3` | `1` | Modulus (sisa pembagian) |

> 💡 **Fakta**:

> Floor division sering digunakan untuk:

> - Pembagian bilangan bulat

> - Menghitung halaman (misal: `total_item // item_per_halaman`)

______________________________________142

**Pemrograman Python**

Apa hasil dari kode berikut?

```python

A=5

A += 3

Print(a)

```
A. `8`

B. `53`

C. `5`

D. `3`

### Jawaban Benar: **A. `8`** ✅

**Penjelasan:**

Operator `+=` adalah **penugasan penambahan**:

1. `a = 5` → Nilai awal

2. `a += 3` → Setara dengan `a = a + 3`

- `5 + 3 = 8`

3. `print(a)` → Mencetak `8`

**Contoh analogi:**

```python

Skor = 10

Skor += 5 # skor menjadi 15

```

> 💡 **Fakta**:

> Operator penugasan gabungan (`+=`, `-=`, `*=`, dll.) menghemat


penulisan kode dan sering digunakan dalam perulangan:

> ```python

> total = 0

> for i in range(1, 6):

> total += i # total = 1+2+3+4+5 = 15

> ```

_______________________________________143
**Pemrograman Python**

Apa yang akan dikembalikan oleh kode ini?

```python

Print(3 > 2 and 2 > 5)

```

A. `True`

B. `False`

### Jawaban Benar: **B. `False`** ✅

**Penjelasan:**

Operator `and` memerlukan **kedua kondisi benar** untuk menghasilkan


`True`.

1. `3 > 2` → **`True`** (benar, karena 3 lebih besar dari 2)

2. `2 > 5` → **`False`** (salah, karena 2 tidak lebih besar dari 5)

3. `True and False` → **`False`**

**Ilustrasi Logika:**

```python

Kondisi 1 Kondisi 2 Hasil

True True True

True False False ← Kasus ini

False True False

False False False

```
> 💡 **Fakta**:

> Operator `and` sering digunakan untuk validasi multi-kondisi:

> ```python

> if usia >= 17 and punya_sim:

> print(“Boleh menyetir”)

> ```

_______________________________________144

**Kunci Jawaban Kuis Python**

### *1. Output kode berikut?*

```python

X = 10

Y=4

Print(x % y)

```

✅ **Jawaban: a) `2`**

Operator `%` menghitung **sisa hasil bagi** → 10 dibagi 4 menyisakan 2.

### *2. Manakah operator logika di Python?*

✅ **Jawaban: b) `or`**

Operator logika di Python adalah `and`, `or`, dan `not`.

### *3. Fungsi operator `//`?*

✅ **Jawaban: c) Floor division (tanpa bagian desimal)**

`//` membagi dan **membulatkan ke bawah** ke bilangan bulat terdekat.


### *4. Hasil kode berikut?*

```python

A=5

A += 3

Print(a)

```

✅ **Jawaban: a) `8`**

`a += 3` adalah bentuk singkat dari `a = a + 3`.

### *5. Output kode berikut?*

```python

Print(3 > 2 and 2 > 5)

```

✅ **Jawaban: b) `False`**

- `3 > 2` bernilai `True`

- `2 > 5` bernilai `False`

- `True and False` menghasilkan `False`

**Beri reaksi ❤️jika siap untuk topik selanjutnya!**

🔗 *Tantangan Coding Python*:


https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1661

### 💡 **Rangkuman Operator Penting:**

| Operator | Contoh | Hasil | Keterangan |

|----------|-------------|--------|--------------------------------|

| `%` | `10 % 4` | `2` | Sisa pembagian |


| `//` | `10 // 3` | `3` | Pembagian bulat ke bawah |

| `+=` | `a = 5; a += 3` | `8` | Penugasan penambahan |

| `and` | `True and False` | `False` | Operator logika (kedua kondisi harus
benar) |

 “Pemahaman kuat tentang operator adalah dasar untuk logika


pemrograman yang efektif!”

_______________________________________145

### **Topik Berikutnya: Tantangan Coding Python**

**String & Metode String**

String adalah urutan karakter di dalam tanda kutip. Anda bisa gunakan:

```python

Nama = “Alice”

Sapaan = ‘Halo!’

Paragraf = “””Ini adalah

String multi-baris.”””

```

👉 String bersifat **immutable** — setelah dibuat, tidak bisa diubah


langsung.

### ✨ **Metode String Umum**

Berikut beberapa metode berguna yang akan sering digunakan:

| Metode | Contoh Penggunaan | Fungsi


|

|------------------------|--------------------------|-----------------------------------------|

| `lower()` | `”ABC”.lower()` | Mengubah seluruh huruf


menjadi kecil |
| `upper()` | `”abc”.upper()` | Mengubah seluruh huruf
menjadi besar |

| `strip()` | `” halo “.strip()` | Menghapus spasi di awal/akhir


|

| `replace(“lama”,”baru”)` | `”halo”.replace(“a”,”o”)` | Mengganti bagian


string |

| `split()` | `”saya suka”.split()` | Memisahkan teks menjadi list


kata |

| `count(“kata”)` | `”saya”.count(“a”)` | Menghitung kemunculan


suatu kata/huruf |

| `find(“kata”)` | `”python”.find(“t”)` | Mencari posisi suatu


kata/huruf |

| `startswith(“Awal”)` | `”Python”.startswith(“Py”)` | Memeriksa awalan


string |

| `endswith(“Akhir”)` | `”world”.endswith(“ld”)` | Memeriksa akhiran


string |

### 🧪 **Contoh**

```python

Pesan = “ Python itu Keren! “

Print(pesan.lower()) # “ python itu keren! “

Print(pesan.strip()) # “Python itu Keren!”

Print(pesan.replace(“Keren”, “Mantap”)) # “Python itu Mantap!”

Print(pesan.split()) # [‘Python’, ‘itu’, ‘Keren!’]

```

### 🛠️**Proyek 1: Penghitung Kata**

```python
Teks = input(“Masukkan kalimat: “)

Kata = teks.split()

Print(“Jumlah kata:”, len(kata))

```

**Coba dengan:**

 Python itu mudah dan powerful

→ Output: `Jumlah kata: 5`

### 🌀 **Proyek 2: Pemeriksa Palindrome**

```python

Teks = input(“Masukkan kata: “)

If teks == teks[::-1]:

Print(“Palindrome!”)

Else:

Print(“Bukan palindrome.”)

```

**Coba:**

- `katak` → Palindrome!

- `racecar` → Palindrome!

- `pohon` → Bukan palindrome.

**Beri reaksi ❤️jika siap untuk kuis berikutnya!**

🔗 *Tantangan Coding Python*:


https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1661

### 💡 **Fakta Penting:**

- `teks[::-1]` membalik string (contoh: `”halo”` → `”olah”`)


- String kosong `””` dianggap palindrome!

- Gunakan `teks.lower().replace(“ “, “”)` untuk abaikan kapitalisasi dan


spasi.

_______________________________________146

**Pemrograman Python**

Apa output dari kode berikut?

```python

Msg = “ Learn Python “

Print(msg.strip())

```

A. `” Learn Python “`

B. `”Learn Python”`

C. `”LearnPython”`

D. `” Learn Python”`

### Jawaban Benar: **B. `”Learn Python”`** ✅

**Penjelasan:**

Metode `.strip()` menghapus **semua spasi di awal dan akhir string**,


tetapi tidak mengubah spasi di tengah teks.

- String asli: `”◂Learn▸Python▸”` (◂ = spasi awal, ▸ = spasi akhir)

- Setelah `strip()`: `”Learn▸Python”` (spasi antara kata tetap ada)

**Ilustrasi:**

```python
Print(len(msg)) # 14 karakter (termasuk 3 spasi)

Print(len(msg.strip())) # 11 karakter (spasi awal & akhir hilang)

```

> 💡 **Catatan**:

> - Gunakan `.replace(“ “, “”)` untuk menghapus **semua spasi**


(termasuk di tengah).

> - Metode terkait:

> - `.lstrip()` → Hapus spasi di awal saja

> - `.rstrip()` → Hapus spasi di akhir saja

_______________________________________147

Berikut terjemahan pertanyaan dan pilihan jawabannya dalam Bahasa


Indonesia:

**Pemrograman Python**

Metode apa yang digunakan untuk mengubah **semua karakter** dalam


string menjadi **huruf besar (uppercase)**?

A. `capital()`

B. `upper()`

C. `toupper()`

D. `uppercase()`

### Jawaban Benar: **B. `upper()`**

Contoh penggunaan:

```python

Teks = “hello world”

Print(teks.upper()) # Output: “HELLO WORLD”


```

### Penjelasan:

- `upper()` adalah metode standar Python untuk mengonversi seluruh


string ke huruf kapital.

- Pilihan lain tidak valid dalam Python:

- `capital()` → tidak ada (mungkin tertukar dengan `capitalize()` yang


hanya mengkapitalkan huruf pertama kata pertama).

- `toupper()` → metode milik bahasa C/C++ (bukan Python).

- `uppercase()` → bukan metode string Python (umumnya berupa


konstanta di modul `string`).

_______________________________________148

**Pemrograman Python**

Apa hasil dari kode berikut?

```python

Text = “Python Programming”

Print(text.split())

```

A. `[‘Python’, ‘Programming’]`

B. `[‘P’, ‘y’, ‘t’, ‘h’, ‘o’, ‘n’]`

C. `[‘PythonProgramming’]`

D. `[‘Python_Programming’]`

### Jawaban Benar: **A. `[‘Python’, ‘Programming’]`**

### Penjelasan:
- Metode `.split()` di Python **memisahkan string menjadi list kata-kata**
berdasarkan spasi secara default.

- String `”Python Programming”` terdiri dari dua kata yang dipisahkan


spasi, sehingga hasilnya adalah list:

`[‘Python’, ‘Programming’]`

```python

# Contoh eksekusi:

Text = “Python Programming”

Print(text.split()) # Output: [‘Python’, ‘Programming’]

```

### Mengapa pilihan lain salah:

- **B**: Hasil pemisahan per karakter (bukan fungsi `.split()`, melainkan


`list(text)`).

- **C**: Tidak memisahkan kata (spasi diabaikan).

- **D**: Menambahkan underscore (tidak terjadi karena string asli tidak


mengandung underscore).

_______________________________________149

**Pemrograman Python**

Manakah dari string berikut yang merupakan **palindrom**?

A. “racecar”

B. “Python”

C. “banana”

D. “hello”

### Jawaban Benar: **A. “racecar”**


### Penjelasan:

**Palindrom** adalah kata, frasa, atau urutan karakter yang **dibaca


sama** baik dari depan maupun belakang.

- **”racecar”** → `racecar` (dibaca maju: r-a-c-e-c-a-r)

Dibaca mundur: **r**-a-c-e-c-a-**r** → tetap `racecar` ✅

- **”Python”** → `Python` (dibaca mundur: `nohtyP`) → tidak sama ❌

- **”banana”** → `banana` (dibaca mundur: `ananab`) → tidak sama ❌

- **”hello”** → `hello` (dibaca mundur: `olleh`) → tidak sama ❌

### Contoh Pengecekan dengan Python:

```python

Def is_palindrome(kata):

Return kata == kata[::-1]

Print(is_palindrome(“racecar”)) # Output: True

Print(is_palindrome(“Python”)) # Output: False

```

_______________________________________150

**Pemrograman Python**

Apa yang dikembalikan oleh kode berikut?

```python

“hello”.replace(“l”, “*”)

```
A. `he*lo`

B. `he**o`

C. `he*o`

D. `h**lo`

### Jawaban Benar: **B. `he**o`**

### Penjelasan:

Metode `.replace()` di Python menggantikan **semua kemunculan**


substring yang ditentukan:

- `”hello”` memiliki **dua karakter `l`**.

- Setiap `l` diganti dengan `*`, sehingga:

`h e l l o` → `h e * * o`

```python

Print(“hello”.replace(“l”, “*”)) # Output: he**o

```

### Mengapa pilihan lain salah:

- **A**: Hanya mengganti satu `l` (bukan semua kemunculan).

- **C**: Hasil penggantian sebagian (tidak sesuai mekanisme `.replace()`).

- **D**: Penggantian karakter yang salah (karakter `e` dan `o` tidak
berubah).

_______________________________________151

**Pemrograman Python**

Sekarang, mari beralih ke topik berikutnya dalam Tantangan Pengkodean


Python:
### *Daftar (List) & Tupel (Tuple)*

🔹 **Apa itu Daftar (List)?**

Daftar adalah kumpulan item yang *mutable* (dapat diubah) dalam


urutan tertentu.

*Sintaks:*

```python

Fruits = [“apel”, “pisang”, “ceri”]

Print(fruits[0]) # Output: apel

Fruits.append(“mangga”)

Print(fruits) # Output: [‘apel’, ‘pisang’, ‘ceri’, ‘mangga’]

```

✅ *Anda bisa menambah, menghapus, atau memperbarui elemen dalam


daftar.*

🔸 **Apa itu Tupel (Tuple)?**

Tupel mirip dengan daftar, tetapi *immutable* (tidak bisa diubah setelah
didefinisikan).

*Sintaks:*

```python

Colors = (“merah”, “hijau”, “biru”)

Print(colors[1]) # Output: hijau

```

🔒 *Anda tidak bisa mengubah, menambah, atau menghapus elemen


setelah pembuatan tupel.*
### ✅ Perbedaan Utama:

*Mutabilitas:*

- **Daftar**: Mutable — elemen bisa diubah/ditambah/dihapus setelah


pembuatan.

- **Tupel**: Immutable — elemen tetap setelah didefinisikan.

*Sintaks:*

- **Daftar**: Gunakan tanda kurung siku `[]`

```python

My_list = [1, 2, 3]

```

- **Tupel**: Gunakan tanda kurung biasa `()`

```python

My_tuple = (1, 2, 3)

```

*Kasus Penggunaan:*

- **Daftar**: Gunakan saat Anda perlu mengubah koleksi nanti.

- **Tupel**: Gunakan saat data harus tetap konstan (misal: koordinat, kode
warna).

*Kinerja:*

Tupel lebih cepat daripada Daftar karena ukurannya tetap (*immutable*).

### 🛠️*Proyek Mini: Manajer Daftar Belanja*

Mari buat aplikasi daftar belanja sederhana yang bisa:


- Menambah item

- Menghapus item

- Menampilkan semua item

*Kode Python:*

```python

Grocery_list = []

While True:

Print(“\nPilihan: add / remove / show / exit”)

Action = input(“Aksi yang ingin dilakukan? “)

If action == “add”:

Item = input(“Masukkan item: “)

Grocery_list.append(item)

Print(f”{item} ditambahkan.”)

Elif action == “remove”:

Item = input(“Masukkan item yang dihapus: “)

If item in grocery_list:

Grocery_list.remove(item)

Print(f”{item} dihapus.”)

Else:

Print(“Item tidak ditemukan.”)

Elif action == “show”:

Print(“Daftar Belanja Anda:”)

For i in grocery_list:

Print(“-“, i)
Elif action == “exit”:

Break

Else:

Print(“Pilihan tidak valid.”)

```

✅ *Coba jalankan kode ini untuk melihat cara kerja daftar secara langsung!
*

**Tantangan Pengkodean Python**:

🔗 [https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1661]
(https://whatsapp.com/channel/0029VaiM08SDuMRaGKd9Wv0L/1661)

*Beri reaksi ❤️jika Anda siap untuk kuis!*

_______________________________________152

Anda mungkin juga menyukai