Wednesday, 18 March 2015

3.2.String

String digunakan untuk merekam infomasi kumpulan/sebuah karakter. Tapi bukan hanya karakter abjat, hurup, tanda baca saja seperti yang ada di keyboard. Ada juga yang namanya “lists” dan “tuples” (padahal kulit dari python aja belum selesai, sekarang ada lists dan tuples? Selalu ada istilah baru. Mau jadi apa sih? Siap-siap aja ada sejuta istilah baru) yang termasuk kedalam string, tenang aja kalo sempet kita bahas, hehehe. Oh ya hampir lupa, jangan tutup dulu ya pyton shell nya dari sekarang, apabila kalian tutup/restart kalian harus mulai lagi dari awal, semua yang kita tulis akan disimpan dalam memory, dan bila kita tutup Shell python nya, maka semua yang ada dimemory juga terhapus. Kita mulai dengan contoh aja:
  • >>> tutu='Selamat'  
  • >>> tutu  
  • 'Selamat'
  • >>> a='pagi'  
  • >>> tutu+a  
  • 'Selamatpagi'
  • >>> spasi=' '   
  • >>> tutu+spasi+a   
  • 'Selamat pagi' 
  • >>> roro=tutu+spasi+a   
  • >>> roro   
  • 'Selamat pagi'   
  • >>>
Dan ya, harus menggunakan tanda ' diantara. Kalo tanya kenapa, saya juga tidak tahu kenapa harus begitu. Yang pasti tutu, a, spasi dan roro adalah nama dari string, dan “selamat pagi” adalah string dari roro.

Sekarang kita hitung banyaknya karakter setiap string, dengan menggunakan perintah len(). len() kependekan dari length dalam bahasa ingris.
  • >>> len(tutu)   
  • 7
  • >>> len(spasi)   
  • 1
  • >>> len(roro) 
  • 12
  • >>>
Mudah bukan? Ya saya tahu ada istilah-istilah yang sudah kalian ketahui tetapi kalian tidak tahu artinya, tenang aja. Tambah banyak kalian tidak tahu, kalian bertambah berbahagia lho. Nah sekarang kita coba yang lain nya (kebahagian kalian akan berkurang, karena kalian akan mengetahui sesuatu yang lain lagi). Bila kita mau tahu karakter awal, tengah, atau karakter yang mana pun, kita hanya perlu nama string-nya dan nomor urutan yang mau kita ambil, kita sudah tahu string roro ada 12 karakter, disini karater awal yaitu 's' bukanlah karater no.1, tapi karakter no.0. Ayo kita buktikan :
  • >>> roro[1] 
  • 'e'
  • >>> roro[0] 
  • 'S'
  • >>>
Karakter no.1 adalah 'e' dan karakter no.0 adalah 'S'. bagaimana kalau kita tulis dengan tanda – (minus) ? Kita test aja:
  • >>> roro[-1] 
  • 'i'
  • >>> roro[-2] 
  • 'g'
  • >>> roro[-3] 
  • 'a'
  • >>> roro[-4] 
  • 'p'
  • >>>
Ya, perhitungan ke belakang string. String juga bisa dipotong-potong, misalnya kita memerlukan karater yang ke 3 sampai ke 9 dari string roro (ingat karakter pertama adalah '0' (nol) ) :
  • >>> roro[2:8] 
  • 'lamat '
  • >>>
Pada contoh diatas, string roro akan dicetak di layar dari karater 2 (mulai dari 0) sampai karakter yang ke 7. mungkin kalian mengitung karakter 'lamat ' cuma ada 5 karakter, seharusnya ada 6 bukan? Karakter yang terakhir adalah 'spasi', spasi walaupun kosong tetapi tetap dihitung 1 karakter.
String roro tidak berubah, kita hanya memanipulasi data roro saja untuk dimunculkan dilayar.
  • >>> roro 
  • 'Selamat pagi'
  • >>>
Masi ada cara manipulasi string ini yaitu:
  • >>> roro[2:] 
  • 'lamat pagi'
  • >>> roro[:5] 
  • 'Selam'
  • >>>
Lanjut.... bagaimana bila string melakukan operasi matematika? Kita test:
  • >>> roro+' bumi' 
  • 'Selamat pagi bumi'
  • >>> roro*2 
  • 'Selamat pagiSelamat pagi'
