anggil
melalui sebuah function seperti print nilai keluarannya akan ditampilkan. Kenapa nilainya
“None” ? Karena di function yang tadi ditulis tidak disertakan keyword return. Jika sebuah function
tidak diberikan return maka dapat dibilang function tersebut dianggap procedure. Sebuah function
yang tidak memiliki nilai keluaran.
<< gambar 7.1 hasil eksekusi fungsi_1.py >>
Function yang memakai “return”
Bagaimana kalau ditambahkan return ? Jika ditambahkan return, function yang Anda tulis akan
menghasilkan nilai keluaran. Jika dipanggil langsung maka program tidak akan menampilkan nilai
keluaran dari function tersebut. Jika function tersebut dipanggil melalui function atau keyword
misalnya print, maka nilai keluarannya akan ditampilkan. Berikut terdapat function yang
menghasilkan nilai keluaran yang memiliki parameter dan tidak berparameter :
54
listing : fungsi_2.py
def fungsi_tanpa_parameter():
temp = 0
for i in range(1, 5):
temp = temp + i
return temp
def fungsi_berparameter(batas_akhir):
temp = 0
for i in range(1, batas_akhir):
temp = temp + i
return temp
print " contoh penggunaan fungsi tanpa parameter : "
print "hasil : ", fungsi_tanpa_parameter()
print "hasil : ", fungsi_tanpa_parameter()
print "hasil : ", fungsi_tanpa_parameter()
print "\n\n"
print " contoh penggunaan fungsi berparameter : "
print "hasil : ", fungsi_berparameter(15)
print "hasil : ", fungsi_berparameter(20)
print "hasil : ", fungsi_berparameter(25)
Anda sendiri dapat melihat perbedannya antara function yang berparameter dengan tidak
berparameter. Pada function yang tidak berparameter. Ketika dipanggil berulang – ulang nilai
keluarannya tetap sama. Berbeda dengan function yang memiliki parameter, nilai keluaranya
berbeda – beda ketika dipanggil. Tergantung nilai masukan yang diberikan.
<< gambar 7.2 hasil eksekusi fungsi_2.py >>
55
Default Argument pada Python
Sekarang Anda sudah mengenal function yang berparameter dan tidak berparameter. Umumnya saat
akan memberikan nilai pada sebuah function, nilai tersebut akan diberikan saat function tersebut
dipanggil. Apakah saat memasukkan nilai boleh tidak diisi atau dilewat ? Lalu apakah akan ada
nilainya ?. Di Python terdapat sebuah fitur yang dinamakan default argument saat menulis sebuah
function. Default argument sendiri adalah sebuah argumen yang sudah diisi nilai terlebih dahulu
jika argumen tersebut tidak diberikan saat memanggil function. Jadi sekalipun dilewat nilai dari
argument tersebut akan dipenuhi dengan nilai default nya. Berikut dibawah ini terdapat contoh
pemanggilan function yang melewatkan semua argumen yang dibutuhkan function, dan yang tidak
melewatkan semua argumen yang akan ditangani oleh default argument :
listing : fungsi_3.py
def cetak_biodata( nama, kota, umur=18):
print "Nama : ", nama;
print "Umur : ", umur;
print "Kota : ", kota;
return;
# kalau parameter diisi semua
print "Tanpa memakai default argument : "
cetak_biodata( nama="miki", umur=50, kota="bandung" )
print "\n"
# kalau parameter tidak diisi semua
print "Memakai default argument : "
cetak_biodata(kota="bandung", nama="miki")
Kode diatas jika dieksekusi akan tampil seperti berikut :
56
<< gambar 7.3 hasil eksekusi fungsi_3.py >>
Variable-length Argument pada Python
Sekarang kita akan mengenal fitur yang dinamakan dengan variable-length argument. Fitur ini
digunakan ketika ingin membuat sebuah function yang memiliki argumen yang dinamis. Argumen
ini dapat disebut sebagai argumen yang tidak utama. Misal dalam sebuah fungsi dibutuhkan tiga
argumen, maka argumen ke – 4 sampai ke – n argumen, tidak akan ditampung oleh argumen utama.
Tapi ditampung oleh argumen terakhir yang menampung seluruh argumen yang diberikan setelah
argumen utama. Di Python untuk menandakan bahwa argumen tersebut variable-length argument,
diberikan tanda “*” pada argumen terakhir. Variable-length argument ini harus disimpan di akhir
setelah argumen biasa dan default argument. Apabila disimpan di urutan awal, maka Python akan
mengeluarkan error : “SyntaxError: invalid syntax”. Sebagai contoh Anda dapat perhatikan kode
berikut ini :
listing : fungsi_4.py
def cetak_perolehan_nilai( nama, twitter, *scores):
print "Nama : ", nama;
print "Twitter : ", twitter;
print "Score yang diperoleh : "
i = 1
for score in scores:
print "nilai ke - %d : %d" % (i, score)
i= i + 1
return;
# kalau parameter diisi semua
print "Dengan adanya variable-length variabel sisa akan menjadi tuple : "
cetak_perolehan_nilai("Silvy", "@sivlysiv", 90, 80, 70, 80, 90)
57
Seperti yang Anda lihat pada contoh diatas, argumen utama adalah nama dan twitter. Apabila kita
memasukkan argumen setelahnya, maka argumen tersebut akan dikumpulkan dalam satu wadah
yaitu *scores. Berapapun kita masukkan argumen, akan ditampung menjadi sebuah list yang berisi
argumen – argumen yang dimasukkan setelah nama dan twitter.
<< gambar 7.4 hasil eksekusi fungsi_4.py >>
Keyword Argument pada Function
Dalam penggunaan function Anda mesti melewatkan argumen sesuai urutan yang ditulis pada
parameter yang dibutuhkan oleh function yang Anda tulis. Apakah mungkin jika ditulis tanpa urutan
argumen sudah baku pada function tersebut. Dalam function terdapat sebuah fitur yang dinamakan
keyword argument. Keyword argument ini dapat melewatkan argumen tanpa harus sesuai urutan.
Keyword argument diberikan saat memanggil sebuah function dengan mengambil nama argumen
yang terdapat di function disambung dengan tanda “=” dan nilai dari argumen tersebut. Jika kita
memberikan argumen yang tidak sesuai urutan tanpa memakai keyword argument, maka
argumen yang diterima function tersebut tidak akan sesuai.
listing : fungsi_5.py
def cetak_biodata( nama, umur, kota):
print "Nama : ", nama;
print "Umur : ", umur;
print "Kota : ", kota;
return;
# kalau pakai keyword argument : mau urutannya gimanapun input akan sesuai
print "Tanpa memakai keyword argument : "
58
cetak_biodata( kota="bandung", nama="miki", umur=50 )
print "\n"
# kalau tidak memakai keyword argument : mau urutannya gimanapun input tidak akan sesuai
print "Memakai keyword argument : "
cetak_biodata( "bandung", "miki", 50)
print "\n"
# kalau tidak memakai keyword argument : tapi urutannya sesuai maka input akan sesuai
print "Memakai keyword argument : tapi urutannya sesuai "
cetak_biodata( "miki", 50, "bandung")
Pada contoh diatas, Anda dapat melihat perbedaan antara function yang melewatkan keyword
argument dengan yang tidak memakai keyword argument. Contoh yang tidak memakai
keyword argument tidak akan menerima masukan sesuai yang dibutuhkan function ketika urutan
argumennya diacak.
<< gambar 7.5 hasil eksekusi fungsi_5.py >>
Keyword-length Argument pada Function
59
Keyword-length argument mempunyai cara penggunaan yang sama hanya saja, keyword-length ini
menampung keyword argument yang berlebih ketika diberikan kepada function yang dipanggil.
Keyword argument yang berlebih akan diterima dalam bentuk dictionary.
listing: fungsi_6.py
def cetak_perolehan_nilai( nama, twitter, **data_tambahan):
print "Nama : ", nama;
print "Twitter : ", twitter;
print "\n"
print "Data Lainnya : "
i = 1
for data in data_tambahan:
print "%s : %s" % (data, data_tambahan[data])
return;
# kalau parameter diisi semua
print "Dengan adanya keyword argument, argumen tersisa akan menjadi dictionary : "
cetak_perolehan_nilai("Silvy","@sivlysiv",email="silvysilvy@gmail.com",
facebook="www.facebook.com/silvysil", telp="0838-1234-5678")
Pada contoh diatas, keyword argument yang berlebih ditampung kedalam argument data_tambahan
dan argumen berlebih tersebut disimpan dalam dictionary.
<< gambar 7.6 hasil eksekusi fungsi_6.py >>
60
Pass by Reference dan Pass by Value pada Python
Berikutnya terdapat masalah pass by value atau pass by reference. Di Python semua nilai akan
dilewatkan secara by reference. Artinya jika kita mengubah argumen di dalam fungsi maka nilai
argumen yang direferensi tersebut akan ikut berubah juga. Misalkan dibawah contoh berikut
terdapat sebuah list yang akan diganti dengan nilai baru, dan ada juga yang ditambahkan nilai baru.
listing : fungsi_7.py
def sebuah_fungsi(sebuah_list):
sebuah_list = [1, 2, 3, 4, 5]
print sebuah_list
def sebuah_fungsi_lainnya(sebuah_list):
sebuah_list.append([10, 20, 30])
print sebuah_list
ini_list = [10, 20, 30]
sebuah_list = [100, 200, 300]
print "apakah ini_list berubah ? "
print ini_list
sebuah_fungsi(ini_list)
print ini_list
print ini_list
sebuah_fungsi_lainnya(ini_list)
print ini_list
print "apakah sebuah_list berubah ? "
print sebuah_list
sebuah_fungsi(sebuah_list)
print sebuah_list
print sebuah_list
sebuah_fungsi_lainnya(sebuah_list)
print sebuah_list
Pada kode diatas, Anda akan melihat sebuah perbedaan yang cukup penting. Ketika sebuah list
diganti nilainya maka list yang ada di luar function tidak akan terpengaruh. Tapi ketika kita
menambahkan data baru dengan memakai method pada list tersebut. Nilai diluar ikut berubah,.
Hal ini terjadi karena pada function sebuah_fungsi_lainnya(), list sebuah_list masih menunjuk atau
merujuk ke sebuah_list yang berada diluar. Atau dalam kata lain masih menunjuk ke “address” yang
sama di memori utama.
61
<< gambar 7.7 hasil eksekusi fungsi_7.py >>
Variable Scope pada Python
Variable scope adalah sebuah kondisi dimana variabel diakses secara lokal pada blok kode tertentu
atau bersifat universal yang menyebabkan variabel tersebut dapat diakses dari blok kode manapun.
Misal ada sebuah variabel di dalam function. Variabel tersebut bersifat lokal dan hanya dapat
diakses didalam function tersebut. Lalu bagaimanakah kita menjadikan sebuah variabel agar bersifat
global ?. Di Python terdapat sebuah keyword yang bernama global. Keyword ini digunakan untuk
merujuk sebuah variabel di luar blok kode, misalnya sebuah variabel di dalam function, dengan
nama yang sama.
listing : fungsi_8.py
def sebuah_fungsi():
angka = 10
print "di dalam sebuah_fungsi, angka bernilai : ", angka
def sebuah_fungsi_lainnya():
global angka
angka = 114
print "di dalam sebuah_fungsi, angka bernilai : ", angka
angka = 6666
print "sebelum dipanggil sebuah_fungsi : ", angka
sebuah_fungsi()
print "sesudah dipanggil sebuah_fungsi : ", angka
print "\n\n"
62
print "sebelum dipanggil sebuah_fungsi_lainnya : ", angka
sebuah_fungsi_lainnya()
print "sesudah dipanggil sebuah_fungsi_lainnya : ", angka
Pada kode diatas variabel yang bernama angka dibubuhi keyword global pada function
sebuah_fungsi_lainnya(). Hasilnya saat angka diubah nilainya. Maka nilai di variabel angka yang
berada di luar blok function sebuah_fungsi_lainnya() ikut berubah.
<< gambar hasil eksekusi fungsi_8.py >>
63
8. Mengenal Exception
Jenis – Jenis Exception
Exception adalah sebuah cara di Python untuk menjebak error, dan menangangi error tak terduga
pada program Python yang Anda tulis. Exception akan tetap menjalankan baris kode program
dibawah bagian kode program yang error. Hal ini mempermudah proses debugging. Lalu apa
bedanya jika kita memakai kondisional biasa yang memakai if untuk mencegah error ?
Pertama Anda harus mencari cara untuk menangkap nilai – nilai yang error, misal ketika membuka
file Anda harus memakai method – method yang ada pada file untuk mengetahui error atau
tidak. Kedua dengan memakai kondisional if biasa, program yang Anda tulis akan langsung
dihentikan ketika error terjadi. Ketiga pengambilan error akan otomatis ditangani oleh Python dan
error tersebut akan ditangani sesuai dengan penanganan yang Anda lakukan, dan baris kode
program dibawahnya akan tetap dieksekusi.
Python sendiri sudah menyediakan beberapa standard error yang dapat digunakan oleh
programmer dalam menjaga pengembangan aplikasinya dari error yang tak terduga. Anda sendiri
dapat membuat error menurut definisi Anda. Hal tersebut akan diulas di bagian akhir bab ini.
Berikut adalah beberapa standard error yangt terdapat di Python :
No Nama Exception Keterangan
1 Exception Menangani semua exception
2
StopIteration Exception ini muncul ketika method next() tidak
menunjuk ke objek apapun saat iterasi
3 SystemExit Exception ini muncul ketika sys.exit() dipanggil
4
StandardError Exception untuk menangani semua built-in
exception kecuali StopIteration dan SystemExit
5
ArithmeticError Exception untuk menangani error saat perhitungan
angka
6
OverflowError Exception ini muncul ketika perhitungan angka
melebihi batas maksimum dari tipe angka yang
dihitung
7
FloatingPointError Exception ini muncul ketika terdapat kegagalan
pada perhitungan angka bertipe float
8
ZeroDivisionError Exception ini muncul jika ada pembagian atau
modulus oleh 0 terhadap angka tipe apapun
10
AssertionError Exception ini muncul ketika terjadi kegagalan pada
saat perintah assert dijalankan
11
AttributeError Exception ini muncul ketika gagal menunjuk atribut
dari suatu objek
12 EOFError Exception ini muncul ketika tidak ada input saat
64
memakai function raw_input() atau input dan
telah mencapai bagian akhir file saat pembacaan
file.
13
ImportError Exception ini muncul ketika gagal saat
memakai import
14
KeyboardInterrupt Exception ini muncul ketika user meng-interrupt
eksekusi program, biasanya ketika menekan
kombinasi ctrl + c
15
LookupError Exception muncul ketika gagal pada saat proses look
up
16
IndexError Exception ini muncul ketika tidak ada indeks yang
dituju pada struktur data seperti list atau tuple
17
KeyError Exception ini muncul ketika tidak ada key yang
dituju pada dictionary
18
NameError Exception ini muncul ketika variabel tidak
ditemukan pada lingkup lokal di suatu function dan
kondisional atau pada lingkup global
19
UnboundLocalError Exception ini muncul ketika mencoba mengakses
variabel lokal di function atau method tapi belum
ada nilainya
20
EnvironmentError Exception in muncul ketika terjadi kegagalan diluar
lingkup Python
21
IOError Exception in muncul ketika proses input/output
gagal, misal saat memakai print atau saat
membuka file
22
OSError Exception ini muncul ketika terjadi kegagalan pada
sistem operasi yang digunakan
23
SyntaxError Exception ini muncul ketika terjadi kesalahan pada
penggunaan sintaks Python
24
IndentationError Exception ini muncul ketika indentasi pada blok
kode tidak sesuai penggunaannya.
25
SystemError Exception ini muncul ketika terdapat masalah
internal pada interpreter, saat error ini muncul
interpreter tidak akan keluar
26
TypeError Exception ini muncul jika ada kesalahan tipe data
saat proses perhitungan, misal huruf dibagi angka
27
ValueError Exception ini muncul ketika argumen yang tidak
sesuai diterima oleh builtin function
28
RuntimeError Exception ini muncul ketika terjadi kesalahan yang
tidak masuk kategori manapun
29
NotImplementedEror Exception ini muncul ketika abstract method dari
suatu class tidak diimplementasikan di class yang
mewarisinya.
65
Agar lebih paham dibawah ini ada beberapa contoh kode yang penggunaan exception-nya sangat
sering digunakan. Sebagai contoh pertama berikut terdapat kode yang berisi pembagian oleh angka
nol.
listing : exception_1.py
sebuah_angka = 29
try:
print sebuah_angka / 0
except:
print "proses perhitungan gagal "
print "proses cetak ini masih dapat dijalankan "
try:
print sebuah_angka / 0
except ZeroDivisionError, e:
print "proses perhitungan gagal karena : ", e
print "proses cetak ini masih dapat dijalankan "
print sebuah_angka / 0
# jika tidak memakai exception maka proses berikutnya tidak akan dijalankan
print "apakah proses cetak ini masih dapat dijalankan ??? "
Di dalam try terdapat kode yang kemungkinan akan memunculkan exception. Sedangkan di dalam
except adalah kode yang akan dieksekusi jika exception tersebut muncul. Pada try-except yang
pertama, semua error akan ditangani dan Anda tidak akan mengetahui jenis exception apa yang
yang ditangani. Pada try-except yang kedua, Anda memprediksi akan menangani error jika terjadi
pembagian oleh nol. Manakah yang lebih baik ? Pastikan Anda sudah memiliki perkiraan apa saja
error yang akan terjadi sehingga saat debugging nanti akan mempermudah Anda untuk
memperbaiki kode program Anda. Pada blok kode try-except sekalipun error kode dibawahnya akan
tetap dieksekusi. Pada proses perhitungan di bagian akhir tidak ditangani oleh try-except sehingga
kode dibawahnya tidak dieksekusi. Berikut hasil yang diberikan jika kode dieksekusi :
66
<< gambar 8.1 hasil eksekusi exception_1.py >>
Contoh lain yang umum dipakai adalah IndexError dan KeyError. Kedua error ini umum dipakai
saat operasi list, tuple, dan dictionary. Berikut terdapat contoh menunjuk indeks dan key yang tidak
terdapat pada list, tuple, dan dictionary yang didefinisikan dalam kode dibawah ini.
listing : exception_2.py
sebuah_list = [1, 2, 3, 4, 5]
sebuah_tuple = (1, 2, 3, 4, 5)
sebuah_dictionary = {'nama':'Mangaraja', 'email':'mangaraja@yahoo.com'}
try:
print sebuah_list[10]
except IndexError, e:
print "proses gagal karena : ", e
print "proses cetak ini masih dapat dijalankan "
try:
print sebuah_tuple[10]
except IndexError, e:
print "proses gagal karena : ", e
print "proses cetak ini masih dapat dijalankan "
try:
print sebuah_dictionary['website']
except KeyError, e:
print "proses gagal karena : ", e
print "proses cetak ini masih dapat dijalankan "
67
Pada contoh diatas “sebuah_list” dan “sebuah_tuple” ditangani oleh try-except yang menangani
exception IndexError. Pada masing – masing blok, kita ingin mencoba indeks yang tidak ada pada
list dan tuple tersebut. Sedangkan pada blok try-except untuk dictionary, kita ingin mencoba
menunjuk key “website” tapi karena key tersebut tidak ada, maka akan muncul exception KeyError.
<< gambar 8.2 hasil eksekusi exception_2.py >>
Berikutnya contoh exception yang tak kalah populer lainnya adalah AttributeError. Exception ini
muncul ketika sebuah class tidak memiliki atribut (variabel) yang diakses oleh programmer. Hal ini
sangat penting untuk diperhatikan ketika merancang sebuah aplikasi berbasis objek. Anda harus
memeriksa apakah atribut yang Anda akses pada sebuah kelas ada pada saat perancangan atau tidak.
Jika tidak yakin gunakanlah try-except untuk menjebak AttributeError tersebut.
listing : exception_3.py
class PersegiPanjang:
panjang = 0
lebar = 0
def __init__(self, p, l):
self.panjang = p
self.lebar = l
prsg_pjg = PersegiPanjang(10, 5)
try:
print "panjang : ", prsg_pjg.panjang
print "lebar : ", prsg_pjg.lebar
print "tinggi :", prsg_pjg.tinggi
except AttributeError, e:
print "proses pemanggilan atribut gagal karena --> ", e
68
print "proses cetak ini masih dapat dijalankan"
Pada contoh diatas, kita ingin mencoba mengakses atribut tinggi pada objek prsg_pjg. Sebelumnya
tahapan yang dilalui adalah proses instansiasi, dimana kita memanggil sebuah template objek yang
akan dibentuk kedalam sebuah variabel. Kemudian di bagian try-except tersebut kita coba akses
atribut tinggi. Karena atribut tersebut tidak ada di kelas persegi panjang, maka exception
AttributeError akan muncul.
<< gambar 8.3 hasil eksekusi exception_3.py >>
Contoh yang terakhir dari sekian banyak exception yang terdapat di Python adalah IOError.
Exception ini biasa terjadi ketika proses input data, saat mencetak data, atau saat operasi file. Pada
contoh berikut kita akan membuka sebuah file, tapi file tersebut tidak ada. Secara default jika kita
membuka file tanpa menyertakan mode pembacaan, maka mode tersebut adalah mode 'r' yang
artinya read atau baca.
listing : exception_4.py
try :
f = open('nilai.txt')
except IOError, e:
print "Proses pembukaan file gagal karena : ", e
print "proses cetak pada baris ini masih dapat dijalankan"
Pada contoh diatas kita ingin file nilai.txt, tapi karena file tersebut belum pernah ditulis sebelumnya
maka exception akan muncul yaitu IOError. Selain digunakan untuk file, IOError dapat terjadi juga
saat pembacaan built-in storage milik Python seperti saat pembacaan pickle, shelve, dan marshal.
69
<< gambar 8.4 hasil eksekusi exception_4.py >>
Menyusun Multiple Except
Apakah kita dapat menangkap exception dalam satu blok try-except ?. Di Python sendiri terdapat
fitur multiple except, yaitu kita dapat menangkap exception dengan baris except yang berbeda. Hal
ini dilakukan jika kita ingin memberikan perlakuan berbeda kepada setiap exception yang ditangani.
Lebih lemgkapnya pantau kode dibawah ini.
listing : exception_5.py
try:
angka1 = int(raw_input('masukkan angka ke-1 : '))
angka2 = int(raw_input('masukkan angka ke-2 : '))
print 'hasil perhitungan : ', angka1 / angka2
except ZeroDivisionError, e:
print "proses pembagian gagal karena : ", e
except ValueError, e:
print "proses perhitungan gagal karena : ", e
print "proses cetak ini masih dapat dijalankan "
Pada kode diatas kita mencoba menjebak dua buah exception dengan dua baris except berbeda. Hal
tersebut dilakukan agar perlakuan pada penanganan setiap exception memiliki penanganan yang
berbeda. Misal pada baris except pembagian nol ada informasi “proses pembagian gagal karena : “ ,
sedangkan di baris except nilai error terdapat informasi “proses perhitungan gagal karena : “. Jadi
dengan memakai baris except yang berbeda Anda dapat menangani error yang berbeda sesuai
kebutuhan Anda.
70
<< gambar 8.5 hasil eksekusi exception_5.py >>
memakai Multiple Exception
Berbeda sedikit pada contoh sebelumnya, jika pada setiap exception ditangani oleh setiap baris
except. Maka pada kaidah multiple exception di satu except menangani beberapa exception.
Bedanya, semua exception yang ditangani baris except tersebut akan mendapat penanganan yang
sama.
listing : exception_6.py
try:
angka1 = float(raw_input('masukkan angka ke-1 : '))
angka2 = float(raw_input('masukkan angka ke-2 : '))
print 'hasil perhitungan : ', angka1 / angka2
except (ZeroDivisionError, ValueError, TypeError), e:
print "proses perhitungan gagal karena : ", e
print "proses cetak ini masih dapat dijalankan "
Kode diatas jika dieksekusi akan muncul tampilan seperti berikut :
71
<< gambar 8.6 hasil eksekusi exception_6.py >>
Try-Except Bersarang
Mirip seperti kondisional atau perulangan yang dapat ditambahkan blok kode kondisional atau
perulangan didalamnya. Try-except pun mempunyai kaidah yang sama dimana try-except dapat
disimpan didalam try-except yang lainnya. Prioritasnya adalah tangani yang luar terlebih dahulu.
Jika terjadi di try-except terluar maka blok kode didalamnya yang terdapat try-except tidak akan
dieksekusi. Jika di blok luar tidak terdapat error. Maka penanganan exception di try-except bagian
dalam akan dilakukan.
listing : exception_7.py
try:
angka1 = float(raw_input('masukkan angka ke-1 : '))
angka2 = float(raw_input('masukkan angka ke-2 : '))
try :
print 'hasil perhitungan : ', angka1 / angka2
except ZeroDivisionError, e:
print "proses perhitungan gagal karena : ", e
except ValueError, e:
print "proses input gagal karena : ", e
print "proses cetak ini masih dapat dijalankan "
Jika pada contoh exception_5.py baris except ZeroDivisionError disimpan di tingkat pertama,
sekarang baris tersebut disarangkan di try-except yang utama. Dengan demikian Anda dapat
menangani exception dari dalam secara langsung.
72
<< gambar 8.7 hasil eksekusi exception_7.py >>
Membuat Exception Sendiri
Lalu apakah kita terbatas pada penanganan standard exception Python saja ?. Anda dapat membuat
exception Anda sendiri dengan membuat sebuah kelas yang diturunkan dari kelas Exception.
Dengan cara tersebut, Anda dapat membuat exception Anda sesuai kebutuhan pada kasus yang akan
Anda tangani. Misal kita ingin membuat sebuah exception jika angka yang dimasukkan adalah
angka negatif. Pertama kita buat dulu class nya dengan nama yang diingikan, turunkan dari kelas
Exception, dan tentukan penanganan error pada method – method di kelas tersebut.
listing : exception_8.py
class NegativeValueError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
s = "Tidak menerima angka kurang dari 0 " + str(self.value)
return s
def cekAngka(angka):
if angka < 0:
raise NegativeValueError(angka)
try:
sebuah_angka = int(raw_input("masukkan sebuah angka : "))
cekAngka(sebuah_angka)
except (NegativeValueError, TypeError), e:
73
print "proses gagal karena : ", e
Untuk memanggil exception-nya kita memerlukan keyword raise ketika exception tersebut
dimunculkan maka exception akan ditangani except dan mengeluarkan pesan error-nya. Pesan
tersebut berasal dari function __str__() yang sebelumnya telah kita definisikan pada kelas
NegativeValueError.
<< gambar 8.8 hasil eksekusi exception_8.py >>
memakai “finally” pada Try-Except
Dan akhirnya sekarang kita membahas finally. Keyword ini digunakan untuk menentukan
penanganan apa yang harus dilakukan baik ketika exception muncul atau tidak. Misal saat
mengambil data dari database, kita tidak akan tahu ada kegagalan apa yang akan terjadi. Agar
program kita tetap aman dan data tidak rusak. Maka baik terjadi kegagalan atau tidak koneksi ke
database harus ditutup. Hal tersebut juga bisa terjadi saat pembacaan file. Untuk mencegah
kerusakan file, baik akan terjadi error atau tidak, file harus ditutup. Di blok finally ini penanganan
yang terjadi ketika exception muncul atau tidak disimpan.
listing : exception_9.py
try:
angka1 = float(raw_input('masukkan angka ke-1 : '))
angka2 = float(raw_input('masukkan angka ke-2 : '))
try :
print 'hasil perhitungan : ', angka1 / angka2
except ZeroDivisionError, e:
print "proses perhitungan gagal karena : ", e
except ValueError, e:
print "proses input gagal karena : ", e
finally:
74
print "coba perhatikan lagi nilai yang anda masukkan "
print "proses cetak ini masih dapat dijalankan "
Kode diatas jika dieksekusi akan muncul tampilan seperti berikut :
<< gambar 8.9 hasil eksekusi exception_9.py >>
9. Membuat File
Pengenalan File
Biasanya jika kita tidak memakai file, hasil pemrosesan data hanya akan disimpan di main
memory. Setelah program dihentikan atau tiba – tiba komputer Anda mati, semua data akan hilang.
Lalu bagaimana jika ingin memakai kembali data yang sudah diproses sebelumnya ?. Untuk
menyimpan data agar bisa diproses di kesempatan selanjutnya, misal komputer dimatikan kemudian
dinyalakan lagi hari esoknya. Kita butuh sebuah penyimpanan yang bersifat resident dan disimpan
di secondary storage seperti harddisk. Python sendiri menyediakan beberapa media penyimpanan
yang bisa digunakan oleh programmer Python, ada file, shelve, marshal, pickle, dan sqlite3.
Pada bab ini kita akan bahas mengenai file berupat txt. File di Python bisa berupa txt, csv, atau jenis
lainnya. Txt merupakan contoh file yang sering digunakan. File jenis ini berisi plain text. File jenis
ini menyimpan karakter ascii standard yang diterima dari user.
Pada pembuatan file terdapat beberapa mode dalam manipulasi file. Berikut daftar mode manipulasi
file tersebut :
No Mode Keterangan
1 r Membuka file dan hanya untuk pembacaan
saja. Pointer file akan ditempatkan di awal
file. Jika pada saat pembukaan file tidak
disertakan mode manipulasi file, maka mode
75
ini secara default dipakai untuk manipulasi
file
2 w
Membuka file dan hanya untuk penulisan
saja. Jika file yang dibuka sudah ada dan
memakai mode 'w', maka file tersebut
akan ditimpa. Jika file tidak ada maka akan
dibuatkan file baru.
3 a
Membuka file untuk penambahan isi file.
Pointer file disimpan di bagian akhir file jika
file tersebut ada. Jika file tidak ada maka akan
dibuatkan file baru.
4 b
Mode ini ditambahkan masing – masing pada
mode r, w,a menjadi rb, wb, ab. Dengan
menambahkan mode b pada setiap mode
manipulasi standar. Maka pemba file caan file
akan dilakukan dalam format biner
5 +
Mode ini ditambahkan kedalam mode r, w, a.
r+ : baca dan tulis
w+ : tulis dan baca
a+ : tambah dan baca
Membuat File Baru
Agar lebih paham kita akan mencoba membuat sebuah file txt. Pertama kita biasakan cegah error
dengan memakai try-except dan tangkap exception IOError, agar jika terjadi error kelak, kita
bisa menanganinya dengan lebih mudah. Kemudian di dalam blok try-except tersebut buat sebuah
objek file dengan memakai built-in function open(). Pada function tersebut terdapat dua
parameter yang biasa digunakan yaitu, nama file serta mode manipulasi file-nya. Karena kita ingin
membuat file baru, maka mode “w” digunakan pada kasus pertama berikut :
listing : file_1.py
try:
sebuah_file = open("absen.txt", 'w')
print "nama file yang tadi dibuat : ", sebuah_file.name
print "mode pembacaan file : ", sebuah_file.mode
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
sebuah_file.close()
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
except IOError, e:
print "proses gagal karena : ", e
Ketika kita sudah membuka sebuah file dan terbentuk objek file. Kita dapat mengakses method dan
76
atribut pada objek file tersebut. Atribut yang sering diakses untuk pemrosesan file antara lain :
name, mode, closed. Atribut name adalah nama file tersebut, mode adalah mode manipulasi file
tersebut, dan closed menyatakan apakah file tersebut sudah ditutup atau belum. Sedangkan method
yang diakses diatas adalah close(), yang digunakan untuk menutup file setelah penggunaan file
selesai. Dengan menutup file, penggunaan memori utama akan dihemat. Jika tidak pernah menutup
file dalam jumlah yang banyak bisa menyebabkan memory leak. Jadi berhati – hatilah :D.
<< gambar 9.1 hasil eksekusi file_1.py >>
Mengisi File
Pada contoh pertama, file yang kita buat masih kosong, belum berisi. Sesuai namanya kita sedang
membuat file bernama 'absen.txt', yang didalamnya akan terdapat daftar hadir perkuliahan. Dengan
memakai method write(), kita bisa menambahkan isi pada file 'absen.txt', dan yang akan kita
isikan adalah teks. Method ini memerlukan parameter sebuah string yang akan ditulis di lokasi
tertentu pada file berdasarkan posisi pointer file berada.
listing : file_2.py
try:
sebuah_file = open("absen.txt", 'w')
print "nama file yang tadi dibuat : ", sebuah_file.name
print "mode pembacaan file : ", sebuah_file.mode
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
sebuah_file.write('1. Jajang Surahman, Teknik Informatika, ITENAS\n')
sebuah_file.write('2. Angel Corine, Manajemen Informatika, UNIKOM\n')
sebuah_file.write('3. Samsul Basri, Ilmu Komputer, UPI\n')
sebuah_file.close()
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
77
except IOError, e:
print "proses gagal karena : ", e
Setelah kita menambahkan isi pada file teks yang kita buat, kita dapat membuka file yang telah
dibuat dengan teks editor dan dapat melihat isi dari file tersebut.
<< gambar 9.2 hasil eksekusi file_2.py >>
Membaca Isi File
Setelah mengisi file dengan method write(). Sekarang kita akan memakai method read() untuk
membaca file. Pastikan, file yang akan dibaca harus dalam mode 'r', jika tidak dalam mode tersebut,
misal dalam mode 'w', maka akan muncul error : ”OError: File not open for reading”. Kemudian
untuk mengetahui posisi pointer file berada, kita gunakan method tell().
listing : file_3.py
try:
sebuah_file = open("absen.txt", 'r')
print "nama file yang tadi dibuat : ", sebuah_file.name
print "mode pembacaan file : ", sebuah_file.mode
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
print "isi file : \n", sebuah_file.read()
print "posisi pointer pada file : ", sebuah_file.tell()
sebuah_file.close()
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
except IOError, e:
print "proses gagal karena : ", e
78
Dengan memakai method read(), kita dapat melihat isi dari file tersebut. Tapi method ini
membaca sekaligus isi file yang dibaca, tidak perbaris. Jika pembacaan dilakukan sekaligus, ruang
memori yang dibutuhkan jauh lebih besar daripada file yang dibaca perbaris. Kemudian dengan
adanya method tell(), kita bisa mengetahui posisi pointer file berada dimana, agar mempermudah
saat manipulasi file.
<< gambar 9.3 hasil eksekusi file_3.py >>
Membaca Isi File dengan Cara Baris Per Baris
Jika pada contoh sebelumnya pembacaan file dilakukan sekaligus, pada contoh kali ini pembacaan
file akan dilakukan baris perbaris. Pembacaan file teks dengan membaca perbaris ini bisa dilakukan
dengan memakai pengulangan for. File ini diperlakukan layaknya list yang digunakan di
pengulangan for. Disini file dianggap sebagai list yang berisi elemen string.
listing : file_4.py
try:
sebuah_file = open("absen.txt", 'r')
print "nama file yang tadi dibuat : ", sebuah_file.name
print "mode pembacaan file : ", sebuah_file.mode
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
print "isi file : \n"
for line in sebuah_file:
print line
79
print "posisi pointer pada file : ", sebuah_file.tell()
sebuah_file.close()
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
except IOError, e:
print "proses gagal karena : ", e
Hasil yang diperlihatkan hampir sama dengan contoh sebelumnya hanya saja teknik pembacaannya
sedikit berbeda. Jika file berukuran besar, akan lebih bijak jika kita membacanya perbaris agar
ruang memori yang digunakan tidak banyak terpakai.
<< gambar 9.4 hasil eksekusi file_4.py >>
Mengatur Posisi Pointer File
Suatu saat kita ingin mengisi file di lokasi tertentu di sebuah file. Biasanya kita menambahkan file
di bagian akhir file, atau membaca file selalu dibagian awal file. Ada saatnya kita ingin membaca di
posisi ke 15 dari awal file, atau posisi -15 karakter dari pointer file. Di objek file terdapat method
yang dinamakan seek(). Method tersebut memiliki dua buah paramater yaitu jarak yang diinginkan
dan patokan jarak tersebut. Jika parameter kedua diisi oleh angka 0, berarti patokan berada di awal
file. Jika parameter kedua diisi oleh angka 1, berarti patokan berada di tempat pointer file berada.
Jika parameter kedua diisi oleh angka 2, maka patokan berada di bagian akhir file. Jika parameter
pertama diisi angka positif maka penentuan jarak akan dihitung ke sebelah kanan, jika diisi angka
negatif maka penentuan jarak akan dihitung ke sebelah kiri.
listing : file_5.py
try:
sebuah_file = open("absen.txt", 'rb')
print "nama file yang tadi dibuat : ", sebuah_file.name
print "mode pembacaan file : ", sebuah_file.mode
80
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
print "isi file : \n"
for line in sebuah_file:
print line
print "posisi pointer pada file : ", sebuah_file.tell()
print "kembali lagi ke awal : ", sebuah_file.seek(0, 0)
print "isi file : \n"
for line in sebuah_file:
print line
print "posisi pointer pada file : ", sebuah_file.tell()
sebuah_file.close()
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
except IOError, e:
print "proses gagal karena : ", e
Pada contoh diatas, pointer file dipindahkan kembali ke posisi awal. Dengan memberikan jarak 0,
dan menentukan patokan di awal file, maka posisi pointer file pindah ke bagian awal file. Dengan
demikian file bisa dibaca ulang untuk kedua kalinya.
<< gambar 9.5 hasil eksekusi file_5.py >>
81
Mengganti Nama File
Dalam manipulasi file, terdapat operasi seperti pengubahan nama file, memindahkan file, ataupun
menghapus file. Python sendiri menyediakan module os yang didalamnya terdapat fitur- fitur
tersebut. Sebagai contoh pertama kita akan mengganti nama file dari “absen.txt” ke “daftar-
hadir.txt”. Pertama kita harus meng-import modul os. Kemudian kita gunakan method rename().
Method tersebut memiliki dua parameter yaitu nama file yang akan diubah namanya, dan nama baru
yang diinginkan.
listing : file_6.py
import os
try:
os.rename('absen.txt', 'daftar-hadir.txt')
print "Nama file sudah diubah.."
except (IOError, OSError), e:
print "proses error karena : ", e
Setelah kode diatas dijalankan, coba lihat file yang sebelumnya “absen.txt” akan berubah menjadi
“daftar-hadir.txt”.
<< gambar 9.6 hasil eksekusi file_6.py >>
Menghapus File
Contoh lainnya adalah menghapus file. Kita bisa gunakan method remove() untuk menghapus file
yang diinginkan. Parameter yang dibutuhkan adalah nama file yang akan dihapus.
listing : file_7.py
82
import os
try:
os.remove('daftar-hadir.txt')
print "File sudah dihapus.."
except (IOError, OSError), e:
print "proses error karena : ", e
Kemudian jika file sudah dihapus, kita tidak dapat membuka file tersebut. Karena file tersebut sudah
hilang dari penyimpanan sekunder.
<< gambar 9.7 hasil eksekusi file_7.py >>
Untuk contoh – contoh lainnya Anda bisa membuka dokumentasi resmi Python, atau coba kunjungi
beberapa website yang ada di lampiran – 2.
83
10. Pengenalan Class
Membuat Class dan Object
Pemrograman berorientasi objek atau dalam bahasa inggris dikenal dengan Object Oriented
Programming (OOP), merupakan sebuah paradigma pemrograman dimana kita memodelkan
perangkat lunak kita dari berbagai kumpulan objek yang saling berinteraksi. Objek tersebut
memiliki karakteristik dan aksi. Di dalam OOP, karakteristik tersebut berupa variabel yang
dinamakan atribut. Kemudian aksi yang dimiliki objek tersebut berupa method yang menghasilkan
output atau cuma melakukan aksi saja tanpa output. Ada istilah lain juga yang menyebut aksi
sebuah objek sebagai perilaku atau behaviour. Objek itu sendiri mempunyai template yang
diistilahkan dengan kelas atau class. Sebuah kelas merupakan template bagi objek – objek yang
akan dibuat. Proses pembuatan objek baru dinamakan dengan instansiasi.
Ada beberapa hal yang harus diingat dalam membuat sebuah kelas. Pertama keyword class,
keyword ini digunakan untuk mendefinisikan sebuah kelas. Disusul dengan nama kelas yang
diinginkan dan tanda titik dua. Blok kode kelas tersebut ditulis setelah tanda titik dua tersebut, dan
seperti biasa diperlukan indentasi agar blok kode yang kita tulis masuk kedalam blok kode kelas.
Kedua adalah konstruktor, di Python konstruktor ditulis dengan sebuah function bernama
__init__() . Method dan function sebenarnya sama, hanya saja beda istilah pada paradigma OOP.
Method __init__() ini merupakan method yang akan selalu dieksekusi saat instansiasi objek.
Biasanya __init__() digunakan untuk mengisi variabel dengan nilai awal pada atribut – atribut yang
dimiliki objek. Ketiga adalah keyword self, keyword tersebut digunakan pada method yang akan
dinyatakan sebagai method dari kelas yang kita rancang. Keyword ini disertakan di parameter
pertama. Jika method tersebut tidak disertakan self pada method yang dimiliki kelas tersebut, akan
muncul error : “TypeError: nama_function() takes exactly n arguments (1 given)
” yang artinya method tersebut tidak bisa dipanggil oleh objek yang telah terinstansiasi.
Sebagai contoh disini kita akan membuat sebuah kelas bernama PersegiPanjang yang memiliki dua
atribut yaitu panjang dan lebar. Kelas ini memiliki lima method yang terdiri dari :
__init__(), konstruktor kelas persegi panjang
hitung_luas(), method untuk menghitung luas persegi panjang
hitung_keliling(), method untuk menghitung keliling persegi panjang
gambar_persegi_panjang(), menggambar persegi panjang yang direpresentasikan dengan
kumpulan bintang.
gambar_persegi_panjang_tanpa_isi(), menggambar persegi panjang tetapi hanya batas
luarnya saja, isinya tak digambar.
listing : class_1.py
84
class PersegiPanjang:
def __init__(self, panjang, lebar):
self.panjang = panjang
self.lebar = lebar
def hitung_luas(self):
return self.panjang * self.lebar
def hitung_keliling(self):
return (2*self.panjang) + (2*self.lebar)
def gambar_persegi_panjang(self):
for i in range(0, self.lebar):
for j in range(0, self.panjang):
print '*',
print ""
def gambar_persegi_panjang_tanpa_isi(self):
for i in range(0, self.lebar):
if i > 0 and i < self.lebar-1:
for j in range(0, self.panjang):
if j > 0 and j < self.panjang-1:
print ' ',
else:
print '*',
else:
for j in range(0, self.panjang):
print '*',
print ""
PersegiPanjangA = PersegiPanjang(20, 10)
PersegiPanjangB = PersegiPanjang(10, 5)
print "Panjang persegi panjang A :", PersegiPanjangA.panjang
print "Lebar persegi panjang A :", PersegiPanjangA.lebar
print "Luas persegi panjang A : ", PersegiPanjangA.hitung_luas()
print "Keliling persegi panjang A : ", PersegiPanjangA.hitung_keliling()
print "Menggambar Persegi Panjang A : "
PersegiPanjangA.gambar_persegi_panjang()
print "\nMenggambar Persegi Panjang A hanya tepinya saja : "
PersegiPanjangA.gambar_persegi_panjang_tanpa_isi()
print "\n"
print "Panjang persegi panjang B :", PersegiPanjangB.panjang
print "Lebar persegi panjang B :", PersegiPanjangB.lebar
print "Luas persegi panjang B : ", PersegiPanjangB.hitung_luas()
85
print "Keliling persegi panjang B : ", PersegiPanjangB.hitung_keliling()
PersegiPanjangB.gambar_persegi_panjang()
print "\nMenggambar Persegi Panjang B hanya tepinya saja : "
PersegiPanjangB.gambar_persegi_panjang_tanpa_isi()
Proses instansiasi dilakukan dengan menentukan nama objek yang diinginkan kemudian panggil
nama kelas yang akan diinginkan dan masukan parameter awal yang dibutuhkan. Kemudian saat
objek berhasil dibuat, kita bisa mengakses atribut dan method dari objek tersebut. Seperti yang kita
lakukan pada manipulasi file, kita bisa mengakses method close(), write(), dan read() serta
mengakses atribut close, name, dan mode. Dengan parameter berbeda namun karakterisitik sama,
persegi panjang yang dihasilkan jadi beragam.
Tujuan dari OOP ini sendiri, menghemat penulisan kode program yang kita buat. Tanpa OOP kita
harus membuat atribut untuk setiap objek. Dan penulisan kode program pun menjadi menumpuk,
Karena untuk method yang sama harus di tulis ulang.
<< gambar 10.1 hasil eksekusi class_1.py bagian ke - 1 >>
86
<< gambar 10.2 hasil eksekusi class_1.py bagian ke - 2 >>
Mengenal Built-in Function pada Class dan Object
Berikutnya kita akan mengenal beberapa built-in class attribute yang akan bisa digunakan saat kita
membuat kelas apapun. Built-in class attribute akan selalu menyertai kelas yang kita rancang.
Berikut beberapa atribut yang bisa Anda gunakan untuk mengakses informasi dari sebuah kelas :
__doc__, digunakan untuk mengakses dokumentasi yang terdapat pada kelas
__name__, digunakan untuk mengakses nama kelas
__dict__, digunakan untuk mendapatkan namespace dari kelas tersebut. Kalau pada objek
yang sudah diinstansiasi method ini akan mengeluarkan informasi tentang atribut yang
sudah terisi nilai
__module__, digunakan untuk mendapatkan informasi dimana lokasi modul yang
mendefinisikan kelas tersebut
__bases__, digunakan untuk melihat darimana kelas tersebut diwariskan. Pewarisan pada
OOP adalah memakai karakteristik suatu kelas pada kelas yang ingin memakai
karakteristik kelas yang mewariskannya.
Sebagai contoh ada beberapa built-in class attribute yang bisa diakses kelas dan objek hasil
instansiasi dan ada yang hanya bisa diakeses kelas.
87
listing : class_2.py
class PersegiPanjang:
'''
Sebuah kelas yang memodelkan persegi panjang.
Mempunyai dua atribut yaitu panjang dan lebar.
Bisa menghitung luas dan keliling.
Bisa juga menggambar persegi panjang sesuai atribut
'''
def __init__(self, panjang, lebar):
self.panjang = panjang
self.lebar = lebar
def hitung_luas(self):
return self.panjang * self.lebar
def hitung_keliling(self):
return (2*self.panjang) + (2*self.lebar)
def gambar_persegi_panjang(self):
for i in range(0, self.lebar):
for j in range(0, self.panjang):
print '*',
print ""
def gambar_persegi_panjang_tanpa_isi(self):
for i in range(0, self.lebar):
if i > 0 and i < self.lebar-1:
for j in range(0, self.panjang):
if j > 0 and j < self.panjang-1:
print '-',
else:
print '*',
else:
for j in range(0, self.panjang):
print '*',
print ""
PersegiPanjangA = PersegiPanjang(20, 10)
print PersegiPanjang.__doc__
print PersegiPanjang.__name__
print PersegiPanjang.__dict__
print PersegiPanjang.__module__
print PersegiPanjang.__bases__
88
print PersegiPanjangA.__doc__
print PersegiPanjangA.__dict__
print PersegiPanjangA.__module__
Pada contoh diatas, atribut __name__ dan __bases__ hanya bisa diakses oleh kelas. Sedangkan
objek hasil instansiasi tidak bisa mengaksesnya.
<< gambar 10.3 hasil class_2.py >>
Pembahasan mengenai OOP ini tidak bisa dibahas secara keseluruhan dalam satu bab. Ada banyak
hal yang harus diulas seperi inheritance, polymorphism, abstract, overriding, overload, dan lain –
lain.
11. Pengenalan Module
89
Module dan Packages
Module adalah istilah file yang berisi kode Python. Jadi dari awal sebenarnya kita sudah membuat
module Python. Hanya saja pada konsep module ini, kode Python yang akan digunakan berulang
akan dipisahkan dari file utama ke dalam file lain yang khusus menampung kode Python tersebut.
Di dalam module kita bisa menyimpan class, function, variabel, dan struktur data yang bisa
digunakan oleh program. Misal kita ingin membuat sebuah kode yang hanya berisi jenis – jenis
segitiga seperti segitiga sama kaki, segitiga sembarang, segitiga sama sisi, dan segitiga siku – siku.
Kenapa tidak dicampur saja dengan jenis bidang yang lain ? Hal ini dilakukan agar kita mudah
dalam mengelola kode Python yang kita tulis. Contoh lainnya misal kita menulis kode yang
berinteraksi dengan database dan kode untuk melakukan proses penulisan laporan secara terpisah.
Dalam hal ini module mempunyai kode Python yang reusable agar kode yang ditulis pada program
kita terduplikasi. Sedangkan file Python yang akan dijalankan dan memanggil function, class, atau
variabel dari kumpulan module yang dibuat berisi runnable code. Kode yang dieksekusi oleh
interpreter Python untuk menampilkan wujud dari program yang dibuat.
Kemudian module – module yang sudah ditulis bisa dikelompokan kedalam sebuah package.
Package ini sendiri berupa folder yang memiliki file __init__.py, agar folder tersebut dikenali
sebagai module. Di dalam package ini module – module memiliki tujuan dan fungsional yang
seragam. Misal pada contoh yang akan kita coba, terdapat sebuah package bidang, yang berisi
module bidang segitiga dan persegi. Di dalamnya terdapat file __init__.py yang bertugas untuk me-
load semua module yang ada di dalam package, segitiga.py yang berisi class segitiga, dan
persegi.py yang berisi class persegi. Di dalam file segitiga.py dan persegi.py masing – masing bisa
diisi berbagai jenis bidang yang sesuai nama module tersebut. Hanya saja untuk contoh kali ini
dibatasi kepada satu jenis bidang saja
Membuat Module – Module di dalam Packages
Setelah memahami konsep module, mari kita coba program yang agak banyak ini. Sebelumnya di
direktori tempat kita akan menulis program, terlebih dahulu buatlah sebuah folder baru bernama
bidang. Folder tersebut merupakan package yang akan menyimpan persegi.py, segitiga.py, dan
__init__.py.
listing : persegi.py
class Persegi:
def __init__(self, s):
self.sisi = s
def SetSisi(self, s):
self.sisi = s
def GetSisi(self):
return self.sisi
90
def HitungKeliling(self):
return 4 * self.sisi
def HitungLuas(self):
return self.sisi * self.sisi
Kode persegi.py diatas hanya bersegi class Persegi yang mempunyai atribut sisi dan method –
method-nya. Di dalam module ini kita bisa saja menulis kelas PersegiPanjang. Hal tersebut
memudahkan kita agar bidang yang jenisnya persegi tidak tercampur dengan bidang yang jenisnya
segitiga. Pastikan Anda menyimpan file persegi.py di dalam folder bidang.
listing : segitiga.py
import math
class Segitiga:
def __init__(self, a, t):
self.alas = a
self.tinggi = t
def SetAlas(self, a):
self.alas = a
def GetAlas(self):
return self.alas
def SetTinggi(self, t):
self.tinggi = t
def GetTinggi(self):
return self.tinggi
def GetSisiMiring(self):
return math.sqrt(self.alas**2 + self.tinggi**2)
def HitungKeliling(self, s):
return self.alas + self.tinggi + s
def HitungLuas(self):
return (self.alas * self.tinggi) / 2
Hampir sama dengan fungsi dari module persegi.py, hanya saja module segitiga.py akan diisi
berbagai jenis segitiga. Selain itu pada kode diatas kita memanggil module math karena saat nanti
module segitiga.py ini diload, kode yang memakai method – method pada math harus di load
juga dari module math. Pastikan module ini tersimpan di folder bidang.
91
listing : __init__.py
from segitiga import Segitiga
from persegi import Persegi
if __name__ == '__main__':
pass
Kemudian file yang mesti ada di dalam sebuah package adalah __init__.py. File tersebut berfungsi
untuk me-load isi module ke dalam memori agar isi module bisa digunakan di file yang berisi
runnable code. Pada kode diatas, terdapat sintaks : from segitiga import Segitiga. Keyword from
adalah keyword yang digunakan untuk menentukan package atau module mana yang akan kita
rujuk, sedangkan import digunakan untuk mengambil class, function atau variabel yang
didefinisikan di dalam module. Disana kita meng-import dua buah kelas yaitu Segitiga dan Persegi
dari dua module berbeda yaitu segitiga.py dan persegi.py. Sedangkan kode dibawahnya digunakan
jika file __init__.py ingin menjalankan perintah tertentu. Pastikan file ini disimpan di folder bidang.
memakai Module di File Utama
Sampai akhirnya kita tiba untuk menulis kode utama. Kode utama ini merupakan kode yang berisi
runnable code, dan memakai class yang sudah didefinisikan di module – module sebelumnya.
Dengan demikian kode program tidak akan menumpuk di file utama.
Jika Anda berhasil mengikuti petunjuk pada bab ini, module, packages dan file utama harus
mempunyai sususan seperti berikut :
<< gambar 12.1 struktur module packages bidang >>
listing : main.py
92
from bidang import Segitiga, Persegi
sgtgA = Segitiga(3, 9)
prsgA = Persegi(5)
print "Luas Segitiga A : ", sgtgA.HitungLuas()
print "Sisi Miring Segitiga A : ", sgtgA.GetSisiMiring()
print "Keliling Segitiga A : ", sgtgA.HitungKeliling(sgtgA.GetSisiMiring())
print "\n"
print "Luas Persegi A : ", prsgA.HitungLuas()
print "Keliling Segitiga A : ", prsgA.HitungKeliling()
Pada kode diatas kita meng-import kelas dari package bidang. Kemudian melakukan instansiasi dan
memberikan nilai sesuai yang kita inginkan. Kemudian kita akses method – method yang terdapat
pada kelas tersebut untuk mendapatkan informasi luas, dan keliling pada masing – masing bidang.
Jika berhasil maka kode yang akan dijalankan seperti berikut :
<< gambar 12.2 eksekusi main.py >>
93
Daftar Pustaka
Python Software Foundation Team. Python v2.7.2 Documentation 1990 – 2011. The Python
Software Foundation.
Downey, Allen, Jeffrey Elkner, dan Chris Meyers. How to Think Like a Computer Scientist :
Learning with Python. 2002. Green Tea Press : Wellesley, Massachusetts
Swaroop. A Byte of Python. 2005. IonLab : Bangalore, India
Craven, Paul Vincent. Introduction to Computer Science Using Python and Pygame. 2011.
Simpson College, Computer Science Department : Indianola, Iowa
94
Lampiran 1 – Teknologi yang memakai Python
Django
Sebuah web framework yang memiliki motto “The Web
Framework for Perfectionist with Deadline”. Django
merupakan salah satu megaframework yang sudah
memiliki template engine, object relational mapper,
session, security, pagination, logging, authentication,
caching, dan lain – lain.
Lebih lengkap kungjungi link berikut :
http://www.djangoproject.com
PyGame
PyGame adalah wrapper untuk Simple Direct Media
Library, sebuah library untuk memanipulasi grafis dan
media berupa audio dan video. Dengan PyGame Anda
bisa membuat game berbasis 2D. Kalaupun ingin
membuat game 3D dibutuhkan library lain untuk
mendukung pengolahan 3D
Fitur – fitur yang bisa didapatkan dari module – module
PyGame :
cdrom, mengelola cdrom dan pemutar suara
cursors, me-load gambar kursor, dan
menyertakan kursor standard
display, mengendalikan layar
draw, menggambar grafis sederhana pada
Surface
event, mengelola event dan antrian event
font, membuat dan memakai Truetype fonts
image, menyimpan dan me-load gambar
joystick, mengelola joystick
key, mengelola keyboard
mouse, mengelola mouse
movie, memainkan film bertipe mpeg
sndarray, memanipulasi suara dalam angka
surfarray, memanipulasi gambar dalam angka
time, mengendalikan waktu
transform, memperbesar, memutar, dan
membalik gambar
Bagi teman – teman yang ingin memakai Pygame
lebih lanjut bisa kunjungi link berikut :
http://www.pygame.org
95
Panda 3D
Panda 3D adalah 3D Engine, library dari kumpulan
fungsi – fungsi untuk 3D rendering dan pengembangan
game. Library-nya ditulis dengan C++. Untuk
pengembangan game dengan Panda3D, Anda harus
menulis dalam bahasa Python yang mengendalikan
library di Panda3D.
Panda3D mempunyai dukungan seperti : The Scene
Graph, Model dan Actor,Texturing, Shaders, Camera
Control, Sound, Interval, Task dan Event Handling, Text
dan Image Rendering, DirectGUI, Render Effect,
Collision Detection, dan lainnya
lebih lengkap kunjungi link berikut ini :
http://www.panda3d.org
SimpleCV
SimpleCV merupakan singkatan dari Simple Computer
Vision, merupakan framework python yang mudah
digunakan dan membungkus library computer vision
open source dan algoritma terkait untuk pemecahan
masalah.
Beberapa fitur yang didukung oleh SimpleCV antara
lain : membaca gambar, konversi gambar ke RGB,
konversi gambar ke HLS, konversi gambar ke HSV,
konversi gambar ke Gray, membuat gambar baru dalam
format bitmap, menyalin gambar, memperbesar gambar,
pencerminan gambar, memperhalus gambar, edge
detection, dan lain – lain.
Lebih lengkapnya checklink berikut ini :
http://www.simplecv.org
NLTK
Teknologi Natural Language Processing semakin hari
semakin maju. Sebagai contoh, banyak smartphones,
yang sudah mendukung pengenalan tulisan, kemudian
banyak mesin pencari yang mendukung penulisan teks
ta struktur, ada juga penerjemahan bahasa.
NLTK hadir sebagai salah satu tools yang ditulis dalam
Python untuk mendukung teknologi Natural Language
Processing. Beberapa fitur yang didukung oleh NLTK
antara lain : Language Processing, Text Corpora,
Processing Raw Text, Categorizing and Tagging Words,
Parsing text, Semantic Analysis, dan lain – lain.
Lebih lanjut cobe kunjungi link berikut :
http://www.nltk.org
Flask Flask merupakan micro web framework yang
mendukung untuk diintegrasikan dengan berbagai
96
library pendukung lainnya. Flask memerlukan WSGI
Toolkit yang dinamakan Weurkzeug dan Template
Engine Jinja2.
Flask memiliki fitur seperti : templating engine, testing
application, logging application error, debuggin
application error, configuration handling, signal,
pluggable view, extension, dan lain – lain.
Lebih lengkap kunjungi link berikut :
http://www.flask.org
97