The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.

Python : Belajar Pemrograman Python Dasar

Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by permadhi, 2020-03-13 20:55:12

Python : Belajar Pemrograman Python Dasar

Python : Belajar Pemrograman Python Dasar

Keywords: python,belajar,pemrograman,dasar

45

<< gambar 6.4 hasil eksekusi strukdat_4.py >>

Menghapus Isi List, Tuple, dan Dictionary

Tidak lengkap rasanya bila dalam sebuah informasi ada yang tidak dapat dihapus. Terkadang ada
sebuah data yang tidak Anda butuhkan dan ingin Anda hilangkan dari kumpulan data yang dimiliki.
Misal dalam sebuah list Anda ingin menghapus salah satu elemen. Atau di dictionary, Anda ingin
menghilangkan salah satu key dari dictionary.tersebut. Di python sendiri penghapusan salah satu
elemen dapat dilakukan di list dan dictionary. Sedangkan tuple tidak mendukung penghapusan
elemen. Jika kita lakukan penghapusan pada salah satu elemen di tuple, maka akan muncul pesan
error : “TypeError: 'tuple' object doesn't support item deletion”. Pada list Anda tinggal menunjuk
salah satu elemennya dengan sebuah angka dari 0 sampai panjang list tersebut dikurangi satu
dengan diapit tanda “[“ dan “]”. Sedangkan pada dictionary Anda tunjuk salah satu key yang akan
dihapus dari dictionary. Berikut adalah contoh penghapusan salah satu elemen pada list dan
dictionary.
listing : strukdat_5.py

# cara mendefinisikan list
sebuah_list = ['Zorin OS',

46

'Ubuntu',
'FreeBSD',
'NetBSD',
'OpenBSD',
'Backtrack',
'Fedora',
'Slackware']

# cara mendefinisikan tuple
sebuah_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

# cara mendefinisikan dictionary
sebuah_dictionary = {'nama':'Wiro Sableng',

'prodi':'ilmu komputer',
'email':'wirosableng@localhost',
'website':'http://www.sitampanggarang.com'
}

# cara delete sebuah elemen :
print "cara delete sebuah elemen : "
print "\n"

print sebuah_list
del sebuah_list[0]
print sebuah_list
print "\n"

print sebuah_tuple
# tuple tidak mendukung proses penghapusan elemen :D.(coba hilangkan tanda '#' disampingnya)
#del sebuah_tuple[8]
print sebuah_tuple
print "\n"

print sebuah_dictionary
del sebuah_dictionary['website']
print sebuah_dictionary
print "\n\n"

Kode diatas jika dieksekusi akan muncul tampilan seperti berikut :

47

<< gambar 6.5 hasil eksekusi strukdat_5.py >>

Menghapus List, Tuple, dan Dictionary

Pada contoh sebelumnya Anda hanya menghapus salah satu elemen. Lalu bagaimanakah jika ingin
menghapus keseluruhan struktur data sehingga struktur data tersebut terhapus dari memory
seluruhnya ?. Di Python dengan menggunakan perintah del pada sebuah struktur data maka struktur
data tersebut akan dihapus sepenuhnya dari memory. Hal ini berlaku juga bagi variabel dan objek
yang didefinisikan oleh programmer. Dengan hilangnya dari memory maka struktur data yang telah
dihapus tidak dapat digunakan lagi oleh program yang Anda bangun.
list : strukdat_6.py

# cara mendefinisikan list
sebuah_list = ['Zorin OS',

'Ubuntu',
'FreeBSD',
'NetBSD',
'OpenBSD',
'Backtrack',
'Fedora',
'Slackware']
# cara mendefinisikan tuple

48

sebuah_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

# cara mendefinisikan dictionary
sebuah_dictionary = {'nama':'Wiro Sableng',

'prodi':'ilmu komputer',
'email':'wirosableng@localhost',
'website':'http://www.sitampanggarang.com'
}

# cara update sebuah elemen :
print "cara delete sebuah elemen : "
print "\n"

print sebuah_list
del sebuah_list
#print sebuah_list
print "\n"

print sebuah_tuple
del sebuah_tuple
#print sebuah_tuple
print "\n"

print sebuah_dictionary
del sebuah_dictionary
#print sebuah_dictionary
print "\n\n"

Cobalah hapus tanda “#” pada baris perintah print di bawah perintah del. Cobalah satu persatu dan
amatilah apa yang terjadi. Jika kita coba pada print sebuah_list yang berada dibawah del
sebuah_list. Maka akan muncul pesan error : “NameError : name 'sebuah_list' is not defined”