Hm... ngetestnya jangan berlebihan ya? Masalahnya string bukan sebuah nomor, jadi operasi matematika kebanyakan error.

Kenapa string tidak berubah ketika kita melakukan manipulasi string tersebut? Karena string memiliki kekebalan terhadap serangan dari luar setelah string dibuat. Lalu bagaimana untuk mengubahnya? Jawabnya selalu tidak bisa, yang bisa kita lakukan adalah seperti ini:
  •      >>> roro 
  •      'Selamat pagi'
  •      >>> roro='Selamat Siang' 
  •      >>> roro 
  •      'Selamat Siang'
  •      >>>
(Nah itu bisa diganti) contoh diatas bukan diganti atau diubah, tetapi python membuat satu string lagi yang bernama roro yang baru, kemudian roro yang lama dihapus, bukan diganti. Ya hasilnya sama tapi yang diproses oleh python bukan diganti, tapi bikin baru dan yang lama dihapus. Kita buktikan kalau string tidak bisa diubah:
  •      >>> roro[0]='t' 
  •      Traceback (most recent call last):
  •         File "<pyshell#5>", line 1, in <module>
  •            roro[0]='t'
  •      TypeError: 'str' object does not support item assignment
  •      >>>
Apa yang terjadi? Kita mencoba untuk mengubah hurup pertama dari string roro dengan t. Untuk string-string yang dapat diubah seperti lists, dictionaries, dan set. Dan string-string yang tidak dapat diubah adalah numbers, string, dan tuples. (itu string katanya ga bisa diganti, koq yang atas bisa diganti? Maksud saya yang atas bukan string, tapi yang mirip string gitu, maap ya jadi membingungkan, tapi saya masih yakin masih pada bingung, biar jelas nanti kita ungkap semuanya, kalo diungkap semuanya pasti ngerti, masalahnya saya juga bingung lho).

Kita masuk ke list. List adalah seperti string tapi bukan (hahaha....). List adalah string yang dikembangkan... saya tidak tahu gimana teranginnya, langsung pada kasus aja:
  •      >>> popo=list(roro) 
  •      >>> popo 
  •      ['S', 'e', 'l', 'a', 'm', 'a', 't', ' ', 'S', 'i', 'a', 'n', 'g']
  •      >>>
