Conditional and Iteration
Conditional if Statement and Tennary Operator
Code
Looping
Code
get value from list using for loop and range
Kita dapat memanfaat fungsi range()
untuk mendapatkan nomor urut dari index.
Code
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
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
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}')
- Argumen ke-2 diisi degan integer bernilai 2
Nomor 2 disini oleh farras # (1)!
Nomor 3 disini oleh tania
Nomor 4 disini oleh faris
Nomor 5 disini oleh noah
- 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
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
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)
- Pemanggilan
next
mengeluarkan farras lalu menghapus data tersebut - Pemanggilan
next
mengeluarkan noah lalu menghapus data tersebut - Pemanggilan
next
mengeluarkan noah lalu menghapus data tersebut - Pemanggilan
next
menyebabkan exceptionStopIteration
karena variabel tersebut sudah tidak menampung data apapun
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
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
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
Dibawah ini kita akan menampilkan nama, umur dan tempat lahir dari setiap data di list diatas.
Code
Ada cara yang lebih baik pythonic, kita dapat menggunakan fungsi zip()
untuk menampilkan ketiga iterable objek diatas.
Code
Agak sedikit panjang jika kita menggabungkan nilai di for statement head, kita dapat memisahkan di body for statement.
Code
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
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
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
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}")
Simulasi break
akan memberhenti semua proses ketika angka yang dimasukan oleh user habis dibagi dengan 7
Code
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")
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
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
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
lulus = True #(1)!
if lulus: #(2)!
print ("lulus")
else:
print("Tidak lulus")
- Assignment Statement
- Conditional Statement
Nahhhh, kita dapat memanfaat Assigment Expression agar kode yang dibuat lebih ringkas, assingment expression menggunakan keyword walrus operator → :=
Code
if lulus := True: #(1)!
print("Lulus")
else:
print("Tidak lulus")
- Condtional dan Assignment Statement sekaligus
Contoh lain penggunaan walrus operator pada kode yang telah kita gunakan pada sesi continue)
Code
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")
- Condtional dan Assignment Statement sekaligus