<< gambar 6.6 hasil eksekusi strukdat_6.py >>

49

Menggunakan Built-in Function pada List, Tuple, dan Dictionary

Apakah fitur – fitur manipulasi list, tuple, dan dictionary hanya terbatas pada hapus, tambah dan
ubah ?. Python menyediakan beberapa fitur dasar lainnya yang dapat digunakan untuk proses
mencari nilai maksimum dan minimum, menghitung panjang, membandingkan dua buah struktur
data yang sejenis, bahkan mengubah struktur data dari list ke tuple atau sebaliknya.

Untuk mencari nilai maksimum pada list, tuple, atau dictionary digunakan function max(),
sedangkan untuk mencari nilai minimum digunakan function min(). Untuk perbandingan dua buah
struktur data sejenis, misal list dengan list, digunakanlah function cmp(). Function cmp() ini akan
menghasilkan tiga nilai yaitu -1 jika list pertama kurang dari list kedua, 0 jika kedua list sama, dan 1
jika list pertama lebih besar dari list kedua. Kemudian untuk mencari jumlah elemen yang berada
pada struktur data tersebut digunakan function len(). Dan terdapat juga untuk konversi tipe struktur
data. Tapi fitur ini hanya dapat digunakan pada list dan tuple. Dictionary tidak mendukung proses
konversi. Jadi hanya pengubahan dari list ke tuple dan sebaliknya. Untuk pengubahan dari list ke
tuple digunakan function tuple() sedangkan untuk pengubahan dari tuple ke list digunakan function
list().

Agar lebih paham cobalah sedikit source code tentang penggunaan built-in function yang digunakan
untuk manipulasi list, tuple, dan dictionary.

listing : strukdat_7.py

# cara mendefinisikan list
sebuah_list = ['Zorin OS',

'Ubuntu',
'FreeBSD',
'NetBSD',
'OpenBSD',
'Backtrack',
'Fedora',
'Slackware']

# cara mendefinisikan tuple
sebuah_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

# cara mendefinisikan dictionary
sebuah_dictionary = {'nama':'Wiro Sableng',

'prodi':'ilmu komputer',
'email':'wirosableng@localhost',
'website':'http://www.sitampanggarang.com'
}

50

# menambahkan elemen baru
print "menambahkan elemen baru : \n"
print sebuah_list
list_baru = sebuah_list + ['PC Linux OS', 'Blankon', 'IGOS', 'OpenSUSE']
print list_baru
print "\n"

print sebuah_tuple
tuple_baru = sebuah_tuple
print tuple_baru
print "\n"

print sebuah_dictionary
dictionary_baru = {'telp':'022-12345678', 'alamat':'Bandung, Jabar'}
print sebuah_dictionary
print "\n\n"

# membandingkan yang lama dengan yang baru
print "membandingkan yang lama dengan yang baru : \n"
print "sebuah_list banding list_baru : ", cmp(sebuah_list, list_baru)
print "sebuah_tuple banding tuple_baru : ", cmp(sebuah_tuple, tuple_baru)
print "sebuah_dictionary banding dictionary_baru : ", cmp(sebuah_dictionary, dictionary_baru)

print "\n\n"

# mengetahui panjang list, tuple, dan dictionary
print "mengetahui panjang list, tuple, dan dictionary : \n"
print "panjang sebuah_list : ", len(sebuah_list)
print "panjang sebuah_tuple : ", len(sebuah_tuple)
print "panjang sebuah_dictionary : ", len(sebuah_dictionary)

print "\n\n"

# mengubah list, tuple, dictionary menjadi string
print "mengubah list, tuple, dictionary menjadi string : \n"
print str(sebuah_list), ' memiliki panjang karakter : ', len(str(sebuah_list))
print str(sebuah_tuple), ' memiliki panjang karakter : ', len(str(sebuah_tuple))
print str(sebuah_dictionary), ' memiliki panjang karakter : ', len(str(sebuah_dictionary))

# mencari nilai max dan min
print "mencari nilai max dan min : \n"
print "coba periksa sebuah_list :"
print "max : ", max(sebuah_list)
print "min : ", min(sebuah_list)
print "\n"
print "coba periksa sebuah_tuple :"
print "max : ", max(sebuah_tuple)
print "min : ", min(sebuah_tuple)
print "\n"
print "coba periksa sebuah_dictionary :"

