# Modul 5 - Algoritma Pemrograman
Halo, ini merupakan modul Algoritma PemrogAraman minggu ke-5. Semangat!
## 31 - MAKING DECISIONS
Di paruh pertaama buku ini, Anda kebanyakan hanya mencetak hal-hal yang disebut fungsi, tetapi semuanya pada dasarnya dalam garis lurus. Skrip Anda berjalan mulai dari atas dan menuju ke bawah di mana mereka berakhir. Jika Anda membuat suatu fungsi, Anda dapat menjalankan fungsi itu nanti, tetapi fungsi itu masih belum memiliki jenis percabangan yang Anda perlukan untuk benar-benar membuat keputusan. Sekarang Anda memiliki if, else, dan elif Anda dapat mulai membuat skrip yang memutuskan sesuatu.
Dalam skrip terakhir Anda menulis serangkaian tes sederhana yang menanyakan beberapa pertanyaan. Dalam skrip ini Anda akan mengajukan pertanyaan kepada pengguna dan membuat keputusan berdasarkan jawaban mereka. Tulis skrip ini, lalu mainkan cukup banyak untuk mengetahuinya
### Kode
Ketiklah, dan jalankan kode di bawah. Beri nama file `ex31.py`. Kemudian, perhatikan mekanisme bagaimana program bekerja, dan jawablah **Catatan** di bawah.
```python
print("""You enter a dark room with two doors.
Do you go through door #1 or door #2?""")
door = input("> ")
if door == "1":
print("There's a giant bear here eating a cheese cake. What do you do?")
print("1. Take the cake.")
print("2. Scream at the bear.")
bear = input("> ")
if bear == "1":
print("The bear eats your face off. Good job!")
elif bear == "2":
print("The bear eats your legs off. Good job!")
else:
print(f"Well, doing {bear} is probably better. Bear runs away.")
elif door == "2":
print("You stare into the endless abyss at Cthulhu's retina.")
print("1. Blueberries.")
print("2. Yellow jacket clothespins.")
print("3. Understanding revolvers yelling melodies.")
insanity = input("> ")
if insanity == "1" or insanity == "2":
print("Your body survives powered by a mind of jello. Good job!")
else:
print("The insanity rots your eyes into a pool of muck. Good job!")
else:
print("You stumble around and fall on a knife and die. Good job!")
```
### Catatan
#### Format Penamaan dan Lokasi Menyimpan Berkas
Simpan pada folder **sesuai dengan materi**, seperti pada contoh.
Format penamaan tugas -> {nomor_materi}_{catatan}\_{nama_yang_buat}.md
contoh: 31_catatan.md/py
#### Soal
1. Jelaskan Baris Perbaris Pada kode Diatas, menggunakan feature comment # disetiap barisnya!
### Tugas
#### Format Penamaan dan Lokasi Menyimpan Berkas
Simpan pada folder **sesuai dengan materi**, seperti pada contoh.
Format penamaan tugas -> {nomor_materi}_\{nomor_tugas}\_{nama_yang_buat}.py
contoh: 31_1_dimas.py
#### Soal
1. Perbarui Kode Diatas Dengan menambah keputusan baru, minimal 1 keputusan!
## 32 - Loops and Lists
Anda sekarang harus dapat melakukan beberapa program yang jauh lebih menarik. Jika Anda telah mengikutinya, Anda harus menyadari bahwa sekarang Anda dapat menggabungkan semua hal lain yang telah Anda pelajari dengan pernyataan if dan ekspresi boolean untuk membuat program Anda melakukan hal-hal yang cerdas.
Namun, program juga perlu melakukan hal-hal yang berulang dengan sangat cepat. Kita akan menggunakan for-loop dalam latihan ini untuk membangun dan mencetak berbagai daftar. Ketika Anda melakukan latihan, Anda akan mulai mencari tahu apa itu. Saya tidak akan memberitahu Anda sekarang. Anda harus mencari tahu.
Sebelum Anda dapat menggunakan for-loop, Anda memerlukan cara untuk menyimpan hasil loop di suatu tempat. Cara terbaik untuk melakukannya adalah dengan daftar. Daftar persis seperti yang dikatakan namanya: wadah hal-hal yang diatur dalam urutan dari pertama hingga terakhir. Ini tidak rumit; Anda hanya perlu mempelajari sintaks baru. Pertama, ada bagaimana Anda membuat daftar:
hairs = [ ’ brown ’ , ’ blond ’ , ’ red ’ ]
eyes = [ ’ brown ’ , ’ blue ’ , ’ green ’ ]
weights = [ 1 , 2 , 3 , 4 ]
Anda mulai daftar dengan [ (tanda kurung kiri) yang ”membuka” daftar. Kemudian Anda menempatkan setiap item yang Anda inginkan dalam daftar yang dipisahkan dengan koma, mirip dengan argumen fungsi. Terakhir, akhiri daftar dengan tanda ] (tanda kurung siku) untuk menunjukkan bahwa daftar sudah berakhir. Python kemudian mengambil daftar ini dan semua isinya dan menugaskannya ke variabel.
### Kode
Ketiklah, dan jalankan kode di bawah. Beri nama file `ex31.py`. Kemudian, perhatikan mekanisme bagaimana program bekerja, dan jawablah **Catatan** di bawah.
```python
the_count = [1, 2, 3, 4, 5]
fruits = ['apples', 'oranges', 'pears', 'apricots']
change = [1, 'pennies', 2, 'dimes', 3, 'quarters']
# this first kind of for-loop goes through a list
for number in the_count:
print(f"This is count {number}")
# same as above
for fruit in fruits:
print(f"A fruit of type: {fruit}")
# also we can go through mixed lists too
# notice we have to use {} since we don't know what's in it
for i in change:
print(f"I got {i}")
# we can also build lists, first start with an empty one
elements = []
# then use the range function to do 0 to 5 counts
for i in range(0, 6):
print(f"Adding {i} to the list.")
# append is a function that lists understand
elements.append(i)
# now we can print them out too
for i in elements:
print(f"Element was: {i}")
```
### Catatan
#### Format Penamaan dan Lokasi Menyimpan Berkas
Simpan pada folder **sesuai dengan materi**, seperti pada contoh.
Format penamaan tugas -> {nomor_materi}_{catatan}\_{nama_yang_buat}.md
contoh: 31_catatan.md/py
#### Soal
1. Ubah while-loop ini menjadi fungsi yang dapat Anda panggil, dan ganti 6 dalam pengujian (i < 6) dengan variabel.
2. Gunakan fungsi ini untuk menulis ulang skrip untuk mencoba nomor yang berbeda.
3. Tambahkan variabel lain ke argumen fungsi yang dapat Anda lewati yang memungkinkan Anda mengubah +1 pada baris 8 sehingga Anda dapat mengubah seberapa banyak kenaikannya.
4. Tulis ulang skrip lagi untuk menggunakan fungsi ini untuk melihat efek apa yang terjadi.
### Tugas
#### Format Penamaan dan Lokasi Menyimpan Berkas
Simpan pada folder **sesuai dengan materi**, seperti pada contoh.
Format penamaan tugas -> {nomor_materi}_\{nomor_tugas}\_{nama_yang_buat}.py
contoh: 31_1_dimas.py
#### Soal
1. Perbarui Kode Diatas Dengan menambah operasi More on Lists lainnya yang bisa anda lakukan mengacu pada refensi dibawah ini minimal 2. Contoh count, copy, remove, sort dll
[Referensi](https://docs.python.org/3/tutorial/datastructures.html)
## 33 - While Loops
> While : Untuk mengulang suatu proses yang belum diketahui jumlahnya. Pengecekan kondisi akan dilakukan terlebih dahulu. Jika kondisi masih bernilai true, maka looping akan terus berlanjut. Statement WHILE juga digunakan untuk menyatakan perulangan.
Nanti kita akan memiliki beberapa latihan yang akan melatih otak Anda untuk membaca struktur ini, mirip dengan bagaimana kita membakar ekspresi boolean ke dalam otak Anda.
Kembali ke perulangan while. Apa yang mereka lakukan hanyalah melakukan tes seperti pernyataan if, tetapi alih-alih menjalankan blok kode sekali, mereka melompat kembali ke "atas" di mana while berada, dan ulangi. Perulangan while berjalan hingga ekspresi bernilai False.
Inilah masalah dengan while-loop: Terkadang mereka tidak berhenti. Ini bagus jika niat Anda hanya terus berputar sampai akhir alam semesta. Kalau tidak, Anda hampir selalu ingin loop Anda berakhir pada akhirnya.
Untuk menghindari masalah ini, ada beberapa aturan yang harus diikuti:
1. Pastikan Anda menggunakan while-loop dengan hemat. Biasanya for-loop lebih baik.
2. Tinjau pernyataan while Anda dan pastikan bahwa tes boolean akan menjadi Salah di beberapa titik.
3. Jika ragu, cetak variabel pengujian Anda di bagian atas dan bawah loop sementara untuk melihat apa yang dilakukannya.
Dalam latihan ini, Anda akan mempelajari while-loop saat melakukan tiga pemeriksaan ini:
### Kode
Ketiklah, dan jalankan kode di bawah. Beri nama file `ex33.py`. Kemudian, perhatikan mekanisme bagaimana program bekerja, dan jawablah **Catatan** di bawah.
```python
i = 0
numbers = []
while i < 6:
print(f"At the top i is {i}")
numbers.append(i)
i = i + 1
print("Numbers now: ", numbers)
print(f"At the bottom i is {i}")
print("The numbers: ")
for num in numbers:
print(num)
```
### Catatan
#### Format Penamaan dan Lokasi Menyimpan Berkas
Simpan pada folder **sesuai dengan materi**, seperti pada contoh.
Format penamaan tugas -> {nomor_materi}_{catatan}\_{nama_yang_buat}.md
contoh: 21_catatan.md
#### Soal
1. Ubah while-loop ini menjadi fungsi yang dapat Anda panggil, dan ganti 6 dalam pengujian (i < 6) dengan variabel.
2. Gunakan fungsi ini untuk menulis ulang skrip untuk mencoba nomor yang berbeda.
3. Tambahkan variabel lain ke argumen fungsi yang dapat Anda lewati yang memungkinkan Anda mengubah +1 pada baris 8 sehingga Anda dapat mengubah seberapa banyak kenaikannya.
4. Tulis ulang skrip lagi untuk menggunakan fungsi ini untuk melihat efek apa yang terjadi.
5. Tulis untuk menggunakan for-loop dan range. Apakah Anda membutuhkan incrementor di tengah lagi? Apa yang terjadi jika Anda tidak menyingkirkannya?
### Tugas
#### Format Penamaan dan Lokasi Menyimpan Berkas
Simpan pada folder **sesuai dengan materi**, seperti pada contoh.
Format penamaan tugas -> {nomor_materi}_\{nomor_tugas}\_{nama_yang_buat}.py
contoh: 31_1_dimas.py
#### Soal
1. Jelaskan Baris Perbaris Pada kode Diatas, menggunakan feature comment # disetiap barisnya!
## 34 - Accessing Elements of Lists
List adalah struktur data pada python yang mampu menyimpan lebih dari satu data, seperti array. Dalam bahasa pemrograman Python, struktur data yang paling dasar adalah urutan atau lists. Setiap elemen-elemen berurutan akan diberi nomor posisi atau indeksnya. Indeks pertama dalam list adalah nol, indeks kedua adalah satu dan seterusnya.
### Kode
Ketiklah, dan jalankan kode di bawah. Beri nama file `ex34.py`.
```python=
# Membuat List kosong
warna = []
# Membuat list dengan isi 1 item
hobi = ["membaca"]
# List lebih dari satu
buah = ["jeruk", "apel", "mangga", "duren"]
# Mencampur isinya
laci = ["buku", 21, True, 34.12]
# Mengambil nilai dari list
# Kita punya list nama-nama buah
buah = ["apel", "anggur", "mangga", "jeruk"]
# Misanya kita ingin mengambil mangga
# Maka indeknya adalah 2
print buah[2]
```
```python=
# Menampilkan list
# list kosong
list_kosong = []
# list yang berisi kumpulan string
list_buah = ['Pisang', 'Nanas', 'Melon', 'Durian']
# list yang berisi kumpulan integer
list_nilai = [80, 70, 90, 60]
# list campuran berbagai tipe data
list_jawaban = [150, 33.33, 'Presiden Sukarno', False]
print('list_kosong:', list_kosong)
print('list_buah:', list_buah)
print('list_nilai:', list_nilai)
print('list_jawaban:', list_jawaban)
print(list_buah[0])
print(list_buah[2])
print(list_buah[1])
print(list_buah[3])
# Indeks negatif
print(list_buah[-1])
print(list_buah[-2])
print(list_buah[-3])
print(list_buah[-4])
```
```python=
#Slicing list
list_buah = ['Pisang', 'Nanas', 'Melon', 'Durian']
print(list_buah[0:1])
print(list_buah[0:2])
print(list_buah[1:3])
print(list_buah[0:-1])
print(list_buah[-1:-3])
print(list_buah[-1:3])
print(list_buah[-3:-1])
```
### Catatan
#### Format Penamaan dan Lokasi Menyimpan Berkas
Simpan pada folder **sesuai dengan materi**, seperti pada contoh.
Format penamaan tugas -> {nomor_materi}_{catatan}\_{nama_yang_buat}.md
contoh: 21_catatan.md
#### Soal
1. Tipe data apa saja yang bisa dimasukkan ke dalam list?
2. list_buah[0:-1], apakah maksud potongan kode di samping?
3. Indeks negatif dalam list apakah dimulai dari -1 atau 0?
4. Apakah fungsi list kosong?
5. Tuliskan dan terapkan fungsi-fungsi bawaan dari list!
6. Buatlah contoh list multi dimensi, contohnya: [['Dimas', 'Wahyu', 'Dhoni'], ['Lanang', ' Gokil'], 'Dimas' ]
7. Jelaskan Baris Perbaris Pada kode Diatas, menggunakan feature comment # disetiap barisnya!
## 35 - Branches and Functions
Semangat! Kali ini hanya materi kompilasi dari if-statements, functions, dan list.
### Kode
Ketiklah, dan jalankan kode di bawah. Beri nama file `ex35.py`. Kemudian, perhatikan mekanisme bagaimana program bekerja, dan jawablah **Catatan** di bawah.
```python=
from sys import exit
def gold_room():
print("This room is full of gold. How much do you take?")
choice = input("> ")
if "0" in choice or "1" in choice:
how_much = int(choice)
else:
dead("Man, learn to type a number.")
if how_much < 50:
print("Nice, you're not greedy, you win!")
exit(0)
else:
dead("You greedy bastard!")
def bear_room():
print("There is bear here.")
print("The bear has a bunch of honey.")
print("The fat bear is in front of another door.")
print("How are you going to move the bear?")
bear_moved = False
while True:
choice = input("> ")
if choice == "take honey":
dead("The bear looks at you then slaps your face off.")
elif choice == "taunt bear" and not bear_moved:
print("The bear has moved from the door.")
print("You can go through it now.")
bear_moved = True
elif choice == "taunt bear" and bear_moved:
dead("The bear gets pissed off and chews your leg off.")
elif choice == "open door" and bear_moved:
gold_room()
else:
print("I got no idea what that means.")
def cthulhu_room():
print("Here you see the great evil Cthulhu.")
print("He, it, whatever stares at you and you go insane.")
print("Do you flee for your life or eat your head?")
choice = input("> ")
if "flee" in choice:
start()
elif "head" in choice:
dead("Well that was tasty!")
else:
cthulhu_room()
def dead(why):
print(why, "Good job!")
exit(0)
def start():
print("You are in a dark room.")
print("There is a door to your right and left.")
print("Which one do you take?")
choice = input("> ")
if choice == "left":
bear_room()
elif choice == "right":
cthulhu_room()
else:
dead("You stumble around the room until you starve.")
start()
```
### Catatan
#### Format Penamaan dan Lokasi Menyimpan Berkas
Simpan pada folder **sesuai dengan materi**, seperti pada contoh.
Format penamaan tugas -> {nomor_materi}_{catatan}\_{nama_yang_buat}.md
contoh: 21_catatan.md
#### Soal
1. Catatlah hal-hal penting yang didapat!
2. Apakah maksud dari exit(0)?
## 36 - Designing and Debugging
Setelah kalian mempelajari dasar-dasar Python, terdapat suatu istilah yang dinamakan best practice. Best practice secara arti kata adalah praktik terbaik. Jadi dapat diartikan sebagai praktik terbaik untuk merancang program komputer.
Lalu, kenapa harus ada best practice?
Misalkan kita memasak. Best practice dari memasak itu antara lain:
1. Tidak hangus
2. Rasanya enak (tidak hambar)
3. Aromanya menggugah selera
4. Penampilannya menarik mata
5. Dan masih banyak lagi.
Begitu pula dengan pemrograman, program yang baik itu antara lain:
1. Mudah dipelajari pengguna lain
2. Efisien dalam penggunaan memori
3. Expandable
4. Penulisan baris kode yang mangkus
5. Mengikuti kaidah pemrograman seperti DRY (Don't Repeat Yourself), Single Source of Truth dan banyak lagi
6. Semua itu dilakukan untuk menghasilkan program yang terbaik, berkualitas, dan mudah untuk dikembangkan.
### Tugas
#### Format Penamaan dan Lokasi Menyimpan Berkas
Simpan pada folder **sesuai dengan materi**, seperti pada contoh.
Format penamaan tugas -> {nomor_materi}_\{nomor_tugas}\_{nama_yang_buat}.py
contoh: 21_1_dimas.py
#### Soal
1. Carilah contoh best practice dalam hal if-statements dan loops!
2. Pasti teman-teman sudah mengetahui tentang debugging. Apakah debugging itu? Apakah ada tips dalam melakukan debugging?