Tampilkan postingan dengan label debugging. Tampilkan semua postingan
Tampilkan postingan dengan label debugging. Tampilkan semua postingan

Rabu, 26 Januari 2022

Periksa Format Nomor Telepon dengan Python

Salah satu soal latihan coding python dari buku adalah memeriksa format nomor telepon apakah sudah sesuai atau belum. Caranya : tentukan dulu format no hp yang betul.. salah satu contoh yang betul: (081)890-34578. 

Dari nomor di atas, pada indeks 0 ada "(", indeks 4 ada ")" dan indeks 8 ada "-". itu yang perlu diperiksa. Pada contoh di buku caranya begini: 


tapi ingat, contoh bisa salah ketik (typo atau teks editornya nggak betul). Sesudah betulkan tanda kurung dll, ternyata masih nggak selesai selesai runningnya.. kenapa ya?

Selain syntax yang error, kadang looping pada syntaxnya belum betul. Kalau ikutin contoh di atas, ketika di run nggak akan selesai karena terus looping. Kenapa? karena sesudah perindah if nggak ada perintah penambahan variabel position, jadi position nggak akan nambah. Seharusnya pada perintah if sesudah valid= False, ada position = position +1, kalau nggak akan looping tanpa henti. Ini script yang sudah dibetulkan: 

pos+=1 sama dengan pos= pos+1 (lumayan irit ketikan). Itu debugging hari ini..

Sabtu, 24 April 2021

Tips Debugging: Kasus: Memeriksa Palindrome Lewat Fungsi Dalam Bahasa Python (Belajar Komputer)

Ada beberapa tips yang bermanfaat utnk memeriksa program yang salah (debugging) antara lain: 

1. Biasanya bugs ada pada: 

  • salah urutan memasukkan data pada fungsi
  • salah ketik (huruf kecil dan besar, strip dll) 
  • variabel awal nggak diproses. 
  • perintah== dan = yang berbeda fungsi
  • antara membandingkan kedua list atau membandingkan objek dalam list L1==L2 dan id(L1) dan id(L2)
  •  Pengaruh built in function
  • pengaruh () pada objek yang akan diproses.

Cek nama variabel atau kebiasaan lain yang sering kamu lakukan. 

2. Analisa kenapa program yang dihasilkan seperti itu

3. Bugs datang pada tempat yang tidak terduga

4. Membuat dokumentasi yang rapi dan menjelaskan pada orang lain

5. Periksa satu persatu kode, jangan baca commentnya saja

6. Kalau sudah jenuh, tinggalkan dulu- usahakan kerjakan pada waktu awal agar kode tetap selesai pada waktunya.

Contoh: 

Kode memeriksa palindrome lewat fungsi. Fungsi di bawah ini dibuat untuk memeriksa apakah list palindrom (x) sudah betul (dalam def isPal(x)). Catatan: fungsi temp.reverse hanya bekerja pada list, bukan pada string. 

Ketika di run, kode ini seperti tidak ada kesalahan padahal masih ada. Misalnya ketika kita memasukkan input bukan palindrom yang sederhana yaitu a , b.  ternyata gagal. 

Dari mana kita harus  memulai debugging? 

Coba pakai metoda bisection search, cari kesalahan dari bagian tengah. Kita cek def silly. Bagian tengah: if isPal(result): (ini perintah singkat dari if isPal(result) = True, kebalikan dari if not isPal(result): ).  Kalau mau lihat result yang dibuat def isPal, kita bisa pakai perintah print(result) setelah element di append. Sekarang coba run lagi. 

ternyata jawaban dari [a,b] masih 'yes', berarti kesalahan mungkin terjadi pada kode di atasnya.

Kita cek def isPal.  Sesudah dibalik, kita lihat apakah kode usdah benar. di bawah if temp==x kita tambahkan print(temp, x).  ternyata kode nggak bisa dibalik, nilai temp dan x masih sama. Nah mungkin masalahnya di perintah temp.reverse. Perintah ini mengerjakan reverse tapi tidak mengubah atau atau memproses data yang diinginkan. (biasanya pada python memang harus menggunakan ()).Lihat di : https://www.geeksforgeeks.org/is-python-call-by-reference-or-call-by-value/

Ketika kita pakai temp.reverse(), ternyata temp dan x jadi berubah keduanya (harusnya x nggak berubah).  Jadi temp harus dikopi dari x agar x nya tidak berubah, kalau bukan copy, list temp dan x dianggap 1 list dan langsung berubah ketika salah satu dirubah. sehingga temp= x[:]. 

Nah mestinya kodenya sudah benar (kalau nggak ada salah ketik atau bugs di komputer. 

Cara lain memeriksa Palindrome: https://www.geeksforgeeks.org/python-program-check-string-palindrome-not/

Referensi: 

John V. Guttag, Introduction to Computation and Programming Using Python with Application to Understanding Data, chapter 6, testing & debugging

Kamis, 04 Februari 2021

Typo in Count Letter Coding in examples (Python For Every One Cay Horstmann)

A simple program that counts the number of times each letter of the English alphabet occurs. Make your own file in *.txt. There are 26 letters of the alphabet for which we must maintain a count, we can use a list of 26 counters represented by integer values.
letterCounts = [0] * 26 # Create a list with 26 elements initialized to 0.
 

The number of occurrences for letter "A" will be maintained in counts[0], the count for
letter "B" in counts[1] and so on all the way through counts[25] for letter "Z".

Use ord function. By subtracting the code for the letter A, one obtains a value between 0 and 25 that can be used as an index to the letterCounts list:
 

code = ord(char) - ord("A")
letterCounts[code] = letterCounts[code] + 1
 

Note that all lowercase letters must be converted to uppercase before they are
counted. This is the program: 


Well it coudn'twork.... We have to add one lines like this: 


Input file read should be written twice or the code would only read the first letter.