51

print "max : ", max(sebuah_dictionary)
print "min : ", min(sebuah_dictionary)
print "\n"

# mengubah list ke tuple dan sebaliknya
print "mengubah list ke tuple : "
print "semula : ", sebuah_list
print "menjadi : ", tuple(sebuah_list)
print "\n"
print "mengubah tuple ke list : "
print "semula : ", sebuah_tuple
print "menjadi : ", list(sebuah_tuple)

Dengan adanya built-in function tersebut pekerjaan Anda sudah dimudahkan oleh Python dalam
memanipulasi struktur data yang telah Anda definisikan sebelumnya. Berikut adalah salah satu
contoh hasil operasi dengan built function dari kode diatas.

<< gambar 6.7 hasil eksekusi strukdat_7.py >>

52

7. Membuat Function

Pengenalan Function Tanpa “return”

Pada saat membuat program terkadang kita menyalin blok kode yang sama di baris berikutnya,
misal untuk mencetak sebuah biodata kita salin kembali kemudian ganti nilai – nilainya untuk
menampilkan biodata tersebut. Apakah harus menyalin blok kode di setiap bagian kode yang
membutuhkan kode tersebut ???. Waktu dulu kuliah Algoritma dan Pemrograman I, ketika
mempelajari pemrograman pertama kalinya, baris kode yang sama dipakai berulang – ulang untuk
mengeluarkan hasil tertentu. Tapi jadi tidak efisien, karena ukuran file program yang ditulis cukup
besar. Oleh karena itu hampir di setiap bahasa pemrograman terdapat fitur yang dinamakan
function. Nama lainnya method, sub routine, atau fungsi. Function ini berguna untuk penggunaan
kembali blok kode yang akan digunakan di baris kode lain. Sekali tulis tinggal panggil.

Function ini jelas beda dengan built-in function yang ada di Python. Built-in function sendiri adalah
function yang telah dibuatkan oleh pengembang bahasa pemrograman Python. Sedangkan function
dibuat oleh programmer yang menggunakan bahasa pemrograman Python, atau istilah lainnya user-
defined function.

Di Python untuk membuat function digunakan keyword def. Kemudian diikuti nama function yang
diinginkan lalu parameter yang dibutuhkan dengan diawali tanda “(“ dan “)”.Untuk membuka
function dimulai dengan tanda “:”. Tidak seperti di C, Java, atau PHP yang diawali dengan tanda
“{“ dan diakhiri “}” untuk membuka sebuah function. Lalu tutupnya ? Seperti dijelaskan diawal di
Python sendiri digunakan indentasi untuk menentukan apakah baris kode tersebut milik sebuah
function, if, atau pengulangan. Jadi jika Anda ingin menuliskan kode untuk function yang Anda
buat. Harus ada jarak satu indentasi agar kode tersebut dianggap sebagai kode dari function yang
Anda tulis. Kemudian Anda dapat menambahkan keyword return jika function yang Anda tulis
ingin mengembalikan nilai keluaran.

Berikut ada contoh tentang pembuatan function yang memiliki parameter dan tidak memiliki
parameter. Penggunaan return digunakan pada contoh berikutnya :

listing : fungsi_1.py

def fungsi_tanpa_parameter():
for i in range(1, 5):
print "looping ke - ", i

def fungsi_berparameter(batas_akhir):
for i in range(1, batas_akhir):
print "looping ke - ", i

53

print " contoh penggunaan fungsi tanpa parameter : "
print "hasil : ", fungsi_tanpa_parameter()

print "\n\n"

print " contoh penggunaan fungsi berparameter : "
print "hasil : ", fungsi_berparameter(10)

Sebuah function jika dipanggil langsung nilai keluarannya tidak akan dicetak. Tetapi jika dipanggil
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 Menggunakan “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 menggunakan 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 menggunakan keyword argument. Contoh yang tidak menggunakan
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="[email protected]",
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 menggunakan 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 menggunakan kondisional biasa yang menggunakan if untuk mencegah error ?
Pertama Anda harus mencari cara untuk menangkap nilai – nilai yang error, misal ketika membuka
file Anda harus menggunakan method – method yang ada pada file untuk mengetahui error atau
tidak. Kedua dengan menggunakan 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
2 StopIteration Menangani semua exception
3 SystemExit
4 StandardError Exception ini muncul ketika method next() tidak
5 ArithmeticError menunjuk ke objek apapun saat iterasi

