Anda di sini

Pemrograman

Python 3 RLE BAB 5: Pengkondisian

Aditya Suranata - 23 Desember 2015 17:05:18 0

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 Boolean

Nilai 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 True dan False (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 == 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 True; namun pada pernyataan kedua, 5 tidak sama dengan 6, jadi kita dapat False.

Operator == adalah satu dari enam operator perbandingan yang paling sering digunakan yang semuanya akan menghasilkan nilai bool; 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 (=) daripada sama dengan dobel (==). Ingat kalau = adalah operator pemberian nilai dan == adalah operator perbandingan. Juga, di Python tidak ada penulisan semacam =< atau =>. 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 Logika

Tedapat tiga operator logika, and, or, dan not, 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, x > 0 and x < 10 menghasilkan True jika x lebih besar dari 0 dan pada saat yang sama, x juga lebih kecil dari 10.

n % 2 == 0 or n % 3 == 0 adalah True jika salah satu dari kondisi tersebut bernilai True, yang berarti, jika n bisa dibagi dengan 2 atau dengan 3. (Terus kalau misalnya 2 dan 3 keduanya bisa dibagi dua pada saat yang sama, apakah ekspresinya akan menghasilkan True atau False? Silahkan coba langsung pada Python interpreter mu.)

Yang terakhir, operator not gunanya untuk menegasi sebuah nilai Boolean (mengubah nilai menjadi kebalikannya), jadi not (x > y) bernilai True jika (x > y) adalah False, yang artinya menjadi: jika x kurang dari y.

Ekspresi yang letaknya paling kiri dari operator or akan dinilai terlebih dahulu: Jika hasilnya True, Python tidak (dan tentunya tidak perlu) menilai ekspresi di kanannya -- ini dinamakan dengan short-circuit evaluation.
Begitu juga dengan operator and, jika ekspresi paling kiri memberikan False, Python tidak menilai lagi ekspresi di kanan.

Jadi tidak ada penilain yang dijalankan dengan percuma.

5.3. Tabel Kebenaran

Tabel kebenaran adalah tabel kecil yang memungkinkan kita untuk melihat semua masukan yang ada, dan memberikan hasil dari operator logika. Karena operator and dan or masing-masing memiliki dua operand, maka hanya ada dua baris pada tabel kebenaran yang menjelaskan maksud dari and.

aba and b
FalseFalseFalse
FalseTrueFalse
TrueFalseFalse
TrueTrueTrue

Pada tabel kebenaran, kita kadang menggunakan T dan F sebagai singkatan untuk dua nilai Boolean: berikut adalah tabel kebenaran yang menjelaskan or:

aba or b
FFF
FTT
TFT
TTT

Operator logika yang ketiga, not, hanya menggunakan satu operand, jadi tabel kebenarannya hanya dua baris:

anot a
FT
TF

5.4. Menyederhanakan Ekspresi Boolean

Sekumpulan 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 and.

x and False == False
False and x == False
y and x == x and y
x and True == x
True and x == x
x and x == x

Berikut beberapa aturan-aturan terkait dari operator or:

x or False == x
False or x == x
y or x == x or y
x or True == True
True or x == True
x or x == x

Dua operator not membatalkan 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 else lah yang akan dieksekusi.

Flowchart dari pernyataan if dengan klausa else

Syntaks dari pernyataan if terlihat 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 for, pernyataan if juga terdiri dari barsis header dan body. Baris header dimulai dengan keyword if diikuti 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 True. Semua pernyataan yang ada di block pertama akan dilewati jika ekspresi Boolean bernilai False, dan kemudian semua pernyataan pada klausa else lah yang akan dieksekusi.

Tidak ada batasan seberapa banyak pernyataan yang bisa masuk pada kedua klausa dari pernyataan if, 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 pass, 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 else

Flowchart dari pernyataan if tanpa menggunaka klausa else

Bentuk lain dari pernyataan if adalah if yang klausa else-nya dihilangkan seluruhnya. Pada kasus ini, ketika kondisi bernilai True, pernyataan akan dieksekusi, jika tidak flow of execution berlanjut ke pernyataan setelah if.

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 -- tanda berakhirnya sebuah pernyataan if bukan karena kita meninggalkan baris kosong, tapi karena bagaimana kode setelahnya ditakuk / indentasinya. Catat juga kalau pemanggilan fungsi math.sqrt(x) akan menghasilkan error kalau kita tidak memiliki pernyataan import math, 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.
Perhatikan juga bahwa else bukanlah pernyataan. Pernyataan if memiliki dua klausa, salah satu darinya (yang mana bersifat opsional) adalah klausa else.

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

elif adalah singkatan dari else if. Sama dengan yang sebelumnya, disini satu cabang akan dieksekusi. Tidak ada batasan jumlah seberapa banyak pernyataan elif bisa digunakan, tapi untuk else hanya boleh ada satu dan harus ditempatkan paling akhir dari cabang pernyataan:

if choice == "a":
    function_one()
elif choice == "b":
    function_two()
elif choice == "c":
    function_three()
else:
    print("Invalid choice.")

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
if x < y:
    STATEMENTS_A
else:
    if x > y:
        STATEMENTS_B
    else:
        STATEMENTS_C

Pengkondisian terluar memiliki dua cabang. Cabang kedua berisi pernyataan if lainnya 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:

if 0 < x:            # Assume x is an int here
    if x < 10:
        print("x is a positive single digit.")

Fungsi print dipanggil hanya jika kita membuat dirinya bisa melewati kedua kondisi, jadi daripada menggunakan kode diatas yang menggunakan dua pernyataan if masing-masing dengan kondisi sederhana, kita bisa membuat kondisi yang sedikit lebih kompleks menggunakan operator and. Sekarang setelah ditulis ulang, kita bisa menyederhanakan kode diatas menjadi seperti berikut:

if 0 < x and x < 10:
    print("x is a positive single digit.")

5.9. Pernyataan return

Pernyataan return, 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.

def print_square_root(x):
    if x <= 0:
        print("Positive numbers only, please.")
        return

    result = x**0.5
    print("The square root of", x, "is", result)

Fungsi print_square_root memiliki sebuah parameter yang dinamakan x. Hal pertama yang ia lakukan adalah mengecek apakah x kurang dari atau sama dengan 0, yang dalam hal ini menampilkan persan error lalu menggunakan return untuk keluar dari fungsi. Flow of execution secara langsung kembali ke pemanggil, tanpa mengeksekusi sisa baris dari fungsi tersebut.

5.10. Logika Kebalikan

Masing-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 >= adalah < .

operatorlogical opposite
==!=
!===
<>=
<=>
><=
>=<

Memahami kebalikan dari logika tersebut memungkinkan kita sewaktu-waktu untuk menyingkirkan operator not. Operator not sering menjadi cukup sulit untuk dibaca pada kode computer, dan perhatian kita biasanya menjadi lebih jernih jika kita menghilangkannya.

Contoh, jika kita menulis di Python:

if not (age >= 17):
    print("Hey, you're too young to get a driving licence!")

itu tentu akan menjadi lebih bersih jika menggunakan hukum penyederhanaan, dan merubahnya menjadi:

if age < 17:
    print("Hey, you're too young to get a driving licence!")

Dua hukum penyederhanaan yang powerful (dinamakan hukum de Morgan) yang sering menjadi sangat berguna ketika berurusan dengan ekspresi Boolean yang rumit seperti berikut:

not (x and y)  ==  (not x) or (not y)
not (x or y)   ==  (not x) and (not y)

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:

if not ((daya_pedang >= 0.90) and (perisai_pelindung >= 100)):
    print("Serangan mu tidak mempan, sang naga membakar diri mu menjadi ayam krispi!")
else:
    print("Sang naga sudah terkapar dan kejang-kejang. Kamu berhasil menyelamatkan sang pangeran cantik! eh")

hukum de Morgan bersama-sama dengan logika kebalikan akan memungkinkan kita membuat ulang kondisi menjadi lebih mudah dimengerti seperti kode berikut:

if (daya_pedang < 0.90) or (perisai_pelindung < 100):
    print("Serangan mu tidak mempan, sang naga membakar diri mu menjadi ayam krispi!")
else:
    print("Sang naga sudah terkapar dan kejang-kejang. Kamu berhasil menyelamatkan sang pangeran cantik! eh")

Kita juga bisa menyingkirkan not dengan menyapu bagian then dan else dari pengkondisian. Jadi ini adalah versi ketiganya, juga sama:

if (daya_pedang >= 0.90) and (perisai_pelindung >= 100):
    print("Sang naga sudah terkapar dan kejang-kejang. Kamu berhasil menyelamatkan sang pangeran cantik! eh")
else:
    print("Serangan mu tidak mempan, sang naga membakar diri mu menjadi ayam krispi!")

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?

Kita memikirkan kode yang kita buat sebagai kreasi kita, sebuah hasil seni kita! Kita membuatnya dengan sebaik-baiknya.

5.11. Konversi Tipe

Kita 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 int, sebagai contoh, menerima nilai apapun dan mengkonversinya menjadi sebuah integer, jika mungkin, jika tidak ya si Python komplain:

>>> int("32")
32
>>> int("Hello")
ValueError: invalid literal for int() with base 10: 'Hello'

int juga bisa mengkonversi nilai floating-point menjadi integer, tapi ingat bahwa ia akan menghilangkan bagian fraksionalnya:

>>> int(-2.3)
-2
>>> int(3.99999)
3
>>> int("42")
42
>>> int(1.0)
1

Fungsi float mengkonversi integer dan string menjadi bilangan floating-point:

>>> float(32)
32.0
>>> float("3.14159")
3.14159
>>> float(1)
1.0

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 str mengkonversi argumen apapun yang ia terima menjadi tipe string:

>>> str(32)
'32'
>>> str(3.14149)
'3.14149'
>>> str(True)
'True'
>>> str(true)
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
NameError: name 'true' is not defined

str bisa bekerja dengan nilai apapun dan mengkonversinya menjadi string. Seperti yang dijelaskan sebelumnya, True adalah nilai Boolean; dan true hanyalah nama variabel biasa, dan tidak didefinisikan disini, jadi kita mendapatkan error.

5.12. Sebuah Grafik Bar dengan Turtle

Turtle 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:

  • Kita bisa menyuruh turtle untuk menampilkan teks pada canvas pada posisinya sekarang. Metode untuk melakukannya adalah alex.write("Hello").
  • Kita bisa mewarnai bentuk (lingkaran, setengah lingkaran, segitiga, dll.) dengan warna apapun. Ini memiliki dua langkah proses. Pertama kita memanggil metode alex.begin_fill(), lalu kemudian kita menggambar bentuknya, dan kemudian memanggil alex.end_fill().
  • Sebelumnya kita mengatur warna dari turtle kita -- kita sekarang bisa juga mengatur warna isiannya, yang mana tidak harus sama dengan warna turtle dan pensilnya. Kita menggunakan alex.color("blue","red") untuk membuat turte menggambar menggunakan biru, dan mewarnainya dengan merah.

Oke, jadi bisakah kita membuat tess menggambar 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.

def draw_bar(t, height):
    """ Get turtle t to draw one bar, of height. """
    t.left(90)
    t.forward(height)     # Draw up the left side
    t.right(90)
    t.forward(40)         # Width of bar, along the top
    t.right(90)
    t.forward(height)     # And down again!
    t.left(90)            # Put the turtle facing the way we found it.
    t.forward(10)         # Leave small gap after each bar

...
for v in xs:              # Assume xs and tess are ready
    draw_bar(tess, v)

Oke, 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 draw_bar, dengan menambahkan t.write(' ' + str(height)) 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:

Dan sekarang kita akan menambahkan dua baris untuk mewarnai setiap batang. Program final kita akan terlihat seperti ini:

def draw_bar(t, height):
    """ Get turtle t to draw one bar, of height. """
    t.begin_fill()           # Added this line
    t.left(90)
    t.forward(height)
    t.write("  "+ str(height))
    t.right(90)
    t.forward(40)
    t.right(90)
    t.forward(height)
    t.left(90)
    t.end_fill()             # Added this line
    t.forward(10)

wn = turtle.Screen()         # Set up the window and its attributes
wn.bgcolor("lightgreen")

tess = turtle.Turtle()       # Create tess and set some attributes
tess.color("blue", "red")
tess.pensize(3)

xs = [48,117,200,240,160,260,220]

for a in xs:
    draw_bar(tess, a)

wn.mainloop()

Hasilnya adalah seperti ini, yang tentu lebih memuaskan:

Hmmm.. 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. Glosarium

block

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 bool.

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. Latihan

1. 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

  1. a > b
  2. a >= b
  3. a >= 18 and day == 3
  4. a >= 18 and day != 3

4. Apa hasil penilaian dari ekspresi berikut?

  1. 3 == 3
  2. 3 != 3
  3. 3 >= 4
  4. not (3 < 4)

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 find_hypot yang mana menerima panjang dua sisi dari segitiga siku-siku, dan mengembalikan panjang dari hypotenuse. (Petunjuk: x ** 0.5 akan mengembalikan akar pangkat dua.)

11. Tulis fungsi dengan nama is_rightangled 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 True jika segitiganya adalah siku-siku, atau False jika 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 x sama dengan atau mendekati y, mereka mesti menggunakan kode semacam ini:

if  abs(x-y) < 0.000001:    # If x is approximately equal to y
    ...

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:

  import math
  a = math.sqrt(2.0)
  print(a, a*a)
  print(a*a == 2.0)

2.659
Daftar Artikel Terkait
Image

Aditya Suranata

Aditya suka menulis, bukan hanya sekedar hobi, menulis menjadi medianya untuk mencurahkan pikiran dan perasaan. Di TutorKeren.com kebanyakan menyumbang tulisan sesuai dengan minat dan keahliannya yaitu pada kategori pemrograman dan elektronika. Selain itu juga gemar menulis mengenai hal-hal umum, seperti ilmu alam, sosial dan beberapa pengalamannya yang mungkin bisa berguna untuk orang lain.

Artikel Menarik Lainnya
Mari Gabung

Halo Emo 51 , Ada yang ingin disampaikan? Jangan sungkan untuk gabung diskusi ini. Silahkan Login dulu atau Daftar baru.