Pada baris pertama saya buat list yang bernama popo dan saya isi dengan string roro.
Pada baris kedua saya cetak isi popo.
Hasilnya, string roro dipisahkan setiap individu karakter. (nah dapat dhe penjelasannya, padahal diatas saya tidak tahu bagaimana teranginnya). Yang dipisahkan oleh koma (,), tanda petik (') merupakan tanda isi dari indexnya.
Dengan kata lain index[0] adalah hurup S,
index[1] adalah hurup e
index[2] adalah hurup l, dsb.

Lalu bagaimana cara menggantinya? Mudah saja:
  •    >>> popo[1]='rr' 
  •      >>> popo 
  •      ['S', 'rr', 'l', 'a', 'm', 'a', 't', ' ', 'S', 'i', 'a', 'n', 'g']
  •      >>>
Ada lagi yang namanya bytearray, masi termasuk kategori string (tapi bukan string ya) yang kelakuannya lumayan aneh, mari kita lihat :
  •      >>> hoho=bytearray(b'tidur') 
  •      >>> hoho 
  •      bytearray(b'tidur')
  •      >>> hoho.extend(b'siang') 
  •      >>> hoho 
  •      bytearray(b'tidursiang')
  •      >>> hoho.decode() 
  •      'tidursiang'
  •      >>>
arraybyte bisa diubah hanya untuk text, dan text yang berukuran tidak lebih dari 8 bit. Oh ya syntax b' pada bytearray(b'tidur') ini diperlukan untuk python versi 3.x dan optional pada versi 2.x. Kenapa demikian? Saya juga tidak tahu.

Kembali lagi ke string, sekarang kita lihat string.find dan string.replace. Apa artinya string.find dan string.replace? String.find berarti kita akan menggunakan metode find yang ada di class string, dan string.replace adalah metode replace pada class string. Pasti masi belum ngerti, jadi gini string itu punya banyak metode yang bisa dipakai,misalnya find itu tadi.

Class merupakan Object Oriented Programming (OOP). Dengan class kita dapat menimpa metode dasar atau class dibawahnya. (susah nih neranginnya) pake contoh aja ya.

Didalam class string ada yang namanya metode find dan replace hanya bisa digunakan oleh string dan bukan hanya itu saja. Jadi string pada contoh-contoh diatas adalah salah satu metode dari class string yang namanya string juga, jadi 'string.string'.

Partai namanya String lalu didalam partai ada seksi yang namanya string juga, find, replace dll. Tiap seksi punya tugasnya sendiri-sendiri. Telen dulu aja ya. Tambah dijelasin pasti tambah bingung. 

kita buat string namanya 'yoyo' yang diisi/nilainya '123,456,789,00'

nilai 123,456,789,00 dikurung dengan tanda petik (') sehingga python membacanya satu string yang tidak terpisahkan oleh koma (,). Dalam python atau pun yang lainnya tanda koma bisa berarti pemisahan string, tapi dengan tanda petik(') diawal dan akhir string maka python membacanya suatu sesatuan dan bukan pemisahan.
  •    >>> yoyo='123,456,789,00' 
  •      >>> yoyo 
  •       '123,456,789,00'
  •      >>> yoyo.find('456') 
  •      4
  •      >>> yoyo.find('789') 
  •       8
  •       >>>
kita lihat index pada yoyo:
Yoyo
1
2
3
,
4
5
6
,
7
8
9
,
0
0
Index
0
1
2
3
4
5
6
7
8
9
10
11
12
13

Ketika kita mencari dengan menggunakan string.find (yoyo.find('456')) maka python menghasilkan angka 4 yang merupakan index dari string yoyo. Dan ketika kita yoyo.find('789') maka hasilnya adalah 8 yang merupakan index dari string yoyo.

Sekarang replace (ganti).
  •      >>> yoyo.replace('456','abc') 
  •      '123,abc,789,00'
  •      >>> yoyo 
  •      '123,456,789,00'
  •      >>>
Sekali lagi kita tidak mengubah string yoyo, tapi kita membuat string baru sebagai hasilnya. Metode string, atau string.string merupakan proses utama dari proses text pada python.

Sekarang kita coba string.split(). Apa itu? Split (pisah) merupakan salah satu metode dari class string, yang akan menghasilkan string baru yang dipisah-pisah:
  •      >>> yoyo.split (',') 
  •      ['123', '456', '789', '00']
  •      >>> 
lihat itu, dan ingat ini “string didalam tanda petik (') merupakan satu kesatuan string”,sehingga sekarang kita memiliki 4 string yang dipisahkan oleh koma (,).

string.upper adalah metode yang mengganti hurup kecil menjadi hurup kapital (besar).
  •      >>> lolo='Langit Biru Dengan Awan Putih' 
  •      >>> lolo.upper() 
  •      'LANGIT BIRU DENGAN AWAN PUTIH'
  •      >>>
sedikit lebih komplek:
  •      >>> '%s,roda,dan %s'%('lingkaran','mobil') 
  •      'lingkaran,roda,dan mobil'
  •      >>> '%s,roda,%s dan %s'%('lingkaran','mobil','somplak') 
  •      'lingkaran,roda,mobil dan somplak'
  •      >>> '%s,roda,%s%s'%('lingkaran','mobil','somplak') 
  •      'lingkaran,roda,mobilsomplak'
  •      >>> '%s,roda,%s %s'%('lingkaran','mobil','somplak') 
  •      'lingkaran,roda,mobil somplak'
Dapet tidak ide dari contoh diatas? Menarik bukan? (hehehe... )

sekarang kita akan menecek apakah suatu string itu angka apa hurup semua, untuk mengecek apakah string merupakan angka kita gunakan metode 'isdigit()'
  1.      >>> yoyo.isdigit() 
  2.      False
  3.      >>>
ternyata string yoyo bukan angka, karena yoyo terdapat karakter koma. Kalian bisa coba-coba dengan yang lainnya, yang menghasilakan output boolean (TRUE/FALSE).

  • string.isalnum() → True bila semua karakter string adalah angka, sisanya false. Hanya untuk string 8 bit.
  • string.isalpha() → True bila semua karakter string hanya alfabet. Hanya untuk string 8 bit.
  • string.isdigit() → True bila semua karakter string hanya angka. Hanya untuk string 8 bit.
  • string.islower() → True bila semua karakter hurup kecil. Hanya untuk string 8 bit.
  • string.isspace() → True bila hanya/semua spasi. Hanya untuk string 8 bit.
  • string.istitle() → True bila format kata/kalimat diawali dengan hurup besar. Hanya untuk string 8 bit.
  • string.isupper() → True bila semua karakter string hurup besar. Hanya untuk string 8 bit.

Sekarang kita masuk pada string.format (ini baru kulitnya string lho, jangan menyerah dulu ya, tambah menarik koq). Masuk dalam contoh dahulu:
  •      >>> '%s duren di %s sedang di%s'%('ada','atas lemari','belah') 
  •      'ada duren di atas lemari sedang dibelah'
  •      >>>
Kita liat contoh diatas, semua %s digantikan oleh string lain yang telah disiapkan di sisi kanan. Lalu bagaimana bila kita ingin penempatan string yang loncat-loncat?
  •    >>> '{1} duren di {0} sedang di{2}'.format('atas lemari','ada','belah') 
  •      'ada duren di atas lemari sedang dibelah'
  •      >>> '{} duren di {} sedang di{}'.format('atas lemari','ada','belah') 
  •      'atas lemari duren di ada sedang dibelah'
  •      >>>
Pertolangan bila kita lupa atau mencari sesuatu yang kita tidak ketahui pada string ataupun yang lainnya yaitu dengan perintah:
  •      >>> dir(yoyo) 
  •      ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
  •      >>>
Nah semua metode string yoyo keluar, tinggal cari tahu apa kegunaan dari itu semua di https://docs.python.org/3.4/library/index.html


Kalo males buka link diatas, tapi kita sudah tahu atau kira-kira tahu apa yang kita perlukan maka tinggal tulis help():
  •      >>> help(yoyo.isalpha) 
  •      Help on built-in function isalpha:

  •      isalpha(...) method of builtins.str instance
  •      S.isalpha() → bool
  •      Return True if all characters in S are alphabetic
  •      and there is at least one character in S, False otherwise.

  •      >>>
Untuk penulisan string yang tidak biasa seperti menggunakan garis baru atau akhir dari baris juga dapat dilakukan, caranya cukup mudah yaitu dengan menuliskan '\n' atau tabulasi '\t' , bila kita malas menuliskan '\n' kita bisa menggunakan 3X tanda double petik(“””):
  •      >>> gogo="""cari 
  •      makan 
  •      pada 
  •      siang 
  •      hari""" 
  •      >>> gogo 
  •      'cari\nmakan\npada\nsiang\nhari'
  •      >>> len(gogo) 
  •      26
  •      >>>
dapat kita lihat disini bahwa \n adalah akhir dari baris, '\n' dihitung 1 karakter, walaupun hasil yang dihasilkan masi dalam satu baris, tapi python dan program-program lain mengerti bila menemukan '\n' adalah akhir dari baris atau garis baru. Untuk membuktikan bahwa '\n' adalah 1 karakter kita cek dengan perintah 'ord()'
  •      >>> ord('\n') 
  •      10
  •      >>>
(apa yang dibuktikan sih Hasilnya 10?) 10 itu adalah nilai dari akhir baris pada ASCII. Bisa kita lihat pada tabel di http://en.wikipedia.org/wiki/ASCII


Bin
Oct
Dec
Hex
Abbr
Print form[a]
Esccode[c]
Name
000 0000
000
0
00
NUL
000 0001
001
1
01
SOH


000 0010
002
2
02
STX


000 0011
003
3
03
ETX


000 0100
004
4
04
EOT


000 0101
005
5
05
ENQ


000 0110
006
6
06
ACK


000 0111
007
7
07
BEL
000 1000
010
8
08
BS
000 1001
011
9
09
HT
000 1010
012
10
0A
LF

Kita lihat pada kolom Dec (decimal) warna kuning dan baris yang ke 11 warna biru, escape code nya '\n'.

No comments:

Post a Comment