OverflowError Exception ini muncul ketika sys.exit() dipanggil
6
Exception untuk menangani semua built-in
7 FloatingPointError exception kecuali StopIteration dan SystemExit

8 ZeroDivisionError Exception untuk menangani error saat perhitungan
10 AssertionError angka

11 AttributeError Exception ini muncul ketika perhitungan angka
12 EOFError melebihi batas maksimum dari tipe angka yang
dihitung

Exception ini muncul ketika terdapat kegagalan
pada perhitungan angka bertipe float

Exception ini muncul jika ada pembagian atau
modulus oleh 0 terhadap angka tipe apapun

Exception ini muncul ketika terjadi kegagalan pada
saat perintah assert dijalankan

Exception ini muncul ketika gagal menunjuk atribut
dari suatu objek

Exception ini muncul ketika tidak ada input saat

64

13 ImportError menggunakan function raw_input() atau input dan
KeyboardInterrupt telah mencapai bagian akhir file saat pembacaan
file.
14
Exception ini muncul ketika gagal saat
15 LookupError menggunakan import
16 IndexError
17 KeyError Exception ini muncul ketika user meng-interrupt
eksekusi program, biasanya ketika menekan
NameError kombinasi ctrl + c
18
Exception muncul ketika gagal pada saat proses look
UnboundLocalError up
19
Exception ini muncul ketika tidak ada indeks yang
20 EnvironmentError dituju pada struktur data seperti list atau tuple
IOError
Exception ini muncul ketika tidak ada key yang
21 dituju pada dictionary

22 OSError Exception ini muncul ketika variabel tidak
23 SyntaxError ditemukan pada lingkup lokal di suatu function dan
24 IndentationError kondisional atau pada lingkup global

SystemError Exception ini muncul ketika mencoba mengakses
25 variabel lokal di function atau method tapi belum
ada nilainya
26 TypeError
27 ValueError Exception in muncul ketika terjadi kegagalan diluar
28 RuntimeError lingkup Python

NotImplementedEror Exception in muncul ketika proses input/output
29 gagal, misal saat menggunakan print atau saat
membuka file

Exception ini muncul ketika terjadi kegagalan pada
sistem operasi yang digunakan

Exception ini muncul ketika terjadi kesalahan pada
penggunaan sintaks Python

Exception ini muncul ketika indentasi pada blok
kode tidak sesuai penggunaannya.

Exception ini muncul ketika terdapat masalah
internal pada interpreter, saat error ini muncul
interpreter tidak akan keluar

Exception ini muncul jika ada kesalahan tipe data
saat proses perhitungan, misal huruf dibagi angka

Exception ini muncul ketika argumen yang tidak
sesuai diterima oleh builtin function

Exception ini muncul ketika terjadi kesalahan yang
tidak masuk kategori manapun

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':'[email protected]'}
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 menggunakan baris except yang berbeda Anda dapat menangani error yang berbeda sesuai
kebutuhan Anda.

70

<< gambar 8.5 hasil eksekusi exception_5.py >>

Menggunakan 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 >>

Menggunakan “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 menggunakan 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 menggunakan 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

2w ini secara default dipakai untuk manipulasi
3a file
4b
5+ Membuka file dan hanya untuk penulisan
saja. Jika file yang dibuka sudah ada dan
Membuat File Baru menggunakan mode 'w', maka file tersebut
akan ditimpa. Jika file tidak ada maka akan
dibuatkan file baru.

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.

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

Mode ini ditambahkan kedalam mode r, w, a.
 r+ : baca dan tulis
 w+ : tulis dan baca
 a+ : tambah dan baca

Agar lebih paham kita akan mencoba membuat sebuah file txt. Pertama kita biasakan cegah error
dengan menggunakan 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 menggunakan 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
menggunakan 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 menggunakan 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 menggunakan 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 menggunakan 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 menggunakan karakteristik suatu kelas pada kelas yang ingin menggunakan
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 menggunakan 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.

Menggunakan Module di File Utama

Sampai akhirnya kita tiba untuk menulis kode utama. Kode utama ini merupakan kode yang berisi
runnable code, dan menggunakan 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 Menggunakan Python

Django Sebuah web framework yang memiliki motto “The Web
PyGame 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 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 menggunakan 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 menggunakan Pygame
lebih lanjut bisa kunjungi link berikut :
http://www.pygame.org


Click to View FlipBook Version