Ketika melakukan operasi matematika, kita sering setelah dilakukan operasi hasil tersebut kita simpan dalam variabel. Di python ada jalan pintas untuk melakukan operasi dan melakukan assignment. Show
Program akan menjadi sangat menarik ketika kita bisa menguji kondisi dan merubah prilaku program berdasarkan hasil test dari kondisi tersebut. Inilah yang akan kita bahas pada bab ini. 5.1. Nilai dan Ekspresi dari BooleanNilai dari Boolean jika bukan true ya false, hanya dua itu, antara iya dan tidak, benar dan salah. Namanya diambil dari ahli matematika Inggris, George Boole, yang pertama kali merumuskan aljabar Boolean - yaitu beberapa aturan mengenai penalaran dan kombinasi dari dua nilai tersebut. Inilah asal muasal dan dasar dari semua logika komputer moderen yang kita kenal dan pakai saat ini. Di Python, dua nilai Boolean itu dimanakan dengan x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y9 dan >>> umur = 18 >>> cukup_umur_untuk_buat_sim = umur >= 17 >>> print(cukup_umur_untuk_buat_sim) True >>> type(cukup_umur_untuk_buat_sim) <class 'bool'>0 (huruf besarnya wajib seperti yang terlihat), dan nama tipenya adalah bool. >>> type(True) <class 'bool'> >>> type(true) Traceback (most recent call last): File "<interactive input>", line 1, in <module> NameError: name 'true' is not defined Ekspresi Boolean merupakan ekspresi yang menilai dan menghasilkan hasil dalam bentuk nilai Boolean. Contohnya, operator >>> umur = 18 >>> cukup_umur_untuk_buat_sim = umur >= 17 >>> print(cukup_umur_untuk_buat_sim) True >>> type(cukup_umur_untuk_buat_sim) <class 'bool'>1 akan menguji apakah dua nilai tersebut sama. Ia akan menghasilkan (atau memberikan - yield) sebuah nilai Boolean: >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True Pada pernyataan pertama, dua operand yang dinilai nilainya adalah sama, jadi ekspresi memberikan nilai x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y9; namun pada pernyataan kedua, 5 tidak sama dengan 6, jadi kita dapat >>> umur = 18 >>> cukup_umur_untuk_buat_sim = umur >= 17 >>> print(cukup_umur_untuk_buat_sim) True >>> type(cukup_umur_untuk_buat_sim) <class 'bool'>0. Operator >>> umur = 18 >>> cukup_umur_untuk_buat_sim = umur >= 17 >>> print(cukup_umur_untuk_buat_sim) True >>> type(cukup_umur_untuk_buat_sim) <class 'bool'>1 adalah satu dari enam operator perbandingan yang paling sering digunakan yang semuanya akan menghasilkan nilai >>> umur = 18 >>> cukup_umur_untuk_buat_sim = umur >= 17 >>> print(cukup_umur_untuk_buat_sim) True >>> type(cukup_umur_untuk_buat_sim) <class 'bool'>5; ini adalah daftar keenam operator tersebut: x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y Meskipun operasi tersebut mungkin tidak asing, simbol-simbol Python berbeda dengan simbol matematika. Kesalahan yang paling sering terjadi adalah menggunakan tanda sama dengan ( >>> umur = 18 >>> cukup_umur_untuk_buat_sim = umur >= 17 >>> print(cukup_umur_untuk_buat_sim) True >>> type(cukup_umur_untuk_buat_sim) <class 'bool'>6) daripada sama dengan dobel ( >>> umur = 18 >>> cukup_umur_untuk_buat_sim = umur >= 17 >>> print(cukup_umur_untuk_buat_sim) True >>> type(cukup_umur_untuk_buat_sim) <class 'bool'>1). Ingat kalau >>> umur = 18 >>> cukup_umur_untuk_buat_sim = umur >= 17 >>> print(cukup_umur_untuk_buat_sim) True >>> type(cukup_umur_untuk_buat_sim) <class 'bool'>6 adalah operator pemberian nilai dan >>> umur = 18 >>> cukup_umur_untuk_buat_sim = umur >= 17 >>> print(cukup_umur_untuk_buat_sim) True >>> type(cukup_umur_untuk_buat_sim) <class 'bool'>1 adalah operator perbandingan. Juga, di Python tidak ada penulisan semacam n * 0 == 00 atau n * 0 == 01. Jadi menulisnya jangan sampai terbalik. Sama seperti tipe-tipe lainnya yang telah kita lihat sejauh ini, nilai-nilai Boolean bisa diberikan ke variabel, dicetak, dll. >>> umur = 18 >>> cukup_umur_untuk_buat_sim = umur >= 17 >>> print(cukup_umur_untuk_buat_sim) True >>> type(cukup_umur_untuk_buat_sim) <class 'bool'> 5.2. Operator-operator LogikaTedapat tiga operator logika, n * 0 == 02, n * 0 == 03, dan n * 0 == 04, yang memungkinkan kita untuk membangun ekspresi Boolean yang jauh lebih rumit. Semanticnya (arti / maksud) dari operator-operator tersebut adalah mirip dengan artinya dalam bahasa Inggris. Contoh, n * 0 == 05 menghasilkan x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y9 jika n * 0 == 07 lebih besar dari 0 dan pada saat yang sama, n * 0 == 07 juga lebih kecil dari 10. n * 0 == 09 adalah x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y9 jika salah satu dari kondisi tersebut bernilai x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y9, yang berarti, jika if x % 2 == 0: print(x, " is even.") print("Did you know that 2 is the only even number that is prime?") else: print(x, " is odd.") print("Did you know that multiplying two odd numbers " + "always gives an odd result?")2 bisa dibagi dengan 2 if x % 2 == 0: print(x, " is even.") print("Did you know that 2 is the only even number that is prime?") else: print(x, " is odd.") print("Did you know that multiplying two odd numbers " + "always gives an odd result?")3dengan 3. (Terus kalau misalnya 2 dan 3 keduanya bisa dibagi dua pada saat yang sama, apakah ekspresinya akan menghasilkan x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y9atau >>> umur = 18 >>> cukup_umur_untuk_buat_sim = umur >= 17 >>> print(cukup_umur_untuk_buat_sim) True >>> type(cukup_umur_untuk_buat_sim) <class 'bool'>0? Silahkan coba langsung pada Python interpreter mu.) Yang terakhir, operator n * 0 == 04gunanya untuk menegasi sebuah nilai Boolean (mengubah nilai menjadi kebalikannya), jadi if x % 2 == 0: print(x, " is even.") print("Did you know that 2 is the only even number that is prime?") else: print(x, " is odd.") print("Did you know that multiplying two odd numbers " + "always gives an odd result?")7 bernilai x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y9jika if x % 2 == 0: print(x, " is even.") print("Did you know that 2 is the only even number that is prime?") else: print(x, " is odd.") print("Did you know that multiplying two odd numbers " + "always gives an odd result?")9 adalah >>> umur = 18 >>> cukup_umur_untuk_buat_sim = umur >= 17 >>> print(cukup_umur_untuk_buat_sim) True >>> type(cukup_umur_untuk_buat_sim) <class 'bool'>0, yang artinya menjadi: jika n * 0 == 07kurang dari if BOOLEAN EXPRESSION: STATEMENTS_1 # Executed if condition evaluates to True else: STATEMENTS_2 # Executed if condition evaluates to False2. Ekspresi yang letaknya paling kiri dari operator n * 0 == 03akan dinilai terlebih dahulu: Jika hasilnya x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y9, Python tidak (dan tentunya tidak perlu) menilai ekspresi di kanannya -- ini dinamakan dengan short-circuit evaluation. Begitu juga dengan operator n * 0 == 02, jika ekspresi paling kiri memberikan >>> umur = 18 >>> cukup_umur_untuk_buat_sim = umur >= 17 >>> print(cukup_umur_untuk_buat_sim) True >>> type(cukup_umur_untuk_buat_sim) <class 'bool'>0, Python tidak menilai lagi ekspresi di kanan. Jadi tidak ada penilain yang dijalankan dengan percuma. 5.3. Tabel KebenaranTabel kebenaran adalah tabel kecil yang memungkinkan kita untuk melihat semua masukan yang ada, dan memberikan hasil dari operator logika. Karena operator n * 0 == 02dan n * 0 == 03masing-masing memiliki dua operand, maka hanya ada dua baris pada tabel kebenaran yang menjelaskan maksud dari n * 0 == 02.aba and bFalseFalseFalseFalseTrueFalseTrueFalseFalseTrueTrueTrue Pada tabel kebenaran, kita kadang menggunakan T dan F sebagai singkatan untuk dua nilai Boolean: berikut adalah tabel kebenaran yang menjelaskan n * 0 == 03:aba or bFFFFTTTFTTTT Operator logika yang ketiga, n * 0 == 04, hanya menggunakan satu operand, jadi tabel kebenarannya hanya dua baris:anot aFTTF 5.4. Menyederhanakan Ekspresi BooleanSekumpulan aturan untuk menyederhanakan dan mengatur ulang ekspresi-ekspresi dinamakan dengan aljabar. Contohnya, kita semua familiar dengan aturan aljabar di sekolah, seperti: n * 0 == 0 Disini kita melihat aljabar yang berbeda -- aljabar Boolean -- yang menyediakan aturan-aturan untuk bekerja dengan nilai-nilai Boolean. Pertama, operator n * 0 == 02. x and False == False Berikut beberapa aturan-aturan terkait dari operator n * 0 == 03: x or False == x Dua operator n * 0 == 04membatalkan dirinya masing-masing: not (not x) == x 5.5. Eksekusi Bersyarat/Kondisional (Conditional Execution)Agar dapat menulis program yang berguna, kita selalu memerlukan kemampuan untuk mengecek kondisi dan demikian pula merubah prilaku program untuk menyesuaikan diri. Pernyataan kondisional memberikan kita kemampuan ini. Bentuk paling sederhana dari pernyataan if adalah: if x % 2 == 0: print(x, " is even.") print("Did you know that 2 is the only even number that is prime?") else: print(x, " is odd.") print("Did you know that multiplying two odd numbers " + "always gives an odd result?") Ekspresi Boolean setelah pernyataan if dinamakan kondisi. Jika kondisi true, maka semua pernyataan bertakuk di bawahnya akan dieksekusi. Jika tidak, maka semua pernyataan yang bertakuk di bawah klausa if True: # This is always True, pass # so this is always executed, but it does nothing else: pass5lah yang akan dieksekusi. Flowchart dari pernyataan if dengan klausa else Flowchart pernyataan if.pngSyntaks dari pernyataan if True: # This is always True, pass # so this is always executed, but it does nothing else: pass6terlihat seperti ini: if BOOLEAN EXPRESSION: STATEMENTS_1 # Executed if condition evaluates to True else: STATEMENTS_2 # Executed if condition evaluates to False Sama seperti pendefinisian fungsi pada bab sebelumnya dan pernyataan majemuk lainnya seperti if True: # This is always True, pass # so this is always executed, but it does nothing else: pass7, pernyataan if True: # This is always True, pass # so this is always executed, but it does nothing else: pass6juga terdiri dari barsis header dan body. Baris header dimulai dengan keyword if True: # This is always True, pass # so this is always executed, but it does nothing else: pass6diikuti dengan ekspresi Boolean dan diakhiri dengan titik dua (:). Pernyataan yang bertakuk yang mengikutinya dinamakan dengan block. Pernyataan yang paling pertama yang tidak bertakuk menandakan akhir dari block. Masing-masing pernyataan di dalam block pertama dari pernyataan dieksekusi untuk menentukan apakan ekspresi Boolean bernilai x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y9. Semua pernyataan yang ada di block pertama akan dilewati jika ekspresi Boolean bernilai >>> umur = 18 >>> cukup_umur_untuk_buat_sim = umur >= 17 >>> print(cukup_umur_untuk_buat_sim) True >>> type(cukup_umur_untuk_buat_sim) <class 'bool'>0, dan kemudian semua pernyataan pada klausa if True: # This is always True, pass # so this is always executed, but it does nothing else: pass5lah yang akan dieksekusi. Tidak ada batasan seberapa banyak pernyataan yang bisa masuk pada kedua klausa dari pernyataan if True: # This is always True, pass # so this is always executed, but it does nothing else: pass6, tapi setidaknya harus ada satu pernyataan pada masing-masing block. Terkadang, akan sangat berguna untuk memiliki section tanpa pernyataan (biasanya sebagai penanda tempat, atau perancah, untuk kode yang kita belum tulis). Pada kasus seperti itu, kita bisa menggunakan pernyataan if x < 0: print("The negative number ", x, " is not valid here.") x = 42 print("I've decided to use the number 42 instead.") print("The square root of ", x, "is", math.sqrt(x))4, yang tidak akan melakukan apapun kecuali hanya sebagai placeholder. if True: # This is always True, pass # so this is always executed, but it does nothing else: pass 5.6. Menghilangkan klause elseFlowchart dari pernyataan if tanpa menggunaka klausa else Flowcart pernyataan if tanpa else.pngBentuk lain dari pernyataan if True: # This is always True, pass # so this is always executed, but it does nothing else: pass6adalah if True: # This is always True, pass # so this is always executed, but it does nothing else: pass6yang klausa if True: # This is always True, pass # so this is always executed, but it does nothing else: pass5-nya dihilangkan seluruhnya. Pada kasus ini, ketika kondisi bernilai x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y9, pernyataan akan dieksekusi, jika tidak flow of execution berlanjut ke pernyataan setelah if True: # This is always True, pass # so this is always executed, but it does nothing else: pass6. if x < 0: print("The negative number ", x, " is not valid here.") x = 42 print("I've decided to use the number 42 instead.") print("The square root of ", x, "is", math.sqrt(x)) Pada kasus ini, fungsi print yang mengeluarkan akar pangkat dua adalah berada setelah if True: # This is always True, pass # so this is always executed, but it does nothing else: pass6-- tanda berakhirnya sebuah pernyataan if bukan karena kita meninggalkan baris kosong, tapi karena bagaimana kode setelahnya ditakuk / indentasinya. Catat juga kalau pemanggilan fungsi if x < y: STATEMENTS_A elif x > y: STATEMENTS_B else: STATEMENTS_C1 akan menghasilkan error kalau kita tidak memiliki pernyataan if x < y: STATEMENTS_A elif x > y: STATEMENTS_B else: STATEMENTS_C2, biasanya diletakan pada bagian atas dari script kita. Peristilahan Python Dokumentasi Python terkadang menggunakan istilah suite of statement untuk merujuk pada apa yang kita namai disini dengan sebutan block. Mereka merujuk ke hal yang sama, dan kerana kebanyakan bahasa lainnya dan ilmuan komputer menggunakan kata block, maka kita tetap menggunakannya. if True: # This is always True, pass # so this is always executed, but it does nothing else: pass5bukanlah pernyataan. Pernyataan if True: # This is always True, pass # so this is always executed, but it does nothing else: pass6memiliki dua klausa, salah satu darinya (yang mana bersifat opsional) adalah klausa if True: # This is always True, pass # so this is always executed, but it does nothing else: pass5. 5.7. Pengkondisian Berantai (Chained conditionals)Terkadang terdapat kemungkinan yang jumlahnya lebih dari dua dan kita memerlukan lebih dari dua cabang. Salah satu cara untuk mengekspresikan perhitungan seperti itu adalah pengkondisian berantai: if x < y: STATEMENTS_A elif x > y: STATEMENTS_B else: STATEMENTS_C Flowchart dari pengkondisian berantai Flowchart pengkondisian berantai.pngif x < y: STATEMENTS_A elif x > y: STATEMENTS_B else: STATEMENTS_C6adalah singkatan dari if x < y: STATEMENTS_A elif x > y: STATEMENTS_B else: STATEMENTS_C7. Sama dengan yang sebelumnya, disini satu cabang akan dieksekusi. Tidak ada batasan jumlah seberapa banyak pernyataan if x < y: STATEMENTS_A elif x > y: STATEMENTS_B else: STATEMENTS_C6 bisa digunakan, tapi untuk if True: # This is always True, pass # so this is always executed, but it does nothing else: pass5hanya boleh ada satu dan harus ditempatkan paling akhir dari cabang pernyataan: >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True0 Setiap kondisi dicek sesuai urutan. Jika yang pertama false, yang berikutnya akan dicek, dan begitu seterusnya. Jika satu diantaranya bernilai true, cabang terkait akan dieksekusi, dan pernyataannya berhenti sampai disitu. Bahkan jika lebih dari satu kondisi true, hanya cabang yang kondisinya true duluan yang akan dieksekusi. 5.8. Pengkondisian Bersarang (Nested Conditional)Setiap pengkondisian juga bisa disarangkan (nested) satu dengan yang lain. (Ini temanya sama dengan tema dari sifat penyusunan). Kita bisa menulis contoh sebelumnya menjadi seperti berikut: Flowchart dari pengkondisian bersarang Pengkondisian Bersarang.png>>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True1 Pengkondisian terluar memiliki dua cabang. Cabang kedua berisi pernyataan if True: # This is always True, pass # so this is always executed, but it does nothing else: pass6lainnya yang juga memiliki dua cabangnya sendiri. Kedua cabang-cabang tersebut bisa berisi pernyataan pengkondisian juga. Meskipun indentasi dari pernyataan membuat strukturnya terlihat jelas, tapi pengkondisian bersarang dengan cepat menjadi sulit untuk kita baca. Umumnya, sangat disarankan untuk menghindari penggunaan pengkondisian bersarang jika dimungkinkan. Operator-operator logika umumnya menyediakan cara untuk menyederhanakan pernyataan kondisional bersarang. Sebagain contoh, kita bisa menulis ulang kode berikut menggunakan satu pengkondisian: >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True2 Fungsi >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True01 dipanggil hanya jika kita membuat dirinya bisa melewati kedua kondisi, jadi daripada menggunakan kode diatas yang menggunakan dua pernyataan if True: # This is always True, pass # so this is always executed, but it does nothing else: pass6masing-masing dengan kondisi sederhana, kita bisa membuat kondisi yang sedikit lebih kompleks menggunakan operator n * 0 == 02. Sekarang setelah ditulis ulang, kita bisa menyederhanakan kode diatas menjadi seperti berikut: >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True3 5.9. Pernyataan >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True04Pernyataan >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True04, dengan atau tanpa sebuah nilai, bergantung pada apakah fungsinya fruitful atau void, yang memungkinkan kita untuk mengakhiri eksekusi dari sebuah fungsi (atau ketika) kita mencapai akhir dari fungsi. Satu alasan untuk menggunakan early return (return lebih awal) adalah jika kita mendapatkan sebuah kondisi error. >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True4 Fungsi >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True06 memiliki sebuah parameter yang dinamakan n * 0 == 07. Hal pertama yang ia lakukan adalah mengecek apakah n * 0 == 07kurang dari atau sama dengan 0, yang dalam hal ini menampilkan persan error lalu menggunakan >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True04untuk keluar dari fungsi. Flow of execution secara langsung kembali ke pemanggil, tanpa mengeksekusi sisa baris dari fungsi tersebut. 5.10. Logika KebalikanMasing-masing operator relasional memiliki sebuah kebalikan: contoh, anggap kita bisa mendapatkan SIM ketika umur kita lebih dari 17 tahun, kita tidak bisa mendapatkan SIM jika kurang dari 17. Perhatikan kalau kebalikan dari >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True10 adalah >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True11 .operatorlogical opposite==!=!===<>=<=>><=>=< Memahami kebalikan dari logika tersebut memungkinkan kita sewaktu-waktu untuk menyingkirkan operator n * 0 == 04. Operator n * 0 == 04sering menjadi cukup sulit untuk dibaca pada kode computer, dan perhatian kita biasanya menjadi lebih jernih jika kita menghilangkannya. Contoh, jika kita menulis di Python: >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True5 itu tentu akan menjadi lebih bersih jika menggunakan hukum penyederhanaan, dan merubahnya menjadi: >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True6 Dua hukum penyederhanaan yang powerful (dinamakan hukum de Morgan) yang sering menjadi sangat berguna ketika berurusan dengan ekspresi Boolean yang rumit seperti berikut: >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True7 Contohnya, anggap kita bisa membunuh naga hanya jika pedang lightsabre kita terisi dayanya hingga 90% atau lebih, dan kita punya 100 atau lebih unit energi pada perisai pelindung kita. Kita menemukan pecahan kode Python berikut pada permainan: >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True8 hukum de Morgan bersama-sama dengan logika kebalikan akan memungkinkan kita membuat ulang kondisi menjadi lebih mudah dimengerti seperti kode berikut: >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True9 Kita juga bisa menyingkirkan n * 0 == 04dengan menyapu bagian >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True15dan if True: # This is always True, pass # so this is always executed, but it does nothing else: pass5dari pengkondisian. Jadi ini adalah versi ketiganya, juga sama: x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y0 Versi ini tentunya yang terbaik dari ketiganya, karena ia sangat dekat dengan pernyataan bahasa Indonesia yang mengawali. Kejelasan dari kode yang kita buat (untuk orang lain) semestinya selalu diberikan prioritas tinggi, sehingga memudahkan mereka untuk melihat dan mengerti apa kode yang kita tulis lakukan. Seiring dengan perkembangan skil pemrograman yang kita miliki, kita akan menyadari kalau kita memiliki lebih dari satu cara untuk memecahkan masalah apapaun. Jadi program yang bagus itu pasti sebelumnya didesain terlebih dahulu. Pada proses desain tersebut, kita membuat pilihan yang menghargai kejelasan, kesederhanaan, dan elegansi. Bidang pekerjaan yang bernama arsitek perangkat lunak (software architect) menjelaskan banyak tentang apa yang kita lakukan -- kita adalah para arsitek yang merekayasa produk kita sehingga memiliki keseimbangan dalam kecantikan, fungsionalitas, kesederhanaan dan kejelasan dalam kreasi kita. Tips Setelah program kita bekerja, kita harus bermain-main sedikit untuk mempolesnya lagi. Menulis komentar yang baik. Pikirkan mengenai apakah kodenya harus lebih jelas dengan nama variabel yang lain. Bisakah kita melakukannya dengan lebih elegan? Apakah lebih baik kita menggunakan fungsi? Bisakan kita menyederhanakan pengkondisiannya? 5.11. Konversi TipeKita pertama kali melihatnya pada bab awal. Melihatnya lagi ketika kita sudah jauh move on sampai disini tidak akan menyakiti kok! hehe Kebanyakan tipe pada Python hadir dengan fungsi built-in yang mencoba untuk mengkonversi nilai dari tipe lain menjadi tipenya sendiri. Fungsi >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True17, sebagai contoh, menerima nilai apapun dan mengkonversinya menjadi sebuah integer, jika mungkin, jika tidak ya si Python komplain: x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y1 >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True17juga bisa mengkonversi nilai floating-point menjadi integer, tapi ingat bahwa ia akan menghilangkan bagian fraksionalnya: x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y2 Fungsi >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True19mengkonversi integer dan string menjadi bilangan floating-point: x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y3 Mungkin terlihat aneh kalau Python membedakan integer bernilai 1 dan nilai floating point bernilai 1.0. Mereka memang merepresentasikan bilangan yang sama, tapi mereka memiliki tipe yang berbeda. Alasannya adalah karena mereka direpresentasikan berbeda di dalam komputer. Fungsi >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True20mengkonversi argumen apapun yang ia terima menjadi tipe >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True21: x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y4 >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True20bisa bekerja dengan nilai apapun dan mengkonversinya menjadi string. Seperti yang dijelaskan sebelumnya, x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y9adalah nilai Boolean; dan >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True24hanyalah nama variabel biasa, dan tidak didefinisikan disini, jadi kita mendapatkan error. 5.12. Sebuah Grafik Bar dengan TurtleTurtle memliki banyak kekuatan lain yang lebih besar daripada apa yang sudah pernah kita lihat. Dokumentasi lengkapnya bisa dilihat di http://docs.python.org/py3k/library/turtle.html atau melalui PyScripter, gunakan Help dan cari modul turtle. Berikut beberapa trik baru yang bisa digunakan pada turtle kita:
Oke, jadi bisakah kita membuat >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True29menggambar sebuah grafik batangan? Mari kita mulai dengan beberapa data yang akan dibuatkan grafiknya, xs = [48, 117, 200, 240, 160, 260, 220] Berkaitan dengan pengukuran masing-masing data, kita akan menggambar sebuah persegi panjang dengan panjang dari data tersebut dan lebar yang telah ditetapkan. x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y5 tess_bar_1.pngOke, masih belum begitu mengesankan, tapi bisa jadi start yang bagus! Disini, hal pentingnya adalah mental pembilahan, atau bagaimana kita memecah masalah menjadi pecahan-pecahan yang lebih kecil. Bilahan kita adalah menggambar satu batang, dan membuat fungsi untuk melakukannya. Lalu, untuk grafik keseluruhannya, kita secara berulang memanggil fungsi yang kita buat tadi menggunakan perulangan. Selanjutnya, pada bagian atas dari masing-masing batang, kita akan mencetak nilai dari datanya. Kita akan melakukan ini pada body dari >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True30, dengan menambahkan >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True31 sebagai baris baru ketiga dari body. Kita menempatkan sedikit spasi di depan dari angkanya, dan merubah angka tersebut menjadi string. Jika tanpa spasi ekstra ini tulisannya akan menempel ke batang di sebalah kirinya. Hasilnya terlihat seperti gambar berikut: tess_bar_2.pngDan sekarang kita akan menambahkan dua baris untuk mewarnai setiap batang. Program final kita akan terlihat seperti ini: x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y6 Hasilnya adalah seperti ini, yang tentu lebih memuaskan: tess_bar_3.pngHmmm.. Andai batangnya tidak terhubung satu sama lain di bagian bawah. Kita akan perlu mengangkat pensilnya sementara membuat jarak antara batang. Tugas mu untuk membuatnya menjadi lebih cantik! 5.13. Glosariumblock Sekumpulan pernyataan berurutan dengan indentasi yang sama. body block dari pernyataan-permnyataan di dalam pernyataan majemuk yang mengikuti headernya. Boolean algebra (Aljabar Boolean) Beberapa aturan untuk mengatur ulang dan pemikiran mengenai ekspresi Boolean. Boolean value (Nilai Boolean) Hanya ada dua nilai Boolean: True dan False. Nilai Boolean dihasilkan ketika ekspresi Boolean dinilai oleh Python interpreter. Mereka memiliki tipe >>> umur = 18 >>> cukup_umur_untuk_buat_sim = umur >= 17 >>> print(cukup_umur_untuk_buat_sim) True >>> type(cukup_umur_untuk_buat_sim) <class 'bool'>5. branch Salah satu dari jalur yang bisa dilalui oleh flow of execution yang ditentukan oleh eksekusi pengkondisian. chained conditional (pengkondisian berantai) Cabang pengkondisian dengan kemungkinan arah flow of execution lebih dari satu. Di Python pengkondisian berantai ditulis dengan pernyataan if ... elif ... else. comparison operator (operator perbandingan) Enam operator yang membandingkan dua nilai: ==, !=, >, <, >=, dan <= . condition (kondisi) Ekspresi Boolean dalam sebuah pernyataan pengkondisian yang menentukan cabang yang mana yang akan dieksekusi. conditional statement (pernyataan pengkondisian) Sebuah pernyataan yang mengendalikan arah flow of execution yang bergantung pada beberapa kondisi. Di Python kata kunci if, elif, dan else digunakan untuk pernyataan pengkondisian. logical operator (operator logika) Salah satu dari operator yang mengkombinasikan ekspresi Boolean: and, or, dan not. nesting (persarangan) Salah satu struktur program yang berada di dalam struktur yang lainnya, seperti pernyataan pengkondisian yang berada di dalam cabang dari pernyataan pengkondisian lainnya. prompt Isyarat visual yang memberitahu pengguna bahwa sistem siap untuk menerima data input. truth tabel (tabel kebenaran) Tabel ringkas dari nilai Boolean yang bisa menjelaskan makna atau arti dari sebuah operator. type conversion (konversi tipe) Pemanggilan fungsi eksplisit yang menerima nilai dari satu tipe dan menghitung nilai terkait dari tipe lainnya. wrapping code in function (membungkus kode ke dalam fungsi) Proses menambahkan header fungsi dan parameter hingga menjadi urutan pernyataan program biasanya dinamakan dengan "wrapping the code in a function". Proses ini sangat berguna ketika pernyataan program digunakan berulang-ulang. Ia juga bahkan jauh lebih berguna ketia ia memungkinkan programer untuk mengekspresikan mental pembilahannya, dan bagaimana mereka memecah sebuah masalah yang kompleks menjadi pecahan-pecahan kecil. 5.14. Latihan1. Asumsikan hari dalam seminggu 0,1,2,3,4,5,6 mulai dari Minggu hingga Sabtu. Tulis fungsi yang menerima nomer hari, dan mengembalikan nama hari (sebuah string). 2. Kamu sedang pergi berlibur ke tempat yang sangat indah dan menyenangkan (anggap saja ke penjara, jika tidak suka latihan happy-happy) keluar pada hari nomer 3 (hari Rabu). Kamu pulang kerumah setelah 137 kali tidur. Tulis versi umum dari program yang menanyakan nomer awal hari, dan lamanya kamu tinggal, dan ia akan memberitahu mu nama dari hari dalam seminggu kamu akan kembali pulang. 3. Berikan logika kebalikan dari kondisi berikut
4. Apa hasil penilaian dari ekspresi berikut?
5. Lengkapi tabel keberanan ini: p q r (not (p and q)) or r F F F ? F F T ? F T F ? F T T ? T F F ? T F T ? T T F ? T T T ? 6. Tulis fungsi yang menerima nilai ulangan, dan mengembalikan string -- peringkat untuk nilai ulangan tersebut -- berdasarkan skema berikut: Nilai Peringkat >= 75 First [70-75) Upper Second [60-70) Second [50-60) Third [45-50) F1 Supp [40-45) F2 < 40 F3 Kurung siku dan kurung bulat menandakan interval tertutup dan terbuka. Bilangan termasuk interval tertutup, dan interval terbuka mengecualikan bilangan. Jadi 39.99999 mendapatkan peringkat F3, tapi 40 mendapatkan peringkat F2. Asumsikan: xs = [83, 75, 74.9, 70, 69.9, 65, 60, 59.9, 55, 50, 49.9, 45, 44.9, 40, 39.9, 2, 0] Uji fungsi yang kamu buat dengan mencetak nilai dan peringkat dari semua elemen dalam list. 7. Modifikasi grafik batang turtle tadi sehingga pensilnya diangkat ketika membuat jarak antar batang. 8. Modifikasi program grafik batang dengan turtle tadi sehingga batang dengan nilai 200 atau lebih diwarnai dengan merah, nilai antara [100 dan 200] diwarnai kuning, dan batang yang merepresentasikan nilai dibawah 100 diwarnai hijau. 9. Pada program grafik batang tadi, apa yang kamu harapkan terjadi jika satu atau lebih nilai data dalam list bernilai negatif? Ayo coba. Ubah programnya sehingga ketika ia mencetak nilai teks untuk batang negatif, ia mencetak teksnya dibagian bawah dari batang. 10. Tulis fungsi dengan nama >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True33 yang mana menerima panjang dua sisi dari segitiga siku-siku, dan mengembalikan panjang dari hypotenuse. (Petunjuk: >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True34 akan mengembalikan akar pangkat dua.) 11. Tulis fungsi dengan nama >>> 5 == (3 + 2) # Apakah lima sama dengan 5 yang merupakan hasil dari 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True35 yang menerima panjang ketiga sisi dari sebuah segita, dan akan menentukan apakan segitiga itu siku-siku. Asumsikan bahwa argumen ketiga dari fungsi harus selalu sisi yang paling panjang. Ia akan mereturn x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y9jika segitiganya adalah siku-siku, atau >>> umur = 18 >>> cukup_umur_untuk_buat_sim = umur >= 17 >>> print(cukup_umur_untuk_buat_sim) True >>> type(cukup_umur_untuk_buat_sim) <class 'bool'>0jika tidak. Petunjuk: Aritmatika floating-point tidaklah selalu akurat, jadi sangat tidak aman untuk menguji bilangan floating-point berdasarkan kualitas. Jika seorang programer yang baik ingin mengetahui apakah n * 0 == 07sama dengan atau mendekati y, mereka mesti menggunakan kode semacam ini: x == y # Menghasilkan True jika ... x adalah sama dengan y x != y # ... x adalah tidak sama dengan y x > y # ... x adalah lebih besar dari y x < y # ... x adalah lebih kecil dari y x >= y # ... x adalah lebih besar atau sama dengan y x <= y # ... x adalah lebih kecil atau sama dengan y7 12. Kembangkan program diatas sehingga setiap sisi bisa dimasukan ke fungsi dalam urutan apapun. 13. Jika kamu tertarik dan penasaran dengan asalan kenapa aritmatika floating-point terkadang tidak akurat, pada selembar kertas, bagi 10 dengan 3 dan tulis hasilnya dalam desimal. Kamu akan menyadari itu tidak akan ada habisnya, jadi kamu akan perlu kertas yang panjangnya tidak terhingga. Representasi dari bilangan pada memori komputer atau pada kalkulator mu memiliki masalah yang sama: memori itu terbatas, dan beberapa digit bisa dan harus dihilangkan. Jadi ketidakakuratan kecil akan terjadi. Coba skrip berikut: Apa itu Boolean pada Python?Boolean adalah tipe data Python yang hanya bisa diisi oleh dua nilai, yaitu True dan False.
Apa yang dimaksud Boolean dalam pemrograman?Boolean adalah jenis tipe data selanjutnya yang perlu kamu kuasai sebelum terjun ke dunia pemrograman. Jenis data type ini biasanya digunakan untuk mewakili nilai yang benar dan salah dalam data. Umumnya, nilai yang salah (false) dan benar (true) direpresentasikan dengan angka 0 (false) dan 1 (true).
Apa yang menandakan akhir dari blok pernyataan atau suite di Python?Peningkatan indentasi muncul setelah pernyataan tertentu; penurunan indentasi menandakan akhir dari blok saat ini.
Apa itu statement Python?Statement adalah instruksi atau kalimat perintah yang diberikan dalam beberapa baris untuk dieksekusi oleh komputer. Pada bahasa Python, penulisan tidak diakhiri dengan tanda titik-koma. Akan tetapi, jika kita ingin menuliskan beberapa statement dalam satu baris maka kita harus memisahkannya dengan titik-koma.
|