Skip to content

Conditional and Iteration

Conditional if Statement and Tennary Operator

Code

Code
order_total = 247
if order_total > 100:
    discount = 25  # GBP
else:
    discount = 0  # GBP
print(f'Jumlah order {order_total}, mendapatkan diskon {discount}')
Print ouput
Jumlah order 247, mendapatkan diskon 25
Code
order_total = 247
discount = 25 if order_total > 100 else 0
print(f'Jumlah order {order_total}, mendapatkan diskon {discount}')
Print ouput
Jumlah order 247, mendapatkan diskon 25

Looping

Code

Code
for number in [0, 1, 2, 3, 4]:
    print(number)
Print ouput
0
1
2
3
4
Code
for number in range(5):
    print(number)
Print ouput
0
1
2
3
4

get value from list using for loop and range

Kita dapat memanfaat fungsi range() untuk mendapatkan nomor urut dari index.

Code

nama = 'farras', 'tania', 'faris', 'noah'
for position in range (len (nama) ):
    print(f'Nomor urut {position} adalah {nama[position]}')
Print ouput
Nomor urut 0 adalah farras
Nomor urut 1 adalah tania
Nomor urut 2 adalah faris
Nomor urut 3 adalah noah

cara diatas agak sedikir rumit, di python kita dapat menggunakan cara yang lebih simpel. Kita tidak perlu mengambila nilai dari tuple melalui index. Dibawah ini cara yang lebih elegan.

Code

nama = 'farras', 'tania', 'faris', 'noah'
for real in nama:
    print(f'Namanya adalah {real}')
Print ouput
Namanya adalah farras
Namanya adalah tania
Namanya adalah faris
Namanya adalah noah

Hmm contoh, jika kita ingin tetap menggunakan position sebagai nomor urut. Apakah kita harus menggunakan fungsi len() lagi ?. Tidak perlu kita dapat menggunakan enumerate. Enumerate memberikan dua tuple berpasangan, (position, value)

Code

nama = 'farras', 'tania', 'faris', 'noah'
for positions, value in enumerate (nama):
    print(f'Nomor {positions} disini oleh {value}')
Print ouput
Nomor 0 disini oleh farras
Nomor 1 disini oleh tania
Nomor 2 disini oleh faris
Nomor 3 disini oleh noah

Anda dapat menggunakan parameter start pada enumerate function untuk menentukan dari urutan berapa positions akan dimulai.

Code

nama = 'farras', 'tania', 'faris', 'noah'
for positions, value in enumerate (nama, start = 2): # (1)!
    print(f'Nomor {positions} disini oleh {value}')
  1. Argumen ke-2 diisi degan integer bernilai 2
Print ouput
Nomor 2 disini oleh farras # (1)!
Nomor 3 disini oleh tania
Nomor 4 disini oleh faris
Nomor 5 disini oleh noah
  1. Nomor urut dimulai dari angka 2 dari pada 0.

Iterators and Iterable

Iterable, adalah sebuah objek yang dapat sekaligus mengembalikan semua anggotnya. Contoh interable adalah semua squances types (list, str, dan tuple) dan beberapa non -sequances type (dictionary, file object, dan object dari semua class yang didalamnya ada function, i method atau __getitem__ yang mengimplementasi squance semantics.

Iterable dapat menggunakan for loop dan dibanyak tempat dimana rangkaian (sequence) dibutuhkan, seperiti (zip(), map(), ...). Ketika iterable ditempatkan sebagai argumen/operator pada fungsi bawaan iter(), fungsi tersebut akan mengembalikan iterator untuk objek tersebut.

Code

Code
nama = 'farras', 'faris', 'noah'
print(type (nama))

iter_nama = iter(nama)
print(type (iter_nama))
Print ouput
<class 'tuple'>
<class 'tuple_iterator'>
Code
ttl = ['jakarta', 'parung', 'parung']
print(type(ttl))

iter_ttl = iter(ttl)
print(type(iter_ttl))
Print ouput
<class 'list'>
<class 'list_iterator'>

iterator bagus untuk melewati satu persatu nilai dari himpunan nilai yang dirubah kedalam iterator. Penggunaan itertor biasa digunakan ketika membaca sebuah data dari file. pada contoh dibawah ini kita akan menggunakan objek iterator pada snipet diatas. Untuk mebaca satu persatu nilai dari iterator objek kita akan menggunakan fungsi next().

Alasan harus menggunakan iterators

Didunia teknologi yang berkembang pesat, kita ditantang membuat analisa menggunakan data yang amat-amat banyak. Masalah terbesarnya adalah penanganan data yang besar ini saat melakukan proses analisa dapat menyebabkan kapasitas memori mencapai limitnya bahkan habis. Jika kita dihadapi dengan masalah tersebut, kita harus mengenal dengan yang namanya konsep iterators.

Jadi, dari pada memasukan data sekali jalan untuk melakukan beberapa operasi, lebih baik masukan data yang lebih sedikit atau data yang dibutuhkan saja pada setiap operasi. Dengan demikian akan mengurangi resiko memori anda termakan habis, dan begitulah cara kerja dari konsep iterators,

Jadi, penggunaan iterator menghemat banyak memori karena iterator tidak memasukan data saat diolah namun saat data tersebut dipanggil.

Code

Membuat iterator dan memanggil nilanya
nama_iter = iter('farras', 'faris', 'noah')

print(next(iter_nama)) #(1)
print(next(iter_nama)) #(2)
print(next(iter_nama)) #(3)
print(next(iter_nama)) #(4)
  1. Pemanggilan next mengeluarkan farras lalu menghapus data tersebut
  2. Pemanggilan next mengeluarkan noah lalu menghapus data tersebut
  3. Pemanggilan next mengeluarkan noah lalu menghapus data tersebut
  4. Pemanggilan next menyebabkan exception StopIteration karena variabel tersebut sudah tidak menampung data apapun
Print output
farras
faris
noah
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
Input In [9], in <cell line: 4>()
    2 print(next(iter_nama)) #(2)
    3 print(next(iter_nama)) #(3)
----> 4 print(next(iter_nama))

StopIteration:

Fungs next() akan mengeluarkan exception ketika iterator sudah habis di baca.

Jika anda ingin mengeluarkan semua nilai dari sebuah iterator dan ingin menghindari StopIteration anda dapat menggunakan for loop statement sama persis dengan iterable.

Code

Membuat iterator dan memanggil nilanya
nama_iter = iter('farras', 'faris', 'noah')

for a in nama_iter:
    print(a)
Print output
farras
faris
noah

Namun, sebenarnya ketika kita berurusan dengan iterable kita tidak perlu merubahnya kedalam iterator objek dengan fungsi iter(), for stament secara otomatis akan mengeluarkan nilai dari himpunan nilai tersebut satu persatu. Namun iterabel memakan lebih banyak tempat penyimpanan karena iterabel tetap menyimpan data tersebut setelah dipanggi keluar. Kita lihat simulasi dibawah ini

Code

Membuat iterable dan pemanggilan dengan for loop
data = range(3)
print("Pemanggilan pertama")
for a in data:
    print (a)
print("Pemanggialan kedua")
for a in data:
    print (a)
Print output
Pemanggilan pertaman
0
1
2
Pemanggialan kedua
0
1
2
Membuat iterator dan pemanggilan dengan for loop
data_iter = iter(range(3))
print("Pemanggilan pertama")
for a in data_iter:
    print (a)
print("Pemanggialan kedua")
for a in data_iter:
    print (a)
Print output
Pemanggilan pertaman
0
1
2
Pemanggialan kedua

Perulangan for loop pada iterable dapat terus dilakukan berulang-ulang kali tanpa harus membuat iterable lagi. Namun dengan iterator, jika anda sudah menggunakan for loop sekali anda tidak dapat mengambil datanya kembali dengan for loop. Jika anda sadari, ketika fungsi next() dipanggil setelah data habis maka akan menghasilkan exception, sama halnya dengan for loop yang tidak mengeluarkan datanya setelah iterator tersebut sudah tidak memliki data.

Note

Setiap data pada iterator akan langsung dihapus pada memori setelah di panggil.

Perulangan pada nilai berurut ganda

Sebagai simulasi kita membuat 3 variable yang masing masing menampung daftar nama, umur, dan tempat lahir dalam bentuk list

Code

Assingment variable
nama = ["Farras", "Tania", "Faris", "Noah"]
umur = [26, 23, 2, 1]
tl = ["Jakarta", "Depok", "Bogor", "Bogor"]

Dibawah ini kita akan menampilkan nama, umur dan tempat lahir dari setiap data di list diatas.

Code

Mencetak semua data dari list diatas
for position in range (0,4):
    print (f'{nama[position]} berumur {umur[position]} lahir di {tl[position]} ') 
Print output
Farras berumur 26 lahir di Jakarta 
Tania berumur 23 lahir di Depok 
Faris berumur 2 lahir di Bogor 
Noah berumur 1 lahir di Bogor 

Ada cara yang lebih baik pythonic, kita dapat menggunakan fungsi zip() untuk menampilkan ketiga iterable objek diatas.

Code

Mencetak semua data dari list diatas
for nilai_nama, nilai_umur, nilai_tl in zip (nama, umur, tl):
    print (f'{nilai_nama} berumur {nilai_umur} lahir di {nilai_tl} ')
Print output
Farras berumur 26 lahir di Jakarta 
Tania berumur 23 lahir di Depok 
Faris berumur 2 lahir di Bogor 
Noah berumur 1 lahir di Bogor 

Agak sedikit panjang jika kita menggabungkan nilai di for statement head, kita dapat memisahkan di body for statement.

Code

Mencetak semua data dari list diatas
for data in zip (nama, umur, tl):
    nilai_nama, nilai_umur, nilai_tl = data
    print (f'{nilai_nama} berumur {nilai_umur} lahir di {nilai_tl} ')
Print output
Farras berumur 26 lahir di Jakarta 
Tania berumur 23 lahir di Depok 
Faris berumur 2 lahir di Bogor 
Noah

Perulangan while

While loop serupa dengan for loop, namun nwhile loop tidak melakukan perulangan pada himpunan (sequance), namun kita harus menulis logika secara manual. While loop akan terus melakukan perulangan selama kondisinya tepat (true) dan akan berhenti ketika kondisi yang diinginkan sudah tidak sesuai (false).

Berikut adalah salah satu kode penggunaan while dalam merubah bilangan int kedalam binnary.

Code

Konversi int ke binary
def int_to_bin(number):
    n = number
    binnary = []
    while n > 0:
        binnary.append( n % 2)
        n //= 2

    binnary.reverse()
    return binnary;

print(int_to_bin(9))
Print output
[1, 0, 0, 1]

Ada cara yang lebih elegen pythonic, kita dapat menggunakan fungsi divmod() yang membutuhkn 2 argumen, number dan divisor(pembagi), dan nilai kembaliannya ada dua nilai yang dibungkus dalam tuple, hasil bagi, dan sisa bagi.

Code

Konversi int ke binary
def int_to_bin_div_mod(number):
    n = number
    binnary = []
    while n > 0:
        n, bins = divmod(n,2)
        binnary.append(bins)

    binnary.reverse()
    return binnary;

print(int_to_bin_div_mod(11))
Print output
[1, 0, 1, 1]

while - continue dam break

continue digunakan untuk melewatkan (skip) satu sekali perulangan saat continue dieksekusi. break akan menghentikan perulangan secara utuh.

Contoh penggunaan continue, kita akan memberikan diskon sebesa 20% kepada barang yang memliki masa kadarluasa hari ini.

Code

Penggunaan Continue
from datetime import date, timedelta

today = date.today()
tommorow = today + timedelta(days=1)

products = [
{'id':'1', 'exparation_date':today, 'name':'Nasi Padang', 'price':15000},
{'id':'2', 'exparation_date':tommorow, 'name':'Jus Jeruk', 'price':20000},
{'id':'3', 'exparation_date':today, 'name':'Soto Lamongan', 'price':35000}
]

        if product['exparation_date'] != today:
                continue
for product in products:
        product['price'] *= 0.8
        print(f"Price for ${product['name']} is {product['price']:,.0f}")
Print output
Price for $Nasi Padang is 12,000
Price for $Soto Lamongan is 28,000

Simulasi break akan memberhenti semua proses ketika angka yang dimasukan oleh user habis dibagi dengan 7

Code

Penggunaan Continue
print("Input number here : ", end="")

number = 1 # this flag

while (True):
    print("Keep enter the number here : ", end="")
    number = int(input())
    if (number%7 != 0):

            print("Iterating is still working")
            print("-------------");
    else:
            print("opps you entered boom number, breaking soon")
            break

print ("the game has ended")
Print output
Input number here : Keep enter the number here : 

8

Iterating is still working
-------------
Keep enter the number here : 

7

opps you entered boom number, breaking soon
the game has ended

Else clause on iteration

Fitur yang dimiliki oleh python adalah adanya else pada for atau while loop. Untuk mendemonstrasikan fitur tersebut, kita akan membuat sebuah list yang berisikan beberapa tuple, isi dari tuple tersebut adalah nama dan umur. Logika, jika umur sudah lebih dari 18 tahun maka SIM (Surat Ijin Mengemudi) di tampilkan, jika tidak maka tampilkan exception.

Code

Klausa else pada perulangan
class DriverException(Exception):
        pass


nama = ("farras","tania","faris", "noah")
umur = (17,14,0,0)

for data in zip(nama,umur):
        nama, umur = data
        if umur >= 18:
                driver = (nama,umur)
                print(driver)
                break
else :
        raise DriverException("Driver not found")
Print output
---------------------------------------------------------------------------
DriverException                           Traceback (most recent call last)
Input In [108], in <cell line: 8>()
    13                 break
    14 else :
---> 15         raise DriverException("Driver not found")

DriverException: Driver not found

Ekspresi Assigment

Untuk memahami Assignment Expression setidaknya kita harus memahami perbedaan statement dan expression.

  • Statement dapat berupa expression atau salah satu dari konstruksi dari if, while atau for.
  • Expression adalah akumulasi dari elemen expression seperti literals, names, attribute access, operator atau function calls yang mengembalikan sebuah nilai (return a value)

Expression dapat mengembalikan sebuah nilai (return value). Expression dapat menjadi sebuah statement namun tidak semua statement itu expression. Assigment seperti name = "Muhammad Farras bukanlah sebuah expression dan juga tidak mengembalikan sebuah nilai. Artinya kita tidak dapat menggunakan assignment statement pada conditional expression seperti while, for loop atau if statement.

Walrus Operator

Code

Assignment value pada conditional statement
if lulus := true:
    print("Lulus")
else:
    print("Tidak lulus")
Print output
Input In [111]
    if lulus = true:
            ^
SyntaxError: invalid syntax

Dari POC diatas kita lihat, statement tidak bisa dimasukan kedalam sebuah expression, karena satement tidak mengembalikan sebuah nilai. Solusi dari kode diatas, kita harus memisahkan antara dua statement tersebut dengan cara membuat sebuah variable yang menampung sebuah nilai True.

Code

Assignment value pada conditional statement
lulus = True #(1)!
if lulus: #(2)!
        print ("lulus")
else:
        print("Tidak lulus")
  1. Assignment Statement
  2. Conditional Statement
Print output
lulus

Nahhhh, kita dapat memanfaat Assigment Expression agar kode yang dibuat lebih ringkas, assingment expression menggunakan keyword walrus operator → :=

Code

Assignment value pada conditional statement
if lulus := True: #(1)!
    print("Lulus")
else:
    print("Tidak lulus")
  1. Condtional dan Assignment Statement sekaligus
Print output
lulus

Contoh lain penggunaan walrus operator pada kode yang telah kita gunakan pada sesi continue)

Code

Assignment value pada conditional statement
while (True):
    print("Input the number here : ", end="")

    if (number := int(input())%7 != 0): #(1)!

            print("Iterating is still working")
            print("-------------");
    else:
            print("opps you entered boom number, breaking soon")
            break

print ("the game has ended")
  1. Condtional dan Assignment Statement sekaligus
Print output
Input the number here : 

7

opps you entered boom number, breaking soon
the game has ended