0% menganggap dokumen ini bermanfaat (0 suara)
3 tayangan

Python

Dokumen ini memberikan pengantar tentang Python, termasuk definisi dasar seperti argument, bilangan kompleks, class, dan konsep pemrograman seperti duck typing dan dynamic typing. Python adalah bahasa pemrograman multifungsi yang dirilis pada tahun 1991, dirancang untuk kemudahan penggunaan dan readability, serta memiliki ekosistem yang kaya dengan berbagai pustaka dan modul. Selain itu, dokumen ini juga mencakup instalasi Python, penggunaan IDE, dan pengenalan layanan seperti IBM Watson Studio dan Google Colab untuk pengembangan data science.

Diunggah oleh

gunturg1311
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
3 tayangan

Python

Dokumen ini memberikan pengantar tentang Python, termasuk definisi dasar seperti argument, bilangan kompleks, class, dan konsep pemrograman seperti duck typing dan dynamic typing. Python adalah bahasa pemrograman multifungsi yang dirilis pada tahun 1991, dirancang untuk kemudahan penggunaan dan readability, serta memiliki ekosistem yang kaya dengan berbagai pustaka dan modul. Selain itu, dokumen ini juga mencakup instalasi Python, penggunaan IDE, dan pengenalan layanan seperti IBM Watson Studio dan Google Colab untuk pengembangan data science.

Diunggah oleh

gunturg1311
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 138

A

Argument

Nilai yang diteruskan ke fungsi (atau metode) saat memanggil


fungsi.

Bilangan Kompleks

Bilangan yang dituliskan dalam formulasi x + yj, yakni bagian x


adalah bilangan real dan y adalah bilangan imajiner.

Class

Template untuk membuat objek yang ditentukan pengguna.

Class Variable

Variabel yang ditentukan di kelas dan dimaksudkan untuk


dimodifikasi hanya di tingkat kelas.

Dictionary

Array asosiatif, tempat kunci arbitrer yang dipetakan ke nilai.

Duck Typing

Sebuah konsep, tipe atau kelas dari sebuah objek tidak lebih
penting daripada metode yang menjadi perilakunya.

Dynamic Typing

Konsep dalam bahasa pemrograman yang hanya mengetahui tipe


variabel saat program berjalan dan dilakukan assignment.

E
Expression

Syntax yang dapat dievaluasi ke beberapa nilai.

Function

Serangkaian pernyataan yang mengembalikan beberapa nilai ke


pemanggil.

Immutable

Object dengan nilai yang tetap (tidak bisa diubah).

Inheritance

Mekanisme pewarisan, di mana satu kelas bisa mewarisi metode


dan properti dari kelas lain.

List

List atau urutan adalah tipe data bawaan pada Python yang
digunakan untuk menyimpan kumpulan data atau item. List ditulis
menggunakan kurung siku.

Method

Fungsi yang didefinisikan di dalam Class.

Mutable

Object dengan nilai yang bisa diubah.


P

Parameter

Entitas bernama dalam definisi fungsi (atau metode) yang


menentukan argumen yang dapat diterima oleh fungsi.

Set

Kumpulan item bersifat unik dan tanpa urutan (unordered


collection). Didefinisikan dengan kurawal dan elemennya
dipisahkan dengan koma.

Pengenalan Python
Python adalah bahasa pemrograman multifungsi yang dibuat oleh
Guido van Rossum dan dirilis pada tahun 1991. GvR, begitu ia biasa
disebut di komunitas Python, menciptakan Python untuk menjadi
interpreter yang memiliki kemampuan penanganan kesalahan
(exception handling) dan mengutamakan sintaksis yang mudah
dibaca serta dimengerti (readability). Didesain untuk
memudahkan dalam prototyping, Python menjadi bahasa yang
sangat mudah dipahami dan fleksibel.
Python juga memilih untuk menggunakan indentasi untuk
mengelompokkan blok kode, berbeda dengan beberapa bahasa lain
yang menggunakan simbol tertentu, misalnya kurung kurawal, atau
sintaksis begin-end. Sehingga secara visual pun, blok kode Python
didesain untuk mudah dipahami. Salah satu yang paling dikenal
adalah, penggunaan titik koma atau semicolon (;) tidak wajib di
Python dan penggunaan semicolon cenderung dianggap bukan cara
khas Python (non-pythonic way), meskipun ia tetap dapat
digunakan, misalnya untuk memisahkan dua statement dalam baris
yang sama.

1. print("Hello World"); print("Welcome to Python")

Python juga memilih untuk mengadopsi dynamic typing secara


opsional, yakni variabel yang dibuat tidak akan diketahui tipenya
hingga ia dipanggil pertama kali atau dieksekusi, tidak perlu
deklarasi variabel (meskipun dimungkinkan), dan memungkinkan
tipe data berubah dalam proses eksekusi program. Sejak Python
versi 3.6, sudah tersedia pilihan untuk static typing.

Python pun terus berkembang dalam penggunaannya, sehingga


fitur-fitur baru dibutuhkan untuk dikembangkan. Versi 2.0 dirilis
Oktober 2000 dengan beberapa pengembangan fitur
termasuk Garbage Collector dan Memory Management yang
juga menjadi fitur pada beberapa bahasa pemrograman modern
lainnya, di antaranya Java dan C#.
Python 3.0 adalah versi perubahan mayor yang dirilis pada
Desember 2008, yang didesain sebagai versi yang tidak backward-
compatible dengan versi-versi sebelumnya. Beberapa
sintaksis/statement yang sebelumnya berjalan di versi 2.x, kini
tidak lagi berjalan. Semua hal ini didasarkan pada keinginan bahasa
Python yang kembali ke “inti”, yakni readable, consistent &
explicit. Contohnya, fungsi print yang sebelumnya adalah
statement di python 2.x, menjadi function di python 3.x.
Lebih jauh tentang Python 3.0 kunjungi tautan berikut:
http://docs.python.org/release/3.0.1/whatsnew/3.0.html.
Versi terbaru Python pada saat pembaruan modul ini adalah 3.8
yang dirilis pada 14 Oktober 2019. Pada saat tulisan ini dibuat,
Python 3.9 sedang dikembangkan dan berstatus 3.9.0 alpha 1.
Sejarah / Overview

Saat ini, Python dikelola oleh lembaga non-komersial Python


Software Foundation (PSF). Namun sebelumnya, GvR dijuluki
sebagai Benevolent dictator for life (BDFL) karena hampir semua
keputusan pengembangan Python diambil oleh GvR, berbeda
dengan bahasa lain yang misalnya menggunakan voting dan
semacamnya. Pasca tahun 2000, dibentuklah beberapa sistem yang
memungkinkan Python menjadi lebih sustain, misalnya Python
Enhancement Proposals (PEP) untuk pengembangan Python dan
tentunya Python Software Foundation (PSF).
Jika PSF menjadi lembaga yang mengelola dan mengadvokasi
Python, PEP menjadi panduan dalam pengembangan Python.
Beberapa PEP memuat misalnya bagaimana sintaksis dan
bagaimana Bahasa Python akan berevolusi, bagaimana modul akan
dinyatakan usang (deprecated), dan sebagainya. Setelah kurang
lebih 30 tahun dalam pengembangan Python, GvR memutuskan
untuk tidak lagi menjabat BDFL pada 12 Juli 2018.
Salah satu patokan dalam pengembangan Python adalah PEP 20
yang berjudul Zen of Python.
Zen of Python (https://www.python.org/dev/peps/pep-0020/)
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Jika ada pengembangan fitur Python, maka PEP 20 inilah yang


menjadi dasar/akar dalam mengambil keputusan.
Mengapa Python
Efektivitas Python cukup terbukti dengan banyaknya jumlah
pengguna Bahasa Pemrograman ini. Berbagai survei memasukkan
Python dalam top-3 sebagai bahasa dengan penggunaan terbanyak,
bersaing dengan Java dan PHP. Python dapat digunakan dalam
mengakomodasi berbagai gaya pemrograman, termasuk
structured, prosedural, berorientasi-objek, maupun fungsional.
Python juga dapat berjalan pada berbagai sistem operasi yang
tersedia. Beberapa pemanfaatan bahasa Python di antaranya:

1. Web development (server-side),


2. Software development,
3. Mathematics & data science,
4. Machine learning,
5. System scripting.
6. Internet of Things (IoT) development.

Python Package Index


Dengan dukungan komunitas, Python juga memiliki repository
library dan modul yang memungkinkan siapa saja berkontribusi dan
menggunakannya. Python menyediakan library yang
meliputi regular expressions, documentation generation, unit
testing, threading, databases, web browsers, koneksi ke berbagai
protokol, cryptography, GUI (graphical user interfaces), dan lain-
lain.

Python Package Index (https://pypi.org/) menyediakan lebih dari


209.000 modul (*Desember 2019) dan skrip yang dapat diinstal dan
digunakan secara mudah dalam proyek Python Anda.

Saat ini, Python juga menjadi salah satu bahasa pilihan untuk
masuk ke dunia Data Science. Tiga hal utama pada Data Science -
machine learning, data analysis, dan data visualization banyak
disediakan berbasis Python. Sejumlah pustaka paling banyak
digunakan dalam machine learning berbasis Python, misalnya:
Scikit-Learn, Tensorflow, dan PyTorch.
Instalasi Python pada Operating System
Pada Linux dan Mac, umumnya Python sudah terinstal secara
otomatis. Untuk memastikan python sudah terinstal atau
memeriksa versi python yang terinstal, silakan panggil perintah
berikut di konsol atau command prompt:

1. python --version

atau

1. python3 --version

Jika telah terinstal, maka akan tampil versi Python yang terinstal
sebagai berikut (Klik tab pada tabel untuk melihat tampilan di
masing-masing sistem operasi).
 Ubuntu (18.04.1) - Python 2
 Ubuntu (18.04.1) - Python 3
 MacOS Mojave (10.14.4)
 Windows (kondisi terinstal)
Berikut tampilan saat Python versi 2 terinstal pada Ubuntu
(18.04.1).

Semua contoh dan tutorial pada kelas ini akan menggunakan versi
3.7.3 atau lebih tinggi. Python versi terbaru dapat diakses
di https://www.python.org/downloads/. Apabila pada komputer anda
terinstal Python 2.x, Anda umumnya dapat menginstal versi 3.x
secara berdampingan tanpa mengubah konfigurasi apapun. Untuk
konfigurasi lanjut yang memungkinkan Anda menggunakan lebih
dari satu versi python secara bergantian, silakan merujuk
ke https://docs.python.org/id/3.8/library/venv.html.
Untuk meng-update atau menginstal, silakan mengikuti panduan
berikut (Klik tab pada tabel untuk melihat tampilan di masing-
masing sistem operasi).
 Windows
 Ubuntu (Update)
 Mac (Update)
Berikut langkah-langkah meng-update atau menginstal Python pada
sistem operasi Windows:

1. Unduh dari https://www.python.org/downloads/windows/, pilih


Windows X86-64 (64 Bit) atau Windows X86 (32 Bit). Pemilihan
32 dan 64 bit ini akan juga mempengaruhi jumlah memori
yang dapat digunakan. Umumnya, komputer saat ini
mendukung 64 bit.

2. Untuk Anda yang memiliki koneksi internet relatif baik, Anda


dapat menggunakan web installer yang relatif kecil, namun
akan melakukan pengunduhan di belakang layar. Jika Anda
menggunakan komputer lain untuk mengunduh installer,
silakan unduh executable installer (+- 25 Mb).

3. Lakukan instalasi, pastikan mencentang Add Python 3.7 to


PATH untuk menambahkan Python dalam Environment
Variables.
Catatan: sebaiknya klik disable path length limit untuk
mengatasi problem path yang melebihi 255 karakter (nama
folder yang terlalu panjang).

Link Penting

Apabila Anda mengalami kesulitan, silakan merujuk ke


halaman https://docs.python.org/id/3.8/installing/index.html atau
gunakan mesin pencarian untuk mencari solusi apabila Anda
mengalami kendala dalam instalasi. Anda juga dapat
memanfaatkan forum diskusi apabila diperlukan.
Python pada IDE dan Notebook

Integrated Development Environment (IDE) lebih dari sekedar text


editor untuk membuat kode, di dalamnya tergabung juga berbagai
fasilitas development misalnya Code Versioning, Interpreter,
Visualization, dan lain sebagainya.
Untuk menulis program pada bahasa Python, Anda dapat
menggunakan teks editor apapun, misalnya Notepad++ atau
sejenisnya (Windows), Nano, Vim, Gedit (Linux), atau Visual Studio
Code/Atom/Sublime (semua platform). Anda juga bisa
menggunakan IDLE dalam bundel package python atau IDE lain
yang khusus dibuat untuk Python, misal PyCharm dari JetBrains.
Pastikan menyimpan file menggunakan ekstensi yang tepat
(umumnya .py untuk kode Python atau .pyc untuk kode yang sudah
dikompilasi).

1. Unduh PyCharm Community - Free


(opsional): https://www.jetbrains.com/pycharm/
2. Tampilan PyCharm pada Project Baru.
3. Create new Python file.

Tutorial instalasi Notebook:


Jupyter
Selain itu Anda juga dapat memanfaatkan notebook lain misalnya
Jupyter atau sejenisnya. Instalasi Jupyter Notebook dapat dilakukan
dengan beberapa cara. Silakan ikuti panduan
di https://jupyter.readthedocs.io/en/latest/install.html untuk lebih
detailnya. Instalasi notebook ini tidak wajib. Anda juga dapat
menggunakan notebook yang bersifat gratis misalnya IBM Watson
Studio dan Google Colab.

IBM Watson Studio


Layanan seperti IBM Watson Studio dapat digunakan tanpa perlu
meng-install perangkat lunak apapun pada komputer Anda.
Penjelasan tentang bagaimana menggunakan Watson Studio
silakan dibaca pada modul selanjutnya.

Google Colab
Untuk mulai menggunakan Google Colab, Anda dapat langsung
mengunjungi tautan
berikut: https://colab.research.google.com/notebooks/

Pengenalan IBM Watson Studio


IBM Watson Studio adalah salah satu layanan dari IBM yang banyak digunakan oleh

analis data dan Data Scientist. Anda juga dapat menjalankan kode secara online

pada layanan seperti IBM Watson Studio tanpa perlu meng-install perangkat lunak

apapun pada komputer Anda. Berikut adalah tutorial bagaimana menggunakan

Notebook pada Watson Studio untuk menulis dan menjalankan kode Python.

Sebelum menggunakan IBM Watson Studio, buatlah akun IBM Cloud terlebih

dahulu. Akun IBM Cloud dapat dipakai untuk mengakses IBM Watson Studio, IBM
Watson Machine Learning, dan IBM Cloud. Untuk mendaftar akun IBM Cloud,

kunjungi tautan berikut.

1. Pertama Anda akan dihadapkan pada halaman registrasi. Isi email dan

password Anda lalu lanjutkan proses yang diminta hingga akun berhasil

dibuat.
2. Setelah akun Anda jadi, login ke IBM cloud dengan mengunjungi

tautan https://cloud.ibm.com/login. Isi kolom IBMid dengan email yang telah

Anda daftarkan di tahap sebelumnya.


3. Berikut adalah tampilan ketika Anda telah login ke akun IBM Cloud.
4. Pada search bar ketiklah Object Storage lalu pilih item tersebut.

5. Kemudian pada halaman Object Storage pilih Lite pada bagan Plan.

Perhatikan bahwa satu akun hanya dapat memiliki 1 Object

Storage bertipe Lite. Jika Anda telah membuat object storage bertipe Lite

sebelumnya, Anda harus menghapus dahulu object storage tersebut untuk

bisa membuat object storage lite baru. Untuk Service Name dan Resource

Group Anda tidak perlu merubah isinya. Setelah itu klik tombol Create yang

ada di sidebar sebelah kanan.


6. Setelah memiliki akun IBM Cloud, kunjungi tautan berikut. Login ke Watson

Studio menggunakan akun IBM Cloud Anda.


7. Ketika Anda login pertama kali, akan ada pengaturan login otomatis yang

dilakukan oleh website. Setelah pengaturan login selesai, Anda dapat klik

tombol Go To IBM Cloud Pak for Data.


8. Berikut adalah halaman muka ketika Anda login ke akun IBM Cloud Pak.

Website IBM Cloud Pak memuat layanan Watson Studios, Watson Machine

Learning, dan beberapa layanan IBM lainnya. Untuk mulai mengembangkan

proyek ML Anda di Watson Studio, klik tombol New Project seperti yang

berada di dalam kotak berwarna merah di bawah.


9. Pada laman Create a project pilih Create an empty project.

10.Pada halaman New project, isi nama proyek Anda beserta deskripsinya.

Storage akan secara otomatis memilih storage yang Anda buat di IBM Cloud.
Setelah seluruh kolom Anda isi, klik tombol Create.

11.Tampilan dari halaman project Anda terlihat seperti di bawah.


12.Untuk membuat Notebook pada Watson Studio klik tombol Add to

Project lalu pilih Notebook.

13.Di halaman New notebook isi nama notebook yang Anda inginkan lalu

klik Create.

14.Sekarang Anda sudah bisa menulis kode python seperti Anda menulis kode di

Jupyter Notebook.
15.Untuk menyimpan pekerjaan Anda, klik tombol File dan pilih Save.
16.Pekerjaan yang telah Anda simpan dapat Anda lihat pada menu Assets di

bagian Notebooks.

Mode pada Python


Pada Python dikenal beberapa mode operasi: Interactive, Script
(scripting), dan Notebook.

Interactive

Berbeda dengan bahasa pemrograman lainnya, bahasa Python


yang berbasis interpreter memungkinkan kita untuk menjalankan
perintah secara interaktif. Mode ini dapat diakses di bagian bawah
PyCharm atau dengan memanggil perintah python di command
prompt/terminal.
Catatan: pastikan Anda menjalankan versi yang tepat apabila
tersedia >1 instalasi python di komputer Anda.

Apa saja yang dapat Anda lakukan pada python interactive


ini?

Seluruh kode python dapat Anda jalankan secara berurutan pada


sesi interaktif ini. Variabel juga akan tetap disimpan. Anda juga
dapat memanggil (import) library. Sehingga salah satu
penggunaan utama pada sesi interaktif ini adalah untuk rapid-
prototyping.
 InteractiveExample: Calculator

Anda dapat menggunakan python pada sesi interaktif ini


menjadi kalkulator untuk perhitungan matematika.

 InteractiveExample: Print

 InteractiveExample: import library dan mendapatkan


Current working directory

Script

Mode yang lain dan sering dipergunakan pada python adalah script
(scripting). Pada mode ini kita menggunakan sebuah berkas teks
(umumnya berekstensi .py) dan kemudian akan dieksekusi oleh
compiler/interpreter. Contoh yang sama untuk ketiga hal yang kita
coba pada mode interactive adalah sebagai berikut:
 RunnableExample: Calculator

 RunnableExample: Print

 RunnableExample: import library dan mendapatkan


Current working directory

Notebook
Alternatif

Alternatif yang lain, Anda dapat menggunakan tools online untuk


menjalankan kode-kode Python Anda. beberapa yang umum
digunakan di industri antara lain IBM Watson Studio, Google Colab,
glot.io, REPL.it, dan ideone.com.
Watson Studio
Glot.io

Repl.it
Anda dapat menggunakan yang mana saja dalam proses
pembelajaran ini. Di industri, teknik yang dipilih adalah yang paling
efisien (misalnya untuk research, kebanyakan menggunakan
notebook), sementara untuk backend atau infrastructure
management, dipilih script.

Style Guide pada Python Code


Berikut adalah beberapa style guide menulis kode Python dengan
baik dan benar. Panduan gaya penulisan kode ini mengacu
pada PEP-008. Beberapa proyek mungkin memiliki style guide
tersendiri. Sejumlah contoh kode yang ditulis di halaman ini berupa
pseudocode, bertujuan hanya untuk memberikan gambaran
tentang panduan gaya penulisan kode saja.
Guido, pembuat bahasa Python, merasakan bahwa kode lebih
sering dibaca dibandingkan ditulis. Oleh sebab itu, panduan ini lebih
ditekankan untuk kemudahan membaca kode dan membuatnya
konsisten pada (hampir) setiap proyek Python yang ada.
Namun demikian pada kasus-kasus tertentu, keputusan adanya
modifikasi tetap pada penulis kodenya. Mungkin sebuah kode dapat
terbaca lebih jelas walaupun tidak mengikuti satu atau lebih
panduan dalam modul ini.

Indentasi

Gunakan 4 spasi pada setiap tingkatan indentasi.


Python menggunakan indentasi untuk menulis kode bertingkat.
Bahasa lain mungkin menggunakan statement tertentu (Begin, end
- pascal), perbedaan baris atau kurung kurawal. Statement yang
memiliki indentasi yang sama dan diletakkan secara berurutan
dikenali sebagai blok statement oleh Python dan akan dijalankan
secara berurutan.

1. Statement tingkat 1:
2. Statement tingkat 2()

3. Statement tingkat 2 yang kedua()

Baris Lanjutan

Seringkali, saat menulis kode, kita harus menggunakan baris


lanjutan karena kode tidak cukup dituliskan dalam satu baris.
Umumnya, kita dapat menggunakan tanda hubung, kurung,
kurawal, atau seperti disarankan pada PEP-008, gunakan hanging
indent. Beberapa panduan dalam menggunakan hanging indent
dalam penulisan kode python adalah sebagai berikut:
Disarankan:

1. # Opsi 1

2. # Rata kiri dengan kurung atau pemisah dengan argumen utama

3. foo = long_function_name(var_one, var_two,

4. var_three, var_four)

5.

6. # Opsi 2

7. # Tambahkan indentasi ekstra - (level indentasi baru) untuk


memisahkan parameter/argument dari bagian lainnya

8. def long_function_name(

9. var_one, var_two, var_three,

10. var_four):

11. print(var_one)

12.

13. # Opsi 3

14. # Hanging indents dengan penambahan level indentasi saja


15. foo = long_function_name(

16. var_one, var_two,

17. var_three, var_four)

Tidak Disarankan:

1. # Contoh kesalahan 1

2. # Tidak rata kiri dengan bagian yang relevan

3. foo = long_function_name(var_one, var_two,

4. var_three, var_four)

5.

6. # Contoh kesalahan 2

7. # Sulit dibedakan antara baris lanjutan atau fungsi baru

8. def long_function_name(

9. var_one, var_two, var_three,

10. var_four):

11. print(var_one)

Catatan: 4 spasi bersifat opsional pada baris lanjutan, utamakan


keterbacaan kode.
Anda juga dapat menggunakan jumlah spasi yang lain (misalnya 2)
untuk baris lanjutan ini. Contohnya sepert ini:

1. # Hanging indents *boleh* menggunakan selain 4 spasi

2. foo = long_function_name(

3. var_one, var_two,

4. var_three, var_four)
Kondisional (If)

Bagian ini hanya memberikan gambaran mengenai standar


penulisan, pembahasan mengenai kondisional ada di modul
Percabangan.
Saat menulis pernyataan kondisional, misalnya IF, kita juga
menemukan penulisan yang terkadang tidak cukup dituliskan dalam
satu baris, atau menggunakan beberapa operand yang akan
menyulitkan apabila digabung berturut-turut.
Dalam kondisi ini, Python tidak memberikan panduan spesifik,
mengingat kondisi yang dihadapi programmer mungkin berbeda.
Contoh-contoh yang disarankan adalah sebagai berikut (meskipun
dimungkinkan versi-versi lain selama keterbacaan kode tetap
tinggi):

1. # Contoh kondisi visual yang tidak diubah/tanpa indentasi

2. if (sebuah kondisi dan

3. kondisi yang lain):

4. lakukanSesuatu()

5.

6. # Tambahkan komentar

7. if (sebuah kondisi dan

8. kondisi yang lain):

9. #Mengingat Keduanya Benar, lakukan hal berikut

10. lakukanSesuatu()

11.

12. # Tambahkan ekstra indentasi pada baris lanjutan

13. if (sebuah kondisi dan

14. kondisi yang lain):


15. lakukanSesuatu()

Kurung/Siku Penutup

Penempatan kurung atau siku penutup juga dapat diletakkan pada


baris lanjutan, dengan mengikuti posisi karakter pertama yang
bukan whitespace (non-whitespace character) pada baris
sebelumnya:

1. my_list = [

2. 1, 2, 3,

3. 4, 5, 6,

4. ]

5.

6. result = some_function_that_takes_arguments(

7. 'a', 'b', 'c',

8. 'd', 'e', 'f',

9. )

Atau dapat diletakkan sejajar dengan statemen utama, contoh:

1. my_list = [

2. 1, 2, 3,

3. 4, 5, 6,

4. ]

5.

6. result = some_function_that_takes_arguments(

7. 'a', 'b', 'c',

8. 'd', 'e', 'f',


9. )

Tab atau Spasi

Spasi adalah model yang disarankan PEP-008. Pengecualian pada


kode yang sudah menggunakan tab/tabulasi sebelumnya. Python
sejak versi 3 tidak memperbolehkan pencampuran antara Tab dan
Spasi untuk indentasi. Anda disarankan untuk melakukan konversi
kode untuk menggunakan spasi sepenuhnya.
Anda dapat menggunakan find-replace untuk mengganti tab, atau
memanggil kode Anda yang berbasis Python 2 dengan opsi -t
(warning) atau -tt (error) untuk mengetahui titik penggunaan tab
dan spasi yang bercampur.

Panjang Baris Maksimum

Batasi panjang kode setiap baris hingga 79 karakter. Untuk


komentar atau dokumentasi, usahakan untuk tidak melebihi 72
karakter.
Dengan membatasi panjang baris maksimum, Anda akan
memudahkan pengguna lain membuka >1 window editor secara
berdampingan, misalnya untuk melakukan review atau
perbandingan. Panjang kode setiap baris yang dibatasi akan
memudahkan Anda jika menggunakan code review tools yang
menunjukkan dua versi berbeda secara berdampingan.
Mengapa 79? Hal ini dicontohkan pada editor-editor dengan
window-width yang terset pada 80 karakter. 1 karakter tersisa bisa
berupa marker glyph atau whitespace. Pembatasan 79 karakter ini
membuat editor terkecil sekalipun tidak akan merusak struktur dan
keterbacaan kode Anda. Jika Anda atau tim mengalami kesulitan
(misalnya karena struktur penamaan variabel) yang telah
disepakati, cenderung melebihi batasan panjang karakter, Anda
dapat melakukan kesepakatan atau konvensi yang berlaku pada
kode Anda sendiri. Umumnya hingga 99 karakter per baris.
Catatan: Python Standard Library selalu dikembangkan secara
konservatif dan mempertahankan standar 79 karakter pada kode,
dan 72 pada komentar/dokumentasi.
Seperti telah dibahas sebelumnya, Anda direkomendasikan untuk
menggunakan baris lanjutan dengan kurung, kurawal, siku,
maupun hanging indents. Baris yang cukup panjang dapat
dipisahkan menjadi beberapa baris. Beberapa dari Anda mungkin
mengenal pemisahan menggunakan backslash (\), namun tidak
disarankan untuk digunakan, kecuali memang diharuskan.
Contohnya adalah penggunaan backslash pada statement with atau
assert yang tidak dapat menggunakan implicit continuation.

1. with open('/path/to/some/file/you/want/to/read') as file_1, \

2. open('/path/to/some/file/being/written', 'w') as file_2:

3. file_2.write(file_1.read())

Pastikan untuk memberikan indentasi yang sesuai pada baris-baris


lanjutannya.

Python Basic Style Guide - Penggantian


Baris, Komentar, dan Dokumentasi
Mengganti baris : Sebelum atau Sesudah Operator Binary

Bagian ini hanya memberikan gambaran mengenai standar


penulisan, pembahasan mengenai kondisional dibahas di modul
Operator, Operands, dan Expressions.
Penggantian baris setelah operator binary memang pernah menjadi
rekomendasi. Namun ternyata penggunaan metode ini membuat
mata cepat lelah dan Anda perlu melakukan pengecekan ulang
pada baris berbeda. Contohnya:

1. income = (gross_wages +

2. taxable_interest +

3. (dividends - qualified_dividends) -
4. ira_deduction -

5. student_loan_interest)

Untuk menyelesaikan masalah ini, dipilih pendekatan baris baru


sebelum operator binary. Hal ini untuk mempermudah pembaca
kode mengerti operasi yang dilakukan terhadap variabel
berikutnya.

1. income = (gross_wages

2. + taxable_interest

3. + (dividends - qualified_dividends)

4. - ira_deduction

5. - student_loan_interest)

Kedua pendekatan ini dimungkinkan di Python. Anda


direkomendasikan untuk menggunakan pendekatan kedua (baris
baru sebelum operator) untuk menulis kode baru.

Baris Kosong

Anda disarankan untuk menambahkan dua baris kosong pada top


level function dan class definitions. Kemudian untuk setiap
deklarasi method, dipisahkan dengan satu baris kosong.
Anda juga dapat menambahkan baris kosong ini apabila
dibutuhkan, misalnya untuk memisahkan gabungan beberapa
fungsi yang memiliki fungsi terkait atau untuk meningkatkan
keterbacaan kode. Pemisahan baris kosong tidak diperlukan jika
deklarasi fungsi/method Anda bersifat satu baris (one-liner),
umumnya untuk fungsi/method yang belum diimplementasikan
secara penuh.

File Encoding
Kode dalam inti Python, selalu menggunakan encoding UTF-8
(Python 3) atau ASCII (Python 2). Dalam hal ini, apabila dalam
sebuah berkas tidak ditulis deklarasi encoding, maka berkas
tersebut menggunakan encoding ASCII (Python 2) atau UTF-8
(Python 3). Dalam standard library, non-default encoding hanya
digunakan untuk pengujian atau memberikan
komentar/dokumentasi, misalnya nama penulis yang tidak
menggunakan karakter ASCII.
Untuk Python 3 dan seterusnya, pada standard library hanya
menggunakan karakter ASCII dan sebisa mungkin menggunakan
kata-kata dalam Bahasa Inggris. Proyek yang menggunakan python
3 didorong untuk menggunakan standar yang sama. Lihat PEP
3131.

Import

Saat melakukan import library, lakukan import setiap library pada


baris berbeda.

1. Yes: import os

2. import sys

3.

4. No: import sys, os

Kecuali, jika anda memerlukan lebih dari satu sub-library dari


library yang sama.

1. from subprocess import Popen, PIPE

Import umumnya diletakkan pada bagian awal berkas. Setelah


komentar dan dokumentasi tentang berkas tersebut (misalnya
definisi kelas, dll), sebelum variabel global dan konstanta. Jika
memungkinkan, kelompokkan import dalam urutan berikut:

1. Standard Library
2. Library Pihak Ketiga
3. Local/Library spesifik
Setiap grup baiknya dipisahkan oleh sebuah baris kosong.
Pada Python 2, dikenal explicit relative import, yakni proses import
yang menggunakan path relatif yang digunakan. Pada Python 3,
seluruh import yang dilakukan bersifat absolute (beserta seluruh
path secara penuh).

1. import mypkg.sibling

2. from mypkg import sibling

3. from mypkg.sibling import example

Kode pada Standard library umumnya dapat menggunakan


absolute import. Anda juga dapat mengimpor kelas/sub-library,
Anda tentu saja dapat menggunakan pemanggilan berikut:

1. from myclass import MyClass

2. from foo.bar.yourclass import YourClass

Jika ada penamaan kelas yang sama, gunakan pemanggilan secara


eksplisit:

1. import myclass

2. import foo.bar.yourclass

saat memanggil, gunakan "myclass.MyClass" dan


"foo.bar.yourclass.YourClass".

1. from <module> import *

Wildcard imports seperti tertulis, sedapat mungkin dihindari untuk


mengatasi ambiguitas dan ketidaktahuan tentang modul apa yang
di-import.

Tanda Petik

Petik tunggal (‘) dan petik ganda (“) dianggap sama oleh Python,
dan tidak memiliki preferensi khusus untuk penggunaannya. Hal ini
dikarenakan ada kemungkinan string yang memuat salah satunya.
Anda disarankan untuk menggunakan salah satunya secara
konsisten.
Docstring (dokumentasi kode/fungsi/method) pada Python
didefinisikan dengan tiga tanda petik, disarankan tanda petik ganda
(”””) pada awal dan akhir statement docstring.
Whitespace pada Expressions dan Statements

Wajib dihindari penambahan whitespace yang tidak perlu.


Antara kurung, kurawal, kurung siku.

1. Yes: spam(ham[1], {eggs: 2})

2. No: spam( ham[ 1 ], { eggs: 2 } )

Setelah koma, tanpa argumen lain setelahnya.

1. Yes: foo = (0,)

2. No: bar = (0, )

Sebelum koma, titik dua, atau titik koma.

1. Yes: if x == 4: print x, y; x, y = y, x

2. No: if x == 4 : print x , y ; x , y = y , x

Namun, jika Anda menggunakan titik dua/colon sebagai slice (sub-


list), pastikan ia memiliki spasi/whitespace yang sama pada kedua
sisinya.

1. Yes:

2. ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]

3. ham[lower:upper], ham[lower:upper:], ham[lower::step]

4. ham[lower+offset : upper+offset]

5. ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]

6. ham[lower + offset : upper + offset]

7.
8. No:

9. ham[lower + offset:upper + offset]

10. ham[1: 9], ham[1 :9], ham[1:9 :3]

11. ham[lower : : upper]

12. ham[ : upper]

Saat memberikan parameter pada fungsi, sebelum kurung tidak


boleh ada spasi.

1. Yes: spam(1)

2. No: spam (1)

Saat memberikan parameter/index pada list, sebelum kurung siku


tidak boleh ada spasi.

1. Yes: dct['key'] = lst[index]

2. No: dct ['key'] = lst [index]

Saat membuat assignment pada variabel, sebaiknya tidak


menambahkan whitespace yang tidak perlu.

1. Yes:

2. x = 1

3. y = 2

4. long_variable = 3

5.

6. No:

7. x = 1

8. y = 2

9. long_variable = 3

Rekomendasi Lainnya
Hindari menambahkan whitespace di belakang statement apapun,
utamanya di statement akhir dalam sebuah baris, karena
whitespace tersebut tidak mudah dilihat.
Biasakan untuk menambahkan satu spasi baik di kiri maupun kanan
untuk operasi berikut:

1. Assignment (=),
2. Augmented assignment (+=, -=etc.),
3. Comparisons (==, <, >, !=, <>, <=, >=, in, not in, is, is not),
4. Booleans (and, or, not).

Jika operator dengan berbagai tingkatan prioritas digunakan,


letakkan whitespace pada operator-operator dengan prioritas
terendah. Namun Anda juga dapat menyesuaikannya sendiri.
Catatan: jangan pernah menggunakan >1 spasi dan gunakan spasi
yang sama baik di sebelah kiri maupun kanan dari operator-
operator binary Anda.

1. Yes:

2. i = i + 1

3. submitted += 1

4. x = x*2 - 1

5. hypot2 = x*x + y*y

6. c = (a+b) * (a-b)

7.

8. No:

9. i=i+1

10. submitted +=1

11. x = x * 2 - 1

12. hypot2 = x * x + y * y

13. c = (a + b) * (a - b)
Komentar
Dalam sebuah kode Python, Anda diajak untuk memastikan kode
Anda terbaca oleh programmer lain. Salah satu caranya adalah
dengan menggunakan fitur komentar untuk memberitahu fungsi
atau informasi lain terkait kode Anda. Pastikan komentar Anda ter-
update dan tidak mengalami kontradiksi dengan kode yang ada.
Umumnya, komentar dituliskan dalam kalimat utuh dengan
memperhatikan penulisan (huruf besar di awal kalimat, huruf kecil
saat diawali dengan identifier atau variabel, dan diakhiri titik di
akhir kalimat). Anda juga bisa menggabungkan beberapa kalimat
menjadi blok komentar dengan menambah dua spasi saat berganti
kalimat dalam satu paragraf, kecuali pada kalimat terakhir.
Jika memungkinkan, tuliskan komentar dalam bahasa Inggris,
kecuali Anda yakin bahwa pembaca komentar ini dipastikan
mengerti bahasa Anda.

Blok Komentar
Blok komentar umumnya digunakan untuk menjelaskan fungsi utuh
atau sub-fungsi yang mengikuti/berada di bawahnya. Blok komentar
diindentasi setara dengan kode yang dijelaskan. Setiap barisnya
diawali dengan # dan sebuah spasi serta setiap paragrafnya
dimulai pada baris baru.

Komentar Inline
Komentar Inline pada Python umumnya diletakkan pada baris yang
sama dengan kode. Umumnya dipisahkan dan dirapikan dengan
jarak dua spasi dari kode yang dimaksud, diawali # dan sebuah
spasi. Komentar inline dapat juga digunakan di atas baris yang
ingin diberikan komentar, agar tidak mengurangi jumlah karakter
yang dapat dituliskan dalam sebuah baris. Untuk semua jenis
komentar, jangan menuliskan komentar untuk hal yang sudah
langsung dapat dibaca dari kodenya, seperti contoh berikut:
Tidak disarankan:
1. x = x + 1 # Tambahkan x

Disarankan (kontekstual):

1. x = x + 1 # Mengakomodasi layar ukuran Z

Dokumentasi

Guideline untuk menuliskan dokumentasi (docstring) yang baik


tersedia di PEP 257. Kuncinya:

 Buatlah dokumentasi untuk semua modul, fungsi, kelas, dan


method yang bersifat public atau akan diakses publik.
 Docstring tidak diwajibkan pada method yang tidak bersifat
public, namun Anda disarankan menambahkan komentar
tentang Apa saja yang dilakukan fungsi/modul ini beserta
informasi lainnya yang mungkin diperlukan. Komentar ini
diletakkan setelah baris def.

PEP 257 memberikan panduan detil yang dapat digunakan. Seperti


yang sudah-sudah, Anda disarankan untuk menutup sebuah
docstring yang lebih dari satu baris, pada baris baru berikutnya:

1. """Return a foobang

2. Optional plotz says to frobnicate the bizbaz first.

3. """

Untuk docstring satu baris, Anda disarankan untuk meletakkan


penutup """ - nya pada baris yang sama.
Meskipun secara sintaksis Anda dapat menggantikan 3-tanda-kutip-
dua """ dengan 3-tanda-kutip-satu ''', untuk penulisan komentar
multi-baris, tetapi PEP 257 memberikan panduan gunakan 3-tanda-
kutip-dua untuk dokumentasi (docstring).

Tipe Data pada Python - Numbers, String,


dan Boolean
Dasar dari mempelajari Bahasa Pemrograman yang baru adalah
pemahaman terhadap tipe data. Di sini Anda akan diajarkan
tentang tipe data bawaan yang ada di Python 3 beserta contoh
penggunaannya.

Numbers

Tipe numerik pada Python dibagi menjadi 3: int, float, complex.


Cobalah bermain-main dengan contoh berikut:

1. a = 10

2. print(a, "bertipe", type(a))

3. b = 1.7

4. print(a, "bertipe", type(b))

5. c = 1+3j

6. print(c, " Bertipe bilangan kompleks? ",


isinstance(1+3j,complex))

Output seharusnya:
10 bertipe <class 'int'>
1.7 bertipe <class 'float'>
(1+2j) Bertipe bilangan kompleks? True

Integer tidak dibatasi oleh angka atau panjang tertentu, namun


dibatasi oleh memori yang tersedia. Sehingga Anda tidak perlu
menggunakan variabel yang menampung big number misalnya long
long (C/C++), biginteger, atau sejenisnya. Contoh kode untuk
menunjukkan bahwa Python tidak membatasi output integer adalah
pencarian bilangan ke-10.000 pada deret fibonacci (catatan:
bilangan ke-10.000 pada deret fibonacci memiliki panjang 2.090
digit) sebagai berikut:

1. x=[0]*10005; #inisialisasi array 0 sebanyak 10005;


x[0]=0

2. x[1]=1; #x[1]=1

3.
4. for j in range(2,10001):

5. x[j]=x[j-1]+x[j-2] # Fibonacci

6. print(x[10000])

Output:

1. 3364476487643178326662161200510754331030214846068006390656476997
4680081442166662368155595513633734025582065332680836159373734790
4838652682630408924630564318873545443695598274916066020998841839
3386465273130008883026923567361313511757929743785441375213052050
4347701602264758318906527890855154366159582987279682987510631200
5754287834532155151038708182989697916131278562650331954871402142
8753269818796204693609787990035096230229102636813149319527563022
7837628441540360584402572114334961180023091208287046088923962328
8354615057765832712525460935911282039252853934346209042452489294
0390170623388899108584106518317336043747073790855263176432573399
3712871937587746897479926305837065742830161637408969178426378624
2128352581128205163702980893320999057079200643674262023897831114
7005407499845925036063356093388383192338678305613643535189213327
9732908133732642652633989763922723407882928177953580570993691049
1754708089318410561463223382174656373212482263830921032977016480
5472624384237486241145309381220656491403275108664339451751216152
6545361333111314042436854805106765843493523836959653428071768775
3283482343455573667197313927462736291082106792807847180353291311
7677892465908993863545932789452377767440619224033763867400402133
0343297496902028328145933418826817683893072003634795623117103101
2919531697946076327375892535307725523759437884345040677155557790
5645044301664011946258097221672975861502696844314695203461493229
1105970676243268515992834709891284706740862008587135016260312071
9031720860940812983215810772820763531866246112782455372085323653
0577595643007251774431505153960090516860322034916322264088524885
2433158051534849622434848299380905070483482449327453732624567755
8790891871908036620580095947431500524025327097469953187707243768
2590741993963226598414749819360928522394503970716544315642132815
7688908058783183404917434556270520223564846495196112460268313970
9750693826487066132645076650746115126775227486215986425307112984
4118262266105716351506926002986170494542504749137811515413994155
0671256271197133252763631939606902895650288268608362241082050562
430701794976171121233066073310059947366875

Batasan akurasi variabel bertipe float


Python melakukan pemotongan pada digit ke 16 pada variabel
float. Float atau bilangan pecahan dibatasi akurasinya pada 15
desimal. Yang membedakan Integer dan Float adalah titik (decimal
points). Misalnya dalam penulisan angka 1 jenisnya Integer, tapi
jika dituliskan sebagai 1.0 artinya berjenis Float atau pecahan.

1. b = 0.1234567890123456789

2. print(b)

Output:
0.12345678901234568

Contoh jika berupa integer:

1. a = 1234567890123456789

2. print(a)

Output:
1234567890123456789

Karena Python banyak digunakan juga oleh matematikawan, tipe


bilangan di Python juga mendukung bilangan imajiner dan bilangan
kompleks. Nilai bilangan kompleks (complex) dituliskan dalam
formulasi x + yj, yakni bagian x adalah bilangan real dan y adalah
bilangan imajiner. Contohnya adalah sebagai berikut:

1. c = 1+5j

2. print(c)

Output:
(1+5j)

Strings

String adalah urutan dari karakter unicode yang dideklarasikan


dengan petik tunggal atau ganda. String >1baris dapat ditandai
dengan tiga petik tunggal atau ganda ''' atau """.
1. s = "Ini adalah string baris tunggal"

1. s = '''Ini adalah string

2. yang memiliki baris pertama

3. dan selanjutnya baris kedua'''

Bool/Boolean

Tipe data bool atau Boolean merupakan turunan dari bilangan bulat
(integer atau int) yang hanya punya dua nilai konstanta: True dan
False.
Nilai Boolean
Nilai konstanta False dan True merepresentasikan nilai kebenaran
(truth values), meskipun ada nilai-nilai lain yang juga dianggap
benar atau salah. Di dalam konteks angka, misalnya digunakan
sebagai argumen dari operator matematika aritmatika, kedua nilai
ini berlaku seperti halnya bilangan bulat 0 dan 1, sesuai False dan
True.
Ada fungsi bawaan bool() yang dapat mengubah nilai menjadi nilai
Boolean, apabila nilai tersebut dapat direpresentasikan sebagai
nilai kebenaran (truth values).
Nilai kebenaran adalah sebuah nilai yang dapat diuji sebagai benar
atau salah, untuk digunakan di sintaksis kondisi if atau while atau
sebagai operan dari operasi Boolean.
Berikut adalah objek bawaan yang didefinisikan bernilai salah
dalam pengujian nilai kebenaran:

 Konstanta yang sudah didefinisikan bernilai salah: None dan


False.
 Angka nol dari semua tipe numeric: 0, 0.0, 0j, Decimal(0),
Fraction(0, 1).
 Urutan (sequence) dan koleksi (collection) yang kosong: '', (),
{}, set(), range(0).
Untuk objek yang didefinisikan sendiri, representasi nilai Boolean
akan bergantung dari definisi metode (method) khusus bernama
__bool__(self). Jika metode ini mengembalikan True maka
interpretasi nilai dari objeknya akan True, demikian juga sebaliknya.
Operasi Boolean
Operasi dan fungsi bawaan yang memiliki hasil Boolean akan selalu
mengembalikan 0 atau False untuk yang bernilai salah,
serta 1 atau True untuk yang bernilai benar, kecuali dinyatakan
berbeda dalam dokumentasi.
Operasi untuk tipe Boolean akan dijelaskan lebih lanjut di modul
Operator, Operands, dan Expressions.

Tipe Data pada Python - List, Slicing, Tuple,


Set, dan Dictionary

List

List adalah jenis kumpulan data terurut (ordered sequence), dan


merupakan salah satu variabel yang sering digunakan pada Python.
Serupa, namun tak sama dengan array pada bahasa pemrograman
lainnya. Bedanya, elemen List pada Python tidak harus memiliki
tipe data yang sama. Mendeklarasikan List cukup mudah dengan
kurung siku dan elemen yang dipisahkan dengan koma.
Setiap data di dalamnya dapat diakses dengan indeks yang
dimulai dari 0.

1. a = [1, 2.2, 'python']

Python mengenal slicing operator [] yang dapat melakukan


ekstraksi sebuah item atau beberapa item yang berada dalam
range tertentu pada tipe data urutan (sequences), misalnya list,
string dan tuple. Beberapa tipe urutan juga mendukung "extended
slicing" dengan parameter ketiga berupa "step".

 x[0] artinya mengambil elemen paling awal, dengan index 0


dari List x.
 x[5] artinya mengambil elemen dengan index 5 dari List x.
 x[-1] artinya mengambil elemen dengan index paling
belakang ke-1 dari List x.
 x[3:5] artinya membuat list dari anggota elemen List x
dengan index 3 hingga sebelum index 5 (tidak termasuk
elemen dengan index 5, dalam hal ini hanya index 3-4).
 x[:5] artinya membuat list dari anggota elemen List x paling
awal hingga sebelum index 5 (tidak termasuk elemen dengan
index 5, dalam hal ini hanya index 0-4).
 x[-3:] artinya membuat list dari anggota elemen List x mulai
index ke-3 dari belakang hingga paling belakang.
 x[1:7:2] artinya membuat list dari anggota elemen List x
dengan index 1 hingga sebelum index 7, dengan "step" 2
(dalam hal ini hanya index 1, 3, 5).

1. x = [5,10,15,20,25,30,35,40]

2. print(x[5])

3. print(x[-1])

4. print(x[3:5])

5. print(x[:5])

6. print(x[-3:])

7. print(x[1:7:2])

Output:
30
40
[20, 25]
[5, 10, 15, 20, 25]
[30, 35, 40]
[10, 20, 30]

Elemen pada list dapat diubah atau ditambahkan. Misalnya untuk


melakukan perubahan kemudian penambahan:

1. x = [1,2,3]
2. x[2]=4

3. print (x)

Output:
[1, 2, 4]

1. x = [1,2,3]

2. x[2]=4

3. x.append(5)

4. print(x)

Output:
[1, 2, 4, 5]

Untuk menghapus item pada list, gunakan fungsi del. Ingat


bahwa Indeks Python dimulai dari 0:

1. binatang = ['kucing', 'rusa', 'badak', 'gajah']

2. del binatang[2]

3. print(binatang)

Output:
['kucing', 'rusa', 'gajah']

Coba tambahkan kembali:

1. del bintang [2]

2. print(binatang)

Pada baris terbawah kode di atas, maka output akan menjadi:


Output:
['kucing', 'rusa']

Slicing pada String


Karena string mirip dengan list, maka slicing operator [ ] juga
dapat digunakan pada string untuk mengambil isinya atau bahkan
substring. Sebuah string utuh bersifat mutable (bisa diubah),
namun elemennya bersifat immutable (tidak bisa diubah).

1. s = "Hello World!"

2. print(s[4]) #ambil karakter kelima dari string s

3. print(s[6:11]) #ambil karakter ketujuh hingga sebelas


dari string s

4. s[5]="d" #ubah karakter keenam dari string s


menjadi "d", seharusnya gagal karena immutable

5. s = "Halo Dunia!" #ubah isi string s menjadi "Halo Dunia!",


seharusnya berhasil karena mutable

6. print (s)

Output:
'o'
'World'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
'Halo Dunia!'

Tuple

Tuple adalah jenis dari list yang tidak dapat diubah elemennya.
Umumnya tuple digunakan untuk data yang bersifat sekali tulis, dan
dapat dieksekusi lebih cepat. Tuple didefinisikan dengan kurung
dan elemen yang dipisahkan dengan koma.

1. t = (5,'program', 1+3j)
Seperti list, kita dapat melakukan slicing, namun pada tuple kita
tidak dapat melakukan perubahan:

1. t = (5,'program', 1+3j)

2. print(t[1])

3. print(t[0:3])

4. print(t[0]=10)

Output:
'program'
(5, 'program', (1+3j))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

Set

Set adalah kumpulan item bersifat unik dan tanpa urutan


(unordered collection). Didefinisikan dengan kurawal dan
elemennya dipisahkan dengan koma. Pada Set kita dapat
melakukan union dan intersection, sekaligus otomatis melakukan
penghapusan data duplikat.

1. a = {1,2,2,3,3,3}

2. print(a)

Output:
{1, 2, 3}

Karena set bersifat unordered, maka kita tidak bisa mengambil


sebagian data / elemen datanya menggunakan proses slicing.

1. a = {1,2,3}

2. print(a[1])
Output:
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
TypeError: 'set' object does not support indexing

Dictionary

Dictionary pada Python adalah kumpulan pasangan kunci-nilai (pair


of key-value) yang bersifat tidak berurutan. Dictionary dapat
digunakan untuk menyimpan data kecil hingga besar. Untuk
mengakses datanya, kita harus mengetahui kuncinya (key). Pada
Python, dictionary didefinisikan dengan kurawal dan tambahan
definisi berikut:

1. Setiap elemen pair key-value dipisahkan dengan koma (,).


2. Key dan Value dipisahkan dengan titik dua (:).
3. Key dan Value dapat berupa tipe variabel/obyek apapun.

1. d = {1:'value','key':2}

2. print(type(d))

Output:
<class 'dict'>

1. d = {1:'value','key':2}

2. print(type(d))

3. print("d[1] = ", d[1]);

4. print("d['key'] = ", d['key']);

Output:
<class 'dict'>
d[1] = value
d['key'] = 2
Dictionary bukan termasuk dalam implementasi urutan
(sequences), sehingga tidak bisa dipanggil dengan urutan indeks.
Misalnya dalam contoh berikut dicoba dengan indeks 2, tetapi
menghasilkan error (KeyError) karena tidak ada kunci (key) 2:

1. d = {1:'value','key':2}

2. print(type(d))

3. print("d[1] = ", d[1]);

4. print("d['key'] = ", d['key']);

5.

6. # Generates error

7. print("d[2] = ", d[2]);

Output:
<class 'dict'>
d[1] = value
d['key'] = 2

---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-7-4b566e677ca2> in <module>()
1 d = {1:'value','key':2}
----> 2 print("d[2] = ", d[2]);

KeyError: 2

Konversi (conversion, cast) antar tipe data

Kita dapat melakukan konversi tipe data bawaan dengan


menggunakan fungsi konversi tipe bawaan (standard type)
misalnya: int(), float(), str(), dll.

1. print(float(5))
Output:
5.0

Konversi float ke int akan bersifat floor/truncating atau


menghilangkan nilai di belakang koma.

1. print(int(10.6))

Output:
10

1. print(int(-10.6))

Output:
-10

Konversi dari-dan-ke string akan melalui pengujian dan dipastikan


validitasnya.

1. print(float('2.5'))

Output:
2.5

1. print(str(25))

Output:
'25'

1. print(int('1p'))

Output:
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1p'

Anda juga dapat melakukan konversi kumpulan data (set, list,


tuple).

1. print(set([1,2,3]))

Output:
{1, 2, 3}

1. print(tuple({5,6,7}))

Output:
(5, 6, 7)

1. print(list('hello'))

Output:
['h', 'e', 'l', 'l', 'o']

Untuk konversi ke dictionary, data harus memenuhi persyaratan


key-value. Berikut adalah dua contoh konversi:
List dari beberapa List yang isinya pasangan nilai menjadi
Dictionary.
Serta konversi List dari beberapa Tuple yang isinya pasangan nilai
menjadi Dictionary.

1. print(dict([[1,2],[3,4]]))

Output:
{1: 2, 3: 4}

1. print(dict([(3,26),(4,44)]))

Output:
{3: 26, 4: 44}

Input/Output pada Python


Di bagian ini Anda akan mempelajari tentang mekanisme
Input/Output, misalnya meminta masukan dari pengguna,
menyimpan nilai pada variabel dan mencetak nilai ke layar.
Setelah sebelumnya mempelajari tipe data, selanjutnya Anda akan
belajar tentang variabel. Variabel adalah sebuah tempat (di memori
komputer) untuk menyimpan nilai dengan tipe data tertentu.
Untuk memberikan nilai pada sebuah variabel, kita menggunakan
operator "=", antara nama variabel dengan nilai yang ingin
disimpan.
Misalnya: x = 1.
Artinya kita akan menyimpan nilai 1 (tipe int) ke variabel x.

Output
Print

Seperti dicontohkan dalam beberapa sample code sebelumnya,


fungsi print() adalah cara output langsung ke konsol/layar.

1. print("Hello, World!")

Output:
Hello, World!

Memasukkan nilai variabel pada string


Untuk memasukkan nilai variabel pada string, Python memiliki dua
cara. Cara yang pertama adalah langsung menggabungkan variabel
pada statement print().

1. x = 100

2. print('Nilai x adalah', x)

Output:
Nilai x adalah 100

Untuk menampilkan text (string), bisa menggunakan mekanisme


string format. Misalnya yang pertama:

1. print('hai {}'.format('bro'))

Cara yang kedua mirip dengan sintaks C/C++, yakni menggunakan


operator “%” yang ditambahkan dengan "argument specifiers",
misalnya "%s" and "%d". Contohnya saat kita ingin menambahkan
nama kita pada string hello:

1. nama = "Dicoding"

2. print("Halo, %s!" % nama)

Output:
Halo, Dicoding!

Contoh menambahkan string dan integer:

1. nama = "Dicoding"

2. umur = 5

3. print("Umur %s adalah %d tahun." % (nama, umur))

Output:
Umur Dicoding adalah 5 tahun.
Contoh menambahkan objek selain string (otomatis dikonversi):

1. angka = [7, 9, 11, 13]

2. print("Angka saya: %s" % angka)

Output:
Angka saya: [7, 9, 11, 13]

Beberapa argument specifier yang umum digunakan:

1. %s - String

2. %d - Integers

3. %f - Bilangan Desimal

4. %.<digit>f - Bilangan desimal dengan sejumlah digit angka


dibelakang koma.

5. %x/%X - Bilangan bulat dalam representasi Hexa (huruf


kecil/huruf besar)

Contoh mencetak representasi Hexa (bilangan basis 16):

1. a, b = 10, 11

2. a, b

3. print('a: %x and b: %X' % (a, b))

Output:
(10, 11)
a: a and b: B

Referensi yang dapat dipelajari:


https://docs.python.org/id/3.8/library/string.html#format-
specification-mini-language
Input
input()

Untuk memungkinkan user memberikan input pada program Anda,


gunakan fungsi input(), dengan argumen dalam kurung () adalah
teks yang ingin ditampilkan (prompt) dan variabel sebelum tanda
sama dengan (=) adalah penampung hasil dari input pengguna:

1. nilai = input('Masukkan angka : ')

Output:
Masukkan angka : 90

1. print(nilai)

Output:
'90'

Secara default, input dari user adalah string (walaupun pada contoh
di atas, 90 sebenarnya dimaksudkan sebagai integer) yang ditandai
dengan petik. Untuk itu diperlukan fungsi konversi yang akan
dibahas pada modul-modul selanjutnya, misalnya int() dan float().

1. print(int(nilai))

Output:
90

1. print(float(nilai))

Output:
90.0
Jika input merupakan string berisi ekspresi matematika, maka
konversi dengan int() atau float() akan menghasilkan error. Anda
dapat menggunakan fungsi eval() yang sekaligus juga berfungsi
menyelesaikan ekspresi matematika. Anda akan mempelajari lebih
jauh mengenai fungsi pada modul Fungsi.

1. print(int('90+10'))

Output:
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '90+10'

1. print(eval('90+10'))

Output:
100

Command-line arguments
Python memungkinkan Anda untuk membuat sebuah "skrip" berupa
deretan kode program kemudian disimpan dalam sebuah berkas
dengan nama akhiran .py (misal: skrip.py).
Berkas ini dapat dipanggil sebagai skrip di konsol atau command
prompt, serta dapat ditambahkan parameter tambahan saat
memanggil skrip tersebut.

1. $ python test.py arg1 arg2 arg3

Hal ini difasilitasi oleh module sys yang telah dibawa secara default
pada Python. Untuk menggunakannya, jangan lupa lakukan import
terlebih dahulu:

1. import sys
Utamanya fungsi yang akan digunakan adalah sys.argv yang
memuat seluruh argumen yang diterima. Anda juga dapat
menggunakan len(sys.argv) untuk mengetahui banyaknya argumen
yang ditampung.
Contoh, sebuah berkas test.py yang akan menambahkan tiga
argumen:

1. import sys

2. print('Jumlah arguments:', len(sys.argv), 'arguments.')

3. print('Argument List:', str(sys.argv))

4. print(sys.argv[1])

Jalankan pada konsol/terminal/command prompt:

1. $ python test.py arg1 arg2 arg3

Output:
Jumlah arguments: 4 arguments.
Argument List: ['test.py', 'arg1', 'arg2', 'arg3']
arg1

Dynamic Typing pada Python


Python dikenal sebagai salah satu bahasa yang menerapkan
dynamic typing, yakni bahasa pemrograman yang hanya
mengetahui tipe variabel saat program berjalan dan dilakukan
assignment. Tentu saja, pada Python juga umumnya tidak ada
deklarasi variabel, hanya berupa assignment statement. Cara ini
adalah salah satu bentuk simplifikasi alokasi memori dalam bahasa
Python. Anda dapat selalu memeriksa tipe variabel yang digunakan
dengan fungsi type() dan memastikan tipe variabel yang tepat
dengan metode isinstance(). Anda akan mempelajari lebih jauh
mengenai fungsi pada modul Fungsi dan mengenai class pada
modul Pemrograman Berorientasi Objek.
Contoh:
1. # Ketika kita memberikan nilai 6 pada variabel x

2. x = 6

3. print(type(x))

4. # Kemudian Berikan string “hello” pada variabel x di baris


selanjutnya

5. x = 'hello'

6. print(type(x))

Output:
<class 'int'>
<class 'str'>

Setiap bahasa pemrograman tentunya memiliki beberapa tipe atau


kategori objek dan variabel yang dapat digunakan serta bagaimana
kategori tersebut diperlakukan (behavior, fungsi, dsb). Contohnya,
sebuah kategori bertipe “numerik” dengan “86” adalah sebuah
objek dari tipe numerik tersebut. Pada bahasa Python, interpreter
hanya mengartikan setiap baris kode saat dijalankan, dan
sepanjang daur (cycle) program, dimungkinkan adanya perubahan
dalam tipe/kategori variabel. Bagian ini hanya memberikan
gambaran mengenai dinamisme tipe, Anda akan belajar lebih jauh
tentang kondisional pada modul Percabangan. Contoh dinamisme
Python dapat dilihat pada contoh berikut:

1. if False:

2. 9 + "satu" # Baris ini tidak dioperasikan, sehingga tidak


muncul notifikasi TypeError

3. else:

4. 9 + 1

Output:
10
Padahal jika kita jalankan 9 + "satu":

1. 9 + "satu"

Output:
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Pada contoh pertama, cabang 9+ “satu” tidak pernah dioperasikan.


Sehingga kode tidak akan diperiksa. Namun pada contoh kedua,
pernyataan tersebut menimbulkan TypeError karena Anda tidak
dapat menggabungkan Integer dan String. Bagian ini hanya
memberikan gambaran tentang operasi antar tipe, Anda akan
mempelajari lebih jauh tentang kesalahan (Error) di modul
Penanganan Kesalahan.
Berikut, adalah contoh untuk assignment:

1. contoh = "Halo, Buchori"

2. print(type(contoh))

Output:
<class 'str'>

1. contoh = 19.7

2. print(type(contoh))

Output:
<class 'float'>

Seperti dijelaskan sebelumnya, fungsi type() dapat digunakan untuk


mengidentifikasi tipe variabel pada saat ia diperiksa. Contoh di atas
menunjukkan bahwa tipe dari variabel “contoh” dapat berubah dan
Python dapat menerima perubahan ini pada saat program
dijalankan.
Python menggunakan dynamic typing sebagai opsi utama, namun
sejak Python 3.6 sudah mendukung juga static typing. Pada PEP
484 diperkenalkan type hints, yang memungkinkan Anda untuk
melakukan static type checking pada Python.
Static typing seperti didefinisikan di PEP 484, 526, 544, 560,
dan 563 dibangun bertahap di atas runtime Python yang ada dan
dibatasi oleh perilaku sintaksis dan runtime yang ada. Tidak seperti
pada bahasa lain, type hints tidak menjadikan sebuah variabel
menjadi static typed, melainkan memberikan saran tipe. Terkait
static type hints, dapat dibaca pada PEP 484.

Duck Typing

Python juga sering diafiliasikan dengan metode duck typing, yang


merefleksikan pada frase:
“if it walks like a duck and it quacks like a duck, then it
must be a duck”
(Jika sesuatu berjalan seperti bebek dan bersuara seperti bebek,
maka kemungkinan besar ia adalah bebek).
Duck typing adalah sebuah konsep, tipe atau kelas dari sebuah
objek tidak lebih penting daripada metode yang menjadi
perilakunya. Duck typing ini tidak terkait langsung dengan dynamic
typing atau static typing, ini hanya memberikan keleluasaan pada
developer untuk tidak perlu mencemaskan tentang tipe atau kelas
dari sebuah objek, yang lebih penting adalah kemampuan
melakukan operasinya. Sehingga untuk memeriksa dan mengetahui
tipe sebuah objek, Anda cukup memastikan metode/fungsi/behavior
dari objek tersebut. Misalnya fungsi len() untuk mengetahui panjang
string, yang tidak berlaku pada variabel numerik (misalnya integer).

1. x=546

2. print(len(x))
Output:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

Transformasi Angka, Karakter dan String


Pada tipe data String, terdapat banyak metode bawaan yang bisa
kita gunakan untuk mentransformasi/mengubah nilai Stringnya. Ada
yang berfungsi mengubah string menjadi huruf besar atau kecil;
pengecekan string; penggabungan string; dan sebagainya. Mari kita
bahas lebih rinci dan kelompokkan berdasarkan kategorinya:

Mengubah Huruf Besar/Kecil

Dalam kategori ini terdapat beberapa metode yang dapat kita


gunakan untuk menjadikan sebuah string menjadi huruf besar atau
kecil yaitu menggunakan upper() atau lower(). Penasaran
bagaimana penerapan upper() dan lower()? Simak uraian di
bawah ini ya.

upper()
Pembahasan pertama kita mulai dari upper().
Metode upper() dapat digunakan untuk mengonversi karakter atau
string dari huruf kecil ke huruf besar. Namun, jika huruf asalnya
adalah huruf besar, maka huruf tersebut tidak berubah. Perhatikan
contoh kode di bawah ini:

1. kata = 'dicoding'

2. kata = kata.upper()

3. print(kata)

Output:
DICODING
lower()
Selanjutnya kita akan membahas lower(). Metode ini kebalikan
dari upper() yang dapat mengonversi karakter atau string dari
huruf besar ke huruf kecil. Namun jika huruf asalnya adalah huruf
kecil, maka huruf tersebut tidak berubah.

1. kata = ‘DICODING’

2. kata = kata.lower()

3. print(kata)

Output:
dicoding

Catatan: Jika terdapat karakter bukan huruf (seperti simbol atau


angka) yang tidak memiliki opsi kapital, maka karakter tersebut
tidak diubah.
Kedua metode ini, baik upper() maupun lower() adalah metode
built-in atau bawaan dari python yang digunakan untuk menangani
operasi string. Perlu Anda ingat, kata ‘Dicoding’, ‘DIcoding’, atau
‘DICODING’ tidak sama satu dengan lainnya, jika Anda mempunyai
suatu fungsi yang mengharuskan pengguna mengisi dengan huruf
kecil atau huruf besar, Anda bisa menggunakan
metode upper() atau lower().

Awalan dan Akhiran

Kategori selanjutnya adalah awalan dan akhiran yang di dalamnya


terdapat metode rstrip(), lstip(), dan strip(). Ketiga metode
tersebut berguna jika Anda ingin menghapus karakter whitespace
pada suatu string. Berikut uraian lengkap dari ketiga metode
tersebut:
rstrip()
Metode pertama yang kita bahas dari kategori awalan dan akhiran
adalah rstrip(). Metode ini akan menghapus whitespace pada
sebelah kanan string atau akhir string. Berikut contoh penerapan
kode pada rstrip().

1. print('Dicoding '.rstrip())

Output:
Dicoding

lstrip()
Selanjutnya kita bahas tentang lstrip() yang bertugas untuk
menghapus whitespace pada sebelah kiri atau awal string. Berikut
contoh penerapan kodenya:

1. print(' Dicoding'.lstrip())

Output:
Dicoding

strip()
Metode strip() akan menghapus whitespace pada bagian awal atau
akhir string.

1. print(' Dicoding '.strip())

Output:
Dicoding

Anda juga bisa menentukan mana karakter atau bagian yang ingin
dihilangkan, misalnya:

1. kata = 'CodeCodeDicodingCodeCode'

2. print(kata.strip('Code'))

Output:
Dicoding

Ketika kita masukkan ‘Code’ sebagai parameter, maka setiap kata


‘Code’ akan terhapus di awal maupun di akhir.

startswith()
Metode startswith() akan mengembalikan nilai True jika string
diawali dengan kata awalan tertentu yang kita inginkan, jika tidak
maka akan mengembalikan nilai False.

1. print('Dicoding Indonesia'.startswith('Dicoding'))

Output:
True

endswith()
Metode endswith() ini kebalikannya dari metode startswith(),
metode ini akan mengembalikan nilai True jika string diakhiri
dengan kata akhiran tertentu yang kita inginkan, jika tidak maka
akan mengembalikan nilai False.

1. print('Dicoding Indonesia'.endswith('Indonesia'))

Output:
True

Dengan metode ini, Anda dapat melakukan perbandingan string


berupa awal atau akhirannya saja, sehingga tidak perlu
memisahkan string-nya dan menggunakan operator equal to (==).

Memisah dan Menggabung String

Kategori selanjutnya adalah memisah dan menggabung string.


Dalam kategori ini terdapat beberapa metode yaitu join() untuk
menggabungkan string dan split() untuk memisahkan string. Berikut
uraian lengkap dari kedua metode tersebut.

join()
Metode join() adalah metode yang dipakai untuk menggabungkan
sejumlah string.

1. print(' '.join(['Dicoding', 'Indonesia', '!']))

Output:
Dicoding Indonesia !

Contoh lain:

1. print('123'.join(['Dicoding', 'Indonesia', '!']))

Output:
'Dicoding123Indonesia123!'

Mari kita bahas. String dengan operasi join() akan disisipkan di


antara string yang berada di parameter. Seperti whitespace
pada 'Dicoding Indonesia !' atau seperti angka 123
pada 'Dicoding123Indonesia123!'

split()
Sebaliknya, metode split() adalah metode yang memisahkan
substring berdasarkan delimiter tertentu (defaultnya
adalah whitespace, tab, atau newline).

1. print('Dicoding Indonesia !'.split())

Output:
['Dicoding', 'Indonesia', '!']
Anda dapat mengubah parameter split (delimiter), perhatikan
contoh berikut:

1. print('Dicoding123Indonesia123!'.split('123'))

Output:
['Dicoding', 'Indonesia', '!']

Anda juga dapat menggunakan metode split() ini untuk


memisahkan setiap baris pada string multiline:

1. print('''Halo,

2. aku ikan,

3. aku suka sekali menyelam

4. aku tinggal di perairan.

5. Badanku licin dan renangku cepat.

6. Senang berkenalan denganmu.'''.split('\n'))

Output:
['Halo,', 'aku ikan,', 'aku suka sekali menyelam', 'aku tinggal di perairan.', 'Badanku licin dan renangku cepat.', 'Senang
berkenalan denganmu.']

Mengganti Elemen String

Kali ini kita masuk dalam kategori mengganti elemen string yang di
dalamnya terdapat metode replace(). Seperti apakah contoh kode
dari metode replace()? Yuk, simak penjelasannya di bawah ini.

replace()
Metode replace() dapat mengembalikan string baru dalam kondisi
substring telah tergantikan dengan parameter yang dimasukkan.
Berikut contoh kodenya.

1. string = "Ayo belajar Coding di Dicoding"


2. print(string.replace("Coding", "Pemrograman"))

Output:
Ayo belajar Pemrograman di Dicoding

Perhatikan bahwa "coding" di frase "Dicoding" tidak berubah,


maka fungsi replace bersifat Case Sensitive.

Opsional: Parameter ketiga pada replace dapat diisi jumlah


substring yang ingin diganti seperti di bawah ini.

1. string = "Ayo belajar Coding di Dicoding karena Coding adalah


bahasa masa depan"

2. print(string.replace("Coding", "Pemrograman", 1))

Output:
Ayo belajar Pemrograman di Dicoding karena Coding adalah bahasa masa depan

Perhatikan bahwa "Coding" kedua tidak diubah.

Pengecekan String

Selanjutnya kita akan membahas kategori pengecekan string.


Dalam kategori pengecekan string kita akan mengecek boolean dari
sebuah string. Metode-metodenya antara lain, isupper(),
islower(), isalpha(), isalnum(), isdecimal(), dan sebagainya.
Berikut uraian lengkapnya.

isupper()
Metode isupper() akan mengembalikan nilai True jika semua huruf
dalam string adalah huruf besar, dan akan mengembalikan
nilai False jika terdapat satu saja huruf kecil di dalam string
tersebut.
Contoh yang akan mengembalikan nilai True:
1. kata = ‘DICODING’

2. kata.isupper()

Output:
True

Contoh yang akan mengembalikan nilai False:

1. kata = ‘Dicoding’

2. kata.isupper()

Output:
False

islower()
Metode islower() adalah kebalikan dari metode isupper(), metode
ini akan mengembalikan nilai True jika semua huruf dalam string
adalah huruf kecil, dan akan mengembalikan nilai False jika
terdapat satu saja huruf besar di dalam string tersebut.
Contoh yang akan mengembalikan nilai True:

1. kata = ‘dicoding’

2. kata.islower()

Output:
True

Contoh yang akan mengembalikan nilai False:

1. kata = ‘Dicoding’

2. kata.islower()

Output:
False
Bahkan Anda bisa melakukan operasi pada hasil operasinya (chain
of method). Seperti contoh berikut:
Contoh:

1. print('Dicoding'.upper().lower())

2. print('Dicoding'.lower().upper())

3. print('DICODING'.upper().lower().islower())

4. print('DICODING'.upper().lower().isupper())

Output:
‘dicoding’

‘DICODING’

True

False

isalpha()
Metode ini akan mengembalikan nilai True jika semua karakter
dalam string adalah huruf alfabet, jika tidak maka akan
mengembalikan nilai False.

1. ‘dicoding’.isalpha()

Output :
True

isalnum()
Metode ini akan mengembalikan nilai True jika karakter dalam
string adalah alfanumerik yaitu hanya huruf atau hanya angka atau
berisi keduanya, jika tidak maka akan mengembalikan nilai False.

1. ‘dicoding123’.isalnum()

Output :
True
isdecimal()
Metode ini akan mengembalikan nilai True jika karakter dalam
string berisi hanya angka/numerik, jika tidak maka akan
mengembalikan nilai False.

1. ‘12345’.isdecimal()

Output :
True

isspace()
Metode ini akan mengembalikan nilai True jika string berisi hanya
karakter whitespace, seperti spasi, tab, newline, atau
karakter whitespaces lainnya, jika tidak maka akan
mengembalikan nilai False.

1. ‘ ’.isspace()

Output :
True

istitle()
Metode ini akan mengembalikan True jika string berisi huruf kapital
di setiap kata dan dilanjutkan dengan huruf kecil seterusnya, jika
tidak maka akan mengembalikan nilai False.

1. ‘Dicoding Indonesia’.istitle()

Output :
True

Catatan: Semua method di atas mengembalikan nilai boolean dan


tidak boleh kosong.
Jika Anda menginginkan suatu metode validasi input user, maka
metode-metode di atas akan sangat membantu. Anda bisa
mencobanya dengan contoh berikut.
Buatlah file baru pada notepad atau IDE, dan pastikan Anda
menggunakan Python 3 untuk mencobanya (akan ada error saat
menggunakan Python 2.7).

1. while True:

2. print('Masukkan nama Anda:')

3. name = input()

4. if name.isalpha():

5. print("Halo", name)

6. break

7. print('Masukkan nama Anda dengan benar.')

Mari kita bahas. Pada kode di atas, program akan meminta


pengguna untuk memasukkan namanya, yang mana diharuskan
berisi huruf alfabet semua. Jika valid, maka program akan mencetak
‘Halo ‘ disertai nama pengguna dan kemudian program berhenti.
Tapi jika tidak, program meminta pengguna kembali memasukkan
namanya dengan benar. Ketika dijalankan akan seperti berikut:
Output:
Masukkan nama Anda:

dicoding123

Masukkan nama Anda dengan benar.

Masukkan nama Anda:

dicoding

Halo dicoding

Dengan cara ini, Anda dapat melakukan validasi input user. Anda
bisa bereksplorasi lebih lanjut dengan menambahkan
metode isdecimal(), isalnum(), istitle(), dan lain lain.

Formatting pada String


Kategori terakhir yang akan kita bahas pada modul kali ini
adalah formatting pada string. Dalam kategori ini terdapat
beberapa metode yaitu zfill(), rjust(), ljust(), center(), dll. Semua
metode yang akan dijelaskan secara detail di bawah ini, simak baik-
baik ya.

zfill()
Selain metode-metode yang telah kita pelajari di atas, ada juga
metode yang dapat menambahkan nilai numerik berupa 0 di
sebelah kiri sebuah angka atau string menggunakan metode zfill().
Penggunaan metode zfill() ini bisa diterapkan untuk nomor nota
atau nomor antrian. Anda akan menemui kebutuhan untuk
menambahkan awalan 0 misalnya seperti, 0001 untuk angka
awalan 1, 0101 untuk angka awalan 101, dan sebagainya.
Nilai kembalian yang dihasilkan oleh zfill jumlah karakternya kurang
dari atau sama dengan value yang kita masukkan pada
metode zfill. Misalnya jika kita memberi value 10, maka nanti akan
ditulis zfill(10) yang berarti nilai numerik berupa 0 dan angka atau
string yang ada, jumlah karakternya harus kurang dari atau sama
dengan value zfill tersebut.
Bingung bagaimana maksud pernyataan di atas? Mari kita langsung
praktikkan seperti di bawah ini:

Penerapan zfill pada Angka


Jika kita ingin menerapkan zfill pada data berupa angka, maka kita
harus mengonversinya terlebih dahulu ke dalam bentuk string
menggunakan str() seperti di bawah ini:

1. # Contoh 1: Penggunaan zfill 5 pada angka satuan

2. angka = 5

3. print (str(angka).zfill(5));

4. # Contoh 2: Penggunaan zfill 5 pada angka ratusan

5. angka = 300
6. print (str(angka).zfill(5));

7. # Contoh 3: Penggunaan zfill 5 pada angka desimal negatif


(memiliki koma)

8. angka = -0.45

9. print (str(angka).zfill(5));

10. # Contoh 4: Penggunaan zfill 7 pada angka desimal negatif


(memiliki koma)

11. angka = -0.45

12. print (str(angka).zfill(7));

Ketika kode di atas dijalankan, outputnya akan terlihat seperti di


bawah ini:
00005

00300

-0.45

-000.45

Masing-masing contoh di atas menghasilkan output yang berbeda-


beda. Kita akan membahasnya satu per satu.
Pada contoh pertama menghasilkan output 00005. Jumlah nol yang
berada di sebelah kiri angka lima adalah 4. Mengapa hanya 4 saja?
Hal tersebut dikarenakan kita telah mendefinisikan nilai zfill(5),
sehingga ‘nol’ akan ditambahkan selama jumlah karakternya
kurang dari atau sama dengan 5.
Kita beralih ke contoh kedua yaitu angka 300 yang masih
menggunakan zfill(5). Kemudian menghasilkan output 00300.
Angka 300 sendiri sudah terdapat 3 karakter, sehingga nilai ‘nol’
yang perlu ditambahkan berjumlah 2.
Selanjutnya pada contoh ketiga yang memiliki angka -0.45 dengan
zfill(5) menghasilkan output yang sama yaitu -0.45. Mengapa bisa
demikian? Hal tersebut dikarenakan jumlah karakter yang ada
sudah berjumlah 5 yang di mana karakter koma (“,”) dan negatif
(“-”) juga dihitung. Sehingga tidak ada nilai 0 yang ditambahkan
pada sebelah kiri dari data angka.
Namun, bagaimana jika pada contoh ketiga nilai zfill kita ubah
menjadi 7 sehingga tertulis zfill(7). Maka semuanya akan terjawab
di contoh keempat yang menghasilkan -000.45 yang menambahkan
dua nilai ‘nol’ pada sebelah kiri data angka. Zfill otomatis
mendeteksi tanda negatif (“-”) pada sebuah nilai sehingga otomatis
nilai ‘nol’ ditempatkan setelah tanda negatif.

Penerapan zfill pada String


Lain halnya ketika data yang ingin kita tambahkan nilai 0 berupa
string. Kita tidak perlu mengonversi data tersebut ke dalam bentuk
string karena memang asalnya sudah dalam bentuk string. Untuk
memperjelas pernyataan tersebut perhatikan contoh di bawah ini.

1. # Contoh 1

2. kata = 'aku'

3. print (kata.zfill(5));

4. # Contoh 2

5. kata = 'kamu'

6. print (kata.zfill(5));

7. # Contoh 3

8. kata = 'dirinya'

9. print (kata.zfill(5));

Ketika kode di atas dijalankan, outputnya akan terlihat seperti di


bawah ini:
00aku

0kamu

dirinya
Masing-masing contoh di atas menghasilkan output yang berbeda-
beda. Kita akan membahasnya satu per satu.
Pada contoh pertama menghasilkan output 00aku. Hal tersebut
dikarenakan kita menggunakan nilai zfill(5) yang di mana
karakternya hanya ada 3 yaitu a, k, dan u. Sehingga nilai ‘nol’ yang
berjumlah 2 akan ditambahkan sebelum kata “aku”.
Sama halnya seperti sebelumnya, pada contoh kedua ini kurang
lebih menghasilkan output yang sama. Namun, bedanya adalah
jumlah karakter yang ada pada contoh kedua ini berjumlah 4 yaitu
k,a,m, dan u. Sehingga dengan nilai zfill(5) menghasilkan output
0kamu.
Kemudian pada contoh ketiga menghasilkan output string yang
sama dengan aslinya yaitu string “dirinya” menghasilkan output
“dirinya” juga. Mengapa bisa demikian? Hal tersebut karena jumlah
karakter pada kata “dirinya” lebih dari nilai zfill(5). Sehingga nilai
string yang dikembalikan utuh seperti aslinya (tanpa dikurangi atau
ditambahkan 0).

Teks rata kanan/kiri/tengah dengan rjust(), ljust(), dan center()


Anda dapat merapikan pencetakan teks di layar dengan metode
rjust(), ljust() atau center(). Sesuai artinya,
metode rjust() digunakan untuk membuat teks rata kanan,
metode ljust() digunakan untuk membuat teks rata kiri,
dan center() digunakan untuk membuat teks rata tengah. Ketiga
metode ini akan menambahkan spasi pada string untuk
membuatnya sesuai. Parameternya berupa integer yang
merupakan panjang teks secara keseluruhan (bukan jumlah spasi
yang ditambahkan):

rjust()
Berikut penerapan rjust() dan contoh kodenya. Pembahasan
lengkap akan dijelaskan di bawah setelah uraian kodenya ya.
Contoh metode rjust():

1. 'Dicoding'.rjust(20)
Output:
' Dicoding'

Contoh metode ljust():

1. 'Dicoding'.ljust(20)

Output:
'Dicoding '

Mari kita bahas. 'Dicoding'.rjust(20) dapat diartikan sebagai kita


ingin menuliskan ‘Dicoding’ dengan mode rata kanan yang total
panjang stringnya adalah 20. Karena panjang ‘Dicoding’ adalah 8
karakter, maka 12 spasi akan ditambahkan di sebelah kiri.
Begitu pula pada 'Dicoding'.rjust(20). Kita ingin menuliskan
‘Dicoding’ dengan mode rata kiri yang total panjang stringnya
adalah 20. Karena panjang ‘Dicoding’ adalah 8 karakter, maka 12
spasi akan ditambahkan di sebelah kanan.
Selain spasi, Anda juga bisa menambahkan karakter lain dengan
mengisikan parameter kedua pada
fungsi rjust() atau ljust() seperti berikut:

1. 'Dicoding'.ljust(20, '!')

Output:
'Dicoding!!!!!!!!!!!!'

center()
Metode center() seperti namanya akan membuat teks menjadi rata
tengah.

1. 'Dicoding'.center(20)

Output:
' Dicoding '
Contoh lain:

1. 'Dicoding'.center(20, '-')

Output:
'------Dicoding------'

Jika Anda memprogram aplikasi berbasis konsol (CLI), maka fungsi-


fungsi di atas akan sangat berguna saat membuat tabulasi/tabel.

String Literals
Umumnya, string ditulis dengan mudah di Python, diapit oleh tanda
petik tunggal. Tetapi, dalam kondisi tertentu, dibutuhkan petik
tunggal di tengah string (misalnya struktur kepemilikan dalam
Bahasa Inggris - Dicoding’s Cat atau penyebutan Jum’at pada hari
dalam bahasa Indonesia).
Apabila kita menuliskannya sebagai berikut,

1. st1 = ‘Jum’at’

Maka Python akan salah mengira bahwa string berakhir setelah


huruf m dan selebihnya merupakan kode yang invalid. Namun
Python memperbolehkan Anda menggunakan petik dua seperti
Anda menggunakan petik tunggal. Dalam kasus sebelumnya, Anda
cukup mengetikkan:

1. st1 = "Jum’at"

Dan dalam contoh tersebut, Python mengenali bahwa petik tunggal


adalah bagian tidak terpisahkan dari string tersebut. Bagaimana
jika kita memerlukan kedua jenis petik dalam string tunggal?
Python menyediakan escape character.
Escape Character memungkinkan Anda untuk menggunakan
karakter yang sebelumnya tidak bisa dimasukkan dalam string.
Umumnya diawali dengan backslash (\) dan diikuti karakter
tertentu yang diinginkan. Contohnya, untuk petik tunggal Anda
dapat menambahkan seperti: \'.
Cara ini merupakan cara paling aman untuk melakukan
penambahan atau penyuntingan dalam variabel. Contohnya
sebagai berikut:

1. st1 = 'Jum\'at'

Python mengetahui bahwa pada Jum\’at, sebelum petik


terdapat backslash (\) yang menandakan petik tunggal merupakan
bagian dari string dan bukan merupakan akhir dari string. Escape
character \' dan \" memungkinkan Anda untuk memasukkan
karakter ' dan '' dalam bagian string. Beberapa contoh Escape
Character

 \' Single quote


 \" Double quote
 \t Tab
 \n Newline (line break)
 \\ Backslash

Masukkan contoh berikut pada shell python atau notebook:

1. print("Halo!\nKapan terakhir kali kita bertemu?\nKita bertemu


hari Jum\'at yang lalu.")

Output:
Halo!

Kapan terakhir kali kita bertemu?

Kita bertemu hari Jum’at yang lalu

Selain tanda kutip dan kutip-dua, untuk penulisan String di Python


juga bisa menggunakan 3 kutip-satu atau 3 kutip-dua, yang juga
memiliki kemampuan untuk menyimpan String lebih dari satu baris
(multi-line).

 multi_line = """Halo!
 Kapan terakhir kali kita bertemu?
 Kita bertemu hari Jum’at yang lalu."""
 print(multi_line)

Output:
Halo!

Kapan terakhir kali kita bertemu?

Kita bertemu hari Jum’at yang lalu

Raw Strings
Python juga menyediakan cara untuk mencetak string sesuai
dengan apa pun input atau teks yang diberikan. Metode ini
dinamakan Raw Strings. Umumnya digunakan untuk regex atau
beberapa implementasi lain yang sangat bergantung pada
keberadaan backslash. Untuk mengimplementasikan raw strings,
sisipkan huruf r sebelum pembuka string:

1. print(r'Dicoding\tIndonesia')

Output:
Dicoding\tIndonesia
Seharusnya, perintah \t akan membuat tab dan menghasilkan
Dicoding Indonesia, tapi karena kita menggunakan raw strings,
maka kalimat tersebut secara mentah tercetak apa adanya.

Operasi pada List, Set, dan String


Pada modul berikut, Anda akan belajar tentang contoh-contoh
operasi pada list, set, dan string. Beberapa contoh operasi tidak
dapat sekaligus dilakukan pada list, set, dan string. Hal ini karena
perbedaan karakteristik dari masing-masing tipe data. Penjelasan
mengenai apa itu list, set, dan string sudah dijelaskan di Modul Tipe
Data. Anda bisa mengulang kembali modul tersebut untuk lebih
memahaminya ya.

len()
Sebelumnya, Anda sudah mengetahui bahwa slicing digunakan
untuk urutan. Salah satu fungsi yang paling bermanfaat untuk List
atau String adalah len() yang akan menghitung panjang atau
banyaknya elemen dari List (untuk String menjadi menghitung
jumlah karakternya).

1. contoh_list = [1, 3, 3, 5, 5, 5, 7, 7, 9]
2. print(contoh_list)
3. print(len(contoh_list))
4.
5. contoh_set = set([1, 3, 3, 5, 5, 5, 7, 7, 9])
6. print(contoh_set)
7. print(len(contoh_set))
8.
9. contoh_string = "Belajar Python"
10. print(contoh_string)
11. print(len(contoh_string))

1. Output:

[1, 3, 3, 5, 5, 5, 7, 7, 9]

{1, 3, 5, 7, 9}

Belajar Python

14

min() dan max()

Selain menghitung panjang atau banyaknya elemen, Anda juga


dapat mengetahui berapa nilai minimum dan maksimum dari suatu
list menggunakan fungsi min() dan max(). Berikut contohnya.

1. angka = [13, 7, 24, 5, 96, 84, 71, 11, 38]


2. print(min(angka))
3. print(max(angka))

Output:
5

96

Count

Untuk mengetahui berapa kali suatu objek muncul dalam list, Anda
dapat menggunakan fungsi count().

1. genap = [2, 4, 4, 6, 6, 6, 8, 10, 10]


2. print(genap.count(6))
3. string = "Belajar Python di Dicoding sangat menyenangkan"
4. substring = "a"
5. print(string.count(substring))

Output:

Penggabungan dan Replikasi

Pada List juga dimungkinkan adanya penggabungan (+) dan


replikasi (*).

1. angka = [2, 4, 6, 8]
2. huruf = ['P', 'Y', 'T', 'H', 'O', 'N']
3. gabung = angka + huruf
4. print(gabung)

Output:

[2, 4, 6, 8, 'P', 'Y', 'T', 'H', 'O', 'N']

Contoh replikasi:

1. learn = ['P', 'Y', 'T', 'H', 'O', 'N']


2. replikasi = learn * 2
3. print(replikasi)
Output:

['P', 'Y', 'T', 'H', 'O', 'N', 'P', 'Y', 'T', 'H', 'O', 'N']

Fungsi pengali juga dapat Anda manfaatkan untuk inisialisasi List.

1. tujuh = [7]*7
2. print(len(tujuh))
3. print(tujuh)

Output:

[7, 7, 7, 7, 7, 7, 7]

Range

Fungsi range() memberikan deret bilangan dengan pola tertentu.


Untuk melakukan perulangan (misalnya for) dalam mengakses
elemen list, Anda dapat menggunakan fungsi range() pada Python.
Lebih detail mengenai operasi perulangan akan dibahas pada
modul Perulangan dan Kontrol Perulangan.

Fungsi range dapat memiliki 1-3 parameter:

1. Range dengan 1 parameter n: membuat deret bilangan yang


dimulai dari 0, sebanyak n bilangan.
1. for i in range(5):
2. print(i)

Output:

4
2. Range dengan 2 parameter n,p: membuat deret bilangan yang
dimulai dari n, hingga sebelum p (bilangan p tidak ikut). Sering
disebut sebagai inklusif n (deret dimulai bilangan n) dan
eksklusif p (deret tidak menyertakan bilangan p).
1. for i in range(1, 11):
2. print(i)

Output:

10

3. Range dengan 3 parameter n,p,q: membuat deret bilangan


yang dimulai dari n, hingga sebelum p (bilangan p tidak ikut),
dengan setiap elemennya memiliki selisih q.
1. print([_ for _ in range(0,20,5)])

Output:

[0, 5, 10, 15]

in dan not in
Untuk mengetahui sebuah nilai atau objek ada dalam list, Anda
dapat menggunakan operator in dan not in. Fungsi ini akan
mengembalikan nilai boolean True atau False. Contohnya adalah
sebagai berikut:

1. kalimat = "Belajar Python di Dicoding sangat menyenangkan"


2. print('Dicoding' in kalimat)
3. print('tidak' in kalimat)
4. print('Dicoding' not in kalimat)
5. print('tidak' not in kalimat)

Output:
True

False

False

True

Memberikan nilai untuk multiple variable

Anda kadang memiliki beberapa variabel dan perlu memberikan


nilai pada variabel-variabel tersebut. Secara konvensional, Anda
bisa menandai variabel-variabel dengan nilai yang Anda inginkan,
satu per satu. Python memiliki cara yang lebih praktis! Anda dapat
memberikan nilai untuk beberapa variabel sekaligus dari
elemen List atau Tuple tanpa perlu menandai satu per satu seperti:

1. data = ['shirt', 'white', 'L']


2. apparel = data[0]
3. color = data[1]
4. size = data[2]

Anda dapat melakukannya dengan cara:

1. data = ['shirt', 'white', 'L'] # From List


2. apparel, color, size = data
3. data = ('shirt', 'white', 'L') # From Tuple
4. apparel, color, size = data

Tentu saja, jumlah variabel dan jumlah item pada List/Tuple harus
sama. Jika tidak, Python akan memberikan ValueError. Bagian ini
hanya memberikan gambaran tentang operasi pada List/Tuple,
Anda akan mempelajari lebih jauh tentang kesalahan (Error) di
modul Penanganan Kesalahan.

1. lidata = ['shirt', 'white', 'L'] # From List


2. apparel, color, size, price = data

Output:

ValueError Traceback (most recent call last)

<ipython-input-60-de8a162c18fd> in <module>

1 list = ['shirt', 'white', 'L'] # From List

----> 2 apparel, color, size, price = list

ValueError: not enough values to unpack (expected 4, got 3)

Catatan : Penggunaan assignment pada multi variabel ini dapat


Anda gunakan untuk menukar nilai dua atau lebih variabel:

1. apparel, color = 'shirt', 'white'


2. apparel, color = color, apparel
3. print(apparel)
4. print(color)

Output:

white

shirt

Sort

Jika Anda ingin mengurutkan angka atau urutan huruf, maka Anda
bisa menggunakan metode sort(). Metode sort() ini bisa
mengurutkan List. Perhatikan contoh di bawah:

Contoh:

1. angka = [100, 1000, 500, 200, 5]


2. angka.sort()
3. print(angka)
Output:

[5, 100, 200, 500, 1000]

Contoh lain:

1. kendaraan = ['motor', 'mobil', 'helikopter', 'pesawat']


2. kendaraan.sort()
3. print(kendaraan)

Output:

['helikopter', 'mobil', 'motor', 'pesawat']


Anda juga dapat memasukkan keyword reverse=True di dalam
parameter untuk menjadikan urutannya terbalik.

1. kendaraan = ['motor', 'mobil', 'helikopter', 'pesawat']


2. kendaraan.sort(reverse=True)
3. print(kendaraan)

Output:

['pesawat', 'motor', 'mobil', 'helikopter']


Beberapa hal yang perlu Anda ketahui:

1. Metode sort langsung melakukan pengurutan pada variabel


yang dioperasikannya, sehingga Anda tidak perlu melakukan
operasi assignment (=).
2. Metode sort tidak dapat mengurutkan list yang memiliki angka
dan string sekaligus di dalamnya.
Contoh:
1. urutan = ['Dicoding', 1, 2, 'Indonesia', 3]
2. urutan.sort()
3. print(urutan)

Output:
Anda akan mengalami eror seperti berikut:

Traceback (most recent call last):

File "<pyshell#102>", line 1, in <module>


urutan.sort()

TypeError: '<' not supported between instances of 'int' and 'str'

Bagian ini hanya memberikan gambaran tentang operasi sort,


Anda akan mempelajari lebih jauh tentang kesalahan (Error) di
modul Penanganan Kesalahan.

3. Metode sort menggunakan urutan ASCII, sehingga nilai huruf


kapital (uppercase) akan lebih dahulu dibandingkan huruf kecil
(lowercase).
Contoh:
1. kendaraan = ['motor', 'mobil', 'helikopter', 'Pesawat']
2. kendaraan.sort()
3. print(kendaraan)

Output:

['Pesawat', 'helikopter', 'mobil', 'motor']


Untuk mengatasi kendala ini, Anda dapat memasukkan
keyword str.lower pada parameter. Hal ini akan membuat
metode sort menganggap semua objek menggunakan huruf
kecil, tanpa mengubah kondisi asli dari objek tersebut.

Contoh:

4. kendaraan = ['Motor', 'Mobil', 'helikopter', 'pesawat']


5. kendaraan.sort(key=str.lower)
6. print(kendaraan)

Output:

['helikopter', 'Mobil', 'Motor', 'pesawat']


Operator, Operands, dan Expressions
Setiap logika komputasi yang berada dalam program Anda akan
menggunakan ekspresi. Sebuah ekspresi dapat terdiri dari operator
dan operan. Salah satu contoh termudah adalah a + b atau 2 + 3,
yang dapat kita pecah yakni + sebagai operator dan a, b, 2, atau 3
sebagai variabel/operand. Operator jelas memiliki fungsinya
masing-masing dan direpresentasikan dengan simbol atau keyword
tertentu.

Tip: Anda dapat melakukan expression tanpa menggunakan


variabel secara langsung pada mode interaktif Python:

1. print(2 + 3)

Output:

1. print(3 * 5)

Output:

15

Jenis-jenis operator
Simak di bawah ini beberapa operator yang ada di Python.

Matematika dan String

 + (tambah)
o Menambahkan dua objek.
o 3 + 5 menghasilkan 8
o 'a' + 'b' menghasilkan 'ab'.
 - (kurang)
o Mengurangkan operand kedua dari operand pertama. Jika
hanya satu operand, diasumsikan nilai operand pertama
adalah 0.
o -5.2 adalah expression yang sama dengan 0 - 5.2
menghasilkan -5.2.
o 50 - 24 menghasilkan 26.
o Tidak berlaku untuk string, akan menghasilkan
error unsupported operand.
 * (perkalian)
o Mengembalikan hasil perkalian angka atau
mengembalikan string yang diulang sejumlah tertentu.
o 2 * 3 menghasilkan 6.
o 'la' * 3 menghasilkan 'lalala'.
 ** (pangkat)
o Mengembalikan operand pertama pangkat operand
kedua.
o 3 ** 4 menghasilkan 81 (sama dengan 3 * 3 * 3 * 3).

| Tips: untuk akar dua, gunakan pangkat 0.5.

 / (pembagian)
o Mengembalikan hasil pembagian operand pertama
dengan operand kedua (float).
o 13 / 3 menghasilkan 4.333333333333333.
 // (pembagian habis dibagi / div)
o Mengembalikan hasil pembagian operand pertama
dengan operand kedua (bilangan bulat), kecuali jika
salah satu operand adalah float, akan menghasilkan
float.
o 13 // 3 menghasilkan 4.
o -13 // 3 menghasilkan -5.
o 9//1.81 menghasilkan 4.0.
 % (modulo)
o Mengembalikan sisa bagi.
o 13 % 3 menghasilkan 1.
o -25.5 % 2.25 menghasilkan 1.5.

Operasi Bit

 << (left shift)


o Menggeser representasi bit/binary dari operand pertama
sebanyak operand kedua ke kiri.
o 2 << 2 menghasilkan 8.
 2 direpresentasikan sebagai 10 dalam binary.
 Geser ke kiri sebanyak 2x, menjadi 1000
(tambahkan 0 di belakangnya).
o 1000 dalam binary bernilai 8 dalam desimal.
 >> (right shift)
o Menggeser representasi bit/binary dari operand pertama
sebanyak operand kedua ke kanan.
o 11 >> 1 menghasilkan 5.
 11 direpresentasikan sebagai 1011 dalam binary.
 Geser ke kanan sebanyak 1x, menjadi 101.
o 101 dalam binary bernilai 5 dalam desimal.
 & (bit-wise AND)
o Menjalankan operasi binary AND pada representasi
operand pertama dan kedua.
o 5 & 3 menghasilkan 1.
 Representasi binary 5 adalah 101 dan representasi
binary 3 adalah 011.
 101 and 011 bernilai 001.
o 001 dalam desimal adalah 1.
 | (bit-wise OR)
o Menjalankan operasi binary OR pada representasi
operand pertama dan kedua.
o 5 | 3 menghasilkan 7.
 Representasi binary 5 adalah 101 dan representasi
binary 3 adalah 011.
 101 or 011 bernilai 111.
o 111 dalam desimal adalah 7.
 ^ (bit-wise XOR)
o Menjalankan operasi binary XOR pada representasi
operand pertama dan kedua.
o 5 ^ 3 menghasilkan 6.
 Representasi binary 5 adalah 101 dan representasi
binary 3 adalah 011.
 101 xor 011 bernilai 110.
o 110 dalam desimal adalah 6.
 ~ (bit-wise invert)
o Menjalankan operasi binary invert pada representasi
operand.
o Nilai invert dari x adalah -(x+1), menggunakan metode
Two’s Complement
o ~5 menghasilkan -6.
o Lebih lanjut mengenai Two’s Complement dapat dibaca
pada https://en.wikipedia.org/wiki/Two%27s_complement
Perbandingan

 < atau operator.lt (less than)


o Menjalankan perbandingan apakah operand pertama
lebih kecil dari operand kedua.
o 5 < 3 menghasilkan False and 3 < 5 menghasilkan True.
o Perbandingan dapat berisi lebih dari dua operand,
misalnya 3 < 5 < 7 menghasilkan True.
 > atau operator.gt (greater than)
o Menjalankan perbandingan apakah operand pertama
lebih besar dari operand kedua.
o 5 > 3 menghasilkan True.
 <= atau operator.le (less than or equal to)
o Menjalankan perbandingan apakah operand pertama
lebih kecil atau sama dengan operand kedua.
o x = 3; y = 6;
 x <= y menghasilkan True.
 >= atau operator.ge (greater than or equal to)
o Menjalankan perbandingan apakah operand pertama
lebih besar atau sama dengan operand kedua.
o x = 4; y = 3;
 x >= y menghasilkan True.
 == atau operator.eq (equal to)
o Menjalankan perbandingan apakah operand pertama
sama dengan operand kedua.
o x = 2; y = 2;
 x == y menghasilkan True.
o x = 'str'; y = 'stR';
 x == y menghasilkan False.
o x = 'str'; y = 'str';
 x == y menghasilkan True.
 != atau operator.ne (not equal to)
o Menjalankan perbandingan apakah operand pertama
tidak sama dengan operand kedua.
o x = 2; y = 3;
 x != y returns True.
Penggunaan le, lt, gt, ge, eq, ne
Mari kita implementasikan operator perbandingan berikut pada
kasus jumlah kelereng berwarna hijau dan kuning.

1. from operator import *

2. hijau = 5

3. kuning = 10

4. print('Kelereng Hijau = {}'.format(hijau))

5. print('Kelereng Kuning = {}'.format(kuning))

6. for func in (lt, le, eq, ne, ge, gt):

7. print('{}(hijau, kuning): {}'.format(func.__name__, func(hijau,


kuning)))

Output:

Kelereng Hijau = 5
Kelereng Kuning = 10
lt(hijau, kuning): True
le(hijau, kuning): True
eq(hijau, kuning): False
ne(hijau, kuning): True
ge(hijau, kuning): False
gt(hijau, kuning): False

Boolean Operator

 not (boolean NOT)


o Jika x bernilai True, fungsi akan mengembalikan nilai
False.
o Jika x bernilai False, fungsi akan mengembalikan nilai
True.
o x = True;
 not x akan mengembalikan nilai False.
 and (boolean AND)
o x AND y akan mengembalikan nilai False jika x bernilai
False, atau fungsi akan mengembalikan nilai y.
o x = False; y = True;
 x AND y, Fungsi akan mengembalikan nilai False
karena x bernilai False.
 Dalam kasus ini, Python tidak akan mengevaluasi
nilai y karena apapun nilai y tidak akan
mempengaruhi hasil. Hal ini dinamakan short-circuit
evaluation.
 or (boolean OR)
o x OR y, Jika x bernilai True, fungsi akan mengembalikan
nilai True, atau fungsi akan mengembalikan nilai dari y.
o x = True; y = False;
 x OR y, fungsi akan mengembalikan nilai True.
 Dalam kasus ini, Python juga menggunakan short-
circuit evaluation karena apapun nilai y tidak akan
mempengaruhi hasil.

Cara singkat menuliskan operasi


Jika Anda melakukan assignment kembali hasil sebuah expression,
beberapa di antaranya bisa disingkat sebagai berikut:

1. a = 2

2. a = a * 3

Dapat dituliskan sebagai

1. a = 2

2. a *= 3

Perhatikan formatnya menjadi [operand] [operasi] = expression.

Urutan matematis dalam melakukan evaluasi


Jika Anda memiliki expression 2 + 3 * 4, Apakah penambahan
dilakukan terlebih dahulu sebelum perkalian? Jika merujuk pada
aturan yang benar, maka perkalian dilakukan lebih dahulu,
sehingga perkalian memiliki urutan lebih awal/tinggi.
Berikut adalah tabel urutan yang diambil dari
referensi Dokumentasi Python:

Operator Description

lambda Lambda expression

if - else Conditional expression

or Boolean OR

and Boolean AND

not x Boolean NOT

in, not in, is, is not, <, <=, >, >=, !=, == Comparisons, including membership tests and identity tests

| Bitwise OR

^ Bitwise XOR

& Bitwise AND

<<, >> Shifts

+, - Addition and subtraction

*, @, /, //, % Multiplication, matrix multiplication, division, floor division, remainder

+x, -x, ~x Positive, negative, bitwise NOT

** Exponentiation

await x Await expression

x[index], x[index:index], x(arguments...), Subscription, slicing, call, attribute reference


x.attribute

(expressions...), [expressions...], {key: Binding or tuple display, list display, dictionary display, set display
value...},{expressions...}

Tip: Gunakan kurung untuk memudahkan keterbacaan dan


memastikan urutan secara tepat. 2 + (3 * 4) akan lebih mudah
dibaca daripada 2 + 3 * 4, meskipun hasilnya sama

Gunakan kurung untuk mengubah urutan operasi. 2 + 3 * 4


seharusnya dikalikan terlebih dahulu.
Anda dapat menggunakan (2 + 3) * 4 untuk memastikan
penjumlahan dilakukan terlebih dahulu.
Operator di Python juga bersifat asosiatif dari kiri ke-kanan. Artinya,
semua operator yang memiliki tingkatan yang sama akan
dijalankan berurutan dari kiri ke kanan.

Pengecekan Style Guide PEP8


Sampai dengan saat ini, Anda tentu sudah menuliskan kode
pemrograman Python cukup banyak, termasuk di antaranya kode
yang Anda tulis mengalami kesalahan sintaksis atau indentasi. Lalu
bagaimana agar ke depan bisa mencegah hal tersebut terjadi?

Bergantung dengan editor yang Anda gunakan untuk menulis kode


Python, dimana salah satu fitur yang memudahkan penulisan,
sehingga menghemat banyak waktu untuk memformat kode sesuai
arahan gaya penulisan (style guide) PEP8 dan mengecek akan
kemungkinan terjadinya kesalahan (error) pada kode yang ditulis.
Untuk itu akan dijelaskan sejumlah aplikasi yang dapat Anda
gunakan, dengan memanggil perintah atau sebaiknya
diintegrasikan ke editor kode yang Anda pakai, dengan tujuan
untuk membantu Anda mengecek kemungkinan kesalahan dan
kesesuaian dengan PEP8.

Lint
Lint adalah proses pengecekan kode atas kemungkinan terjadi
kesalahan (error), termasuk dalam proses ini adalah mengecek
kesesuaian terhadap arahan gaya penulisan kode (style guide)
PEP8. Aplikasi yang digunakan untuk proses ini disebut linter.
Integrasi linter dengan editor kode Anda akan membuat efisien
dalam menulis kode Python. Pertimbangan ini karena keluaran dari
aplikasi linter hanya berupa teks singkat berupa keterangan dan
kode Error atau Warning atau Kesalahan Konvensi Penamaan
(Naming Conventions), akan dicontohkan selanjutnya.

Dengan lint atau linting akan meminimalkan kode Anda mengalami


error, sebagai contoh salah satunya karena kesalahan indentasi di
Python. Sebelum kode Anda diprotes oleh interpreter Python
dengan IndentationError, lint akan memberitahukannya lebih
dahulu ke Anda.

Berikut akan dibahas 3 jenis aplikasi linter, silakan dicermati


dahulu, tidak harus semuanya diinstal/dicoba, hanya paket yang
menurut Anda sesuai kebutuhan saja yang digunakan. Hasil
keluarannya mungkin mirip, tapi pada kondisi tertentu akan ada
keluaran atau fitur yang mungkin sesuai dengan kebutuhan Anda
menulis kode.

Pycodestyle (sebelumnya bernama pep8)

Pycodestyle adalah aplikasi open source (berlisensi MIT/Expat)


untuk membantu mengecek kode terkait gaya penulisan kode
dengan konvensi PEP8.

Untuk instalasi menggunakan manajer paket pip sebagai


berikut : pip install pycodestyle.

Pylint

Pylint adalah aplikasi open source (berlisensi GPL v2) untuk


melakukan analisis kode Python, mengecek untuk kesalahan (error)
pemrograman, memaksakan standar penulisan kode dengan
mengecek penulisan kode yang tidak baik, serta memberikan saran
untuk refactoring sederhana.

Untuk instalasi menggunakan manajer paket pip sebagai


berikut : pip install pylint.

Flake8

Flake8 adalah aplikasi open source (berlisensi MIT) yang


membungkus sejumlah kemampuan aplikasi lain seperti
pycodestyle, pyflakes, dan sejumlah (skrip/fitur) lainnya.

Untuk instalasi menggunakan manajer paket pip sebagai


berikut : pip install flake8

Selanjutkan kita akan membahas sebuah contoh kode class


sederhana yang akan diproses lint, misal disimpan dalam sebuah
file kal.py. Perhatikan di baris 5, kolom 5 dan kolom 10. Ditulis
berjeda antar huruf agar mudah dicek penomoran kolomnya.

Jika diproses dengan pycodestyle. Menunjukkan error (E301) di


baris 5 kolom 5, serta error (E112) di baris 7 kolom 5.

1. pycodestyle kal.py

2. kal.py:5:5: E301 expected 1 blank line, found 0

3. kal.py:7:5: E112 expected an indented block

Jika diproses dengan pylint. Menunjukkan error (E0001) di baris 7


kolom 10.

1. pylint kal.py

2. ************* Module kal

3. kal.py:7:10: E0001: invalid syntax (<unknown>, line 7) (syntax-


error)

Jika diproses dengan flake8. Menunjukkan error (E301) di baris 5


kolom 5, error (E112) di baris 7 kolom 5, serta error (E999) di baris
7 kolom 10.

1. flake8 kal.py

2. kal.py:5:5: E301 expected 1 blank line, found 0

3. kal.py:7:5: E112 expected an indented block


4. kal.py:7:10: E999 IndentationError: expected an indented block

Setelah kodenya diperbaiki, kali ini diubah secara manual dengan


mengetikkan, pada pembahasan berikutnya mengenai memformat
kode akan menangani hal ini dengan otomatis.

1. """kalkulator"""

2.

3. class Kalkulator:

4. """kalkulator tambah kurang"""

5. def __init__(self, _i):

6. self.i = _i

7.

8. def tambah(self, _i): return self.i + _i

9.

10. def kurang(self, _i):

11. return self.i - _i

Kemudian diproses kembali dengan pycodestyle dan flake8 tidak


memunculkan pesan lagi.

Diproses dengan pylint menghasilkan peringatan tentang lebih dari


satu pernyataan (statement) dalam satu baris, serta kedua fungsi
belum dilengkapi dengan dokumentasi. Hasilnya pylint memberikan
skor 5.71 dari 10.

Memformat Kode
Jika proses lint atau linting hanya melakukan pengecekan, terkait
arahan gaya penulisan kode Anda bisa menggunakan aplikasi
tambahan untuk memformat kode agar sesuai PEP8. Sehingga
untuk Anda yang menggunakan editor kode yang sangat ringan dan
ringkas fitur sekalipun, misalnya tanpa fasilitas lint, tetap bisa
menghasilkan kode sesuai konvensi PEP8.
Proses memformat kode dengan menggunakan aplikasi, cukup
sederhana, setelah melakukan instalasi, akan muncul perintah
dengan nama yang sama dengan nama aplikasinya. Kemudian
perintah itu dapat dieksekusi untuk memformat satu file ataupun
satu direktori kode Python.

Berikut akan dibahas 3 jenis aplikasi untuk memformat kode,


silakan dicermati dahulu, tidak harus semuanya diinstal, hanya
paket yang menurut Anda sesuai kebutuhan saja yang digunakan.

Black

Black adalah proyek open source yang dikembangkan di repository


Python Software Foundation (PSF) dengan lisensi MIT. Untuk
mendapatkan gambaran, versi online (tidak resmi) ada
di https://black.now.sh.

Untuk instalasi menggunakan manajer paket pip sebagai


berikut: pip install black.

YAPF (Yet Another Python Formatter)

YAPF adalah proyek open source yang dikembangkan di repository


Google, dengan lisensi Apache.

Untuk mendapatkan gambaran, versi online (tidak resmi) ada


di https://yapf.now.sh

Untuk instalasi menggunakan manajer paket pip sebagai


berikut: pip install yapf.

Autopep8

Autopep8 adalah proyek open source (berlisensi MIT) yang


termasuk paling awal untuk memformat kode, dengan bantuan lint
pycodestyle. Untuk instalasi menggunakan manajer paket pip
sebagai berikut: pip install autopep8.

Kita akan menggunakan contoh kode sebelumnya kal.py yang berisi


class Kalkulator, versi awal sebelum diperbaiki dan dicek dengan
linter, sebagai berikut.
1. class Kalkulator:

2. """kalkulator tambah kurang"""

3. def __init__(self, _i=0):

4. self.i = _i

5. def tambah(self, _i): return self.i + _i

6. def kurang(self, _i):

7. return self.i - _i

Berikut adalah hasil kode diproses dengan black, dengan


mengeksekusi perintah: black kal.py

1. class Kalkulator:

2. """kalkulator tambah kurang"""

3.

4. def __init__(self, _i=0):

5. self.i = _i

6.

7. def tambah(self, _i):

8. return self.i + _i

9.

10. def kurang(self, _i):

11. return self.i - _i

Kemudian jika diproses dengan yapf, tidak langsung mengubah isi


file kal.py tetapi tampil ke layar, dengan mengekseskusi
perintah: yapf kal.py.

1. class Kalkulator:

2. """kalkulator tambah kurang"""


3. def __init__(self, _i=0):

4. self.i = _i

5.

6. def tambah(self, _i):

7. return self.i + _i

8.

9. def kurang(self, _i):

10. return self.i - _i

Sama dengan yapf, untuk pemrosesan dengan autopep8, tidak


langsung mengubah isi file kal.py tetapi tampil ke layar, dengan
mengeksekusi perintah: autopep8 kal.py.

1. class Kalkulator:

2. """kalkulator tambah kurang"""

3.

4. def __init__(self, _i=0):

5. self.i = _i

6.

7. def tambah(self, _i): return self.i + _i

8.

9. def kurang(self, _i):

10. return self.i - _i

Setelah mempelajari kedua mekanisme: pengecekan gaya


penulisan (style guide) dan proses memformat kode, Anda tinggal
fokus dengan penulisan indentasi dalam kode Python, untuk format
sisanya dapat dibantu oleh aplikasi-aplikasi yang telah kita pelajari
di atas.
Jika Anda menulis dengan editor kode yang sangat sederhana,
anggap saja seperti notepad di Windows atau pico/nano di Linux,
maka dalam menuliskan kode Python cukup perhatikan indentasi
untuk setiap baris pernyataan (statement). Setelah selesai
menuliskan kodenya, simpan kodenya sebagai file .py, lalu eksekusi
perintah linter atau langsung eksekusi perintah aplikasi untuk
memformat kode. Hasilnya, kode Anda sudah dirapikan sesuai
arahan gaya penulisan PEP8 juga dilakukan pengecekan terhadap
kemungkinan kesalahan (jika Anda lakukan linting).

Untuk Anda yang mengikuti instalasi editor kode PyCharm pada


modul Persiapan, secara bawaan sudah menggunakan fitur inspeksi
dengan kemampuan yang kurang lebih sama, meskipun jika Anda
mau, bisa juga menambahkan aplikasi lint yang sudah dijelaskan
sebagai tambahan dari yang bawaan. Demikian juga untuk fitur
format ulang kode juga tersedia secara bawaan di aplikasi
PyCharm.

Python Basic Style Guide - Statement


Gabungan, Trailing Commas, dan Anotasi
Fungsi
Statement gabungan

Usahakan untuk tidak menggabungkan >1 statement pada baris


yang sama.
Disarankan:

1. if foo == 'blah':

2. do_blah_thing()

3. do_one()

4. do_two()

5. do_three()

Tidak disarankan:

1. if foo == 'blah': do_blah_thing()


2. do_one(); do_two(); do_three()

Anda diperbolehkan untuk membuat sebuah konten/isi dari


if/for/while yang cukup pendek untuk diletakkan dalam satu baris
(program tetap berjalan). Namun pastikan tidak melakukannya jika
if/for/while Anda bertingkat atau bersifat multi clause, misalnya if-
else, try-finally, dan sebagainya.

Tidak disarankan:

1. if foo == 'blah': do_blah_thing()

2. for x in lst: total += x

3. while t < 10: t = delay()

Sangat tidak disarankan:

1. if foo == 'blah': do_blah_thing()

2. else: do_non_blah_thing()

3. try: something()

4. finally: cleanup()

5. do_one(); do_two(); do_three(long, argument,

6. list, like, this)

7. if foo == 'blah': one(); two(); three()

Penggunaan Trailing Commas

Koma di bagian akhir (trailing commas) umumnya bersifat opsional,


satu statemen dimana ia bersifat wajib adalah saat kita membuat
variabel menggunakan tipe tuple dengan satu elemen. Hal ini
umumnya diperjelas dengan kurung untuk menghindari
penghapusan atau pembersihan.

Disarankan:

1. FILES = ('setup.cfg',)
Tidak disarankan:

1. FILES = 'setup.cfg',

Saat trailing comma bersifat redundan, Anda akan merasakan


kemudahannya saat menggunakan VCS (Version Control System),
atau pada kode yang mungkin Anda tambahkan dalam beberapa
waktu kedepan. Pola yang disarankan adalah meletakkan nilai atau
string pada sebuah baris baru, mengikuti indentasi yang ada, dan
menambahkan trailing comma, dan menutup kurung/kurawal/siku
pada baris selanjutnya.

Tidak umum jika Anda meletakkan trailing comma pada baris di


mana Anda menutup kurung/kurawal/siku, kecuali dalam tuple
dengan satu elemen.

Disarankan:

1. FILES = [

2. 'setup.cfg',

3. 'tox.ini',

4. ]

5. initialize(FILES,

6. error=True,

7. )

Tidak disarankan:

1. FILES = ['setup.cfg', 'tox.ini',]

2. initialize(FILES, error=True,)

Anotasi Fungsi

Penggunaan anotasi fungsi sebaiknya menggunakan aturan baku


untuk titik dua (:) dan menggunakan spasi untuk penggunaan ->.
Hal ini dijelaskan lebih lanjut di PEP 484.

1. Yes:
2. def munge(input: AnyStr): ...

3. def munge() -> AnyStr: ...

4.

5. No:

6. def munge(input:AnyStr): ...

7. def munge()->PosInt: …

Tidak menggunakan tanda sama dengan (=) untuk


mengindikasikan keyword argumen atau nilai dasar/default pada
parameter fungsi tanpa menggunakan anotasi.

1. Yes:

2. def complex(real, imag=0.0):

3. return magic(r=real, i=imag)

4.

5. No:

6. def complex(real, imag = 0.0):

7. return magic(r = real, i = imag)

Ketika melakukan kombinasi argumen anotasi dan nilai


dasar/default, Anda justru disarankan untuk menggunakan spasi
sebelum dan setelah tanda =.

1. Yes:

2. def munge(sep: AnyStr = None): ...

3. def munge(input: AnyStr, sep: AnyStr = None, limit=1000): ...

4.

5. No:

6. def munge(input: AnyStr=None): ...

7. def munge(input: AnyStr, limit = 1000): …


Python Basic Style Guide - Prinsip Penamaan
pada Python

Penamaan pada Python

Penamaan pada pustaka (library) Python agak sulit dibuat


konsisten, mengingat jumlah paketnya sudah banyak dan terdapat
beberapa library eksternal yang sudah tidak lagi dikelola. Namun,
berikut adalah beberapa rekomendasi untuk penamaan. Modul dan
Paket-paket yang baru (termasuk framework) sebaiknya ditulis
dengan standar baru ini. Namun Anda juga dapat memilih
mempertahankan styling pada pustaka lama yang sudah Anda
gunakan sebelumnya. Sekali lagi, konsistensi internal lebih
diutamakan.

Prinsip Overriding

Nama yang dilihat oleh user publik (misalnya API) sebaiknya


merefleksikan penggunaan/fungsinya, tidak merefleksikan
implementasinya. Misal nama fungsi berikut.

1. cariJalan()

akan lebih mudah dipahami dibanding,

1. aStarSearch()

Algoritma yang digunakan dapat dijelaskan dalam docstring


ataupun komentar.

Penamaan Deskriptif

Terdapat berbagai cara penamaan. Akan sangat membantu jika


Anda telah memilih sebuah cara penamaan, terlepas bagaimana
cara tersebut digunakan. Beberapa cara penamaan yang umum,
antara lain:
 b (satu karakter huruf kecil).
 B (satu karakter huruf besar).
 hurufkecil.
 huruf_kecil_dengan_pemisah_kata_garis_bawah.
 HURUFBESAR.
 HURUF_BESAR_DENGAN_PEMISAH_GARIS_BAWAH.
 HurufBesarDiAwalKata (atau CapWords, CamelCase). Pastikan
semua singkatan/akronim dituliskan dengan huruf besar,
contohnya HTTPServerError, bukan HttpServerError.
 hurufCampuran (mirip dengan CapWords, hanya berbeda di
karakter paling awal).
 Huruf_Besar_Di_Awal_Kata_Dengan_Garis_Bawah.

Pada beberapa pustaka juga digunakan frase awalan pendek untuk


mengelompokkan beberapa fungsi atau variabel yang berelasi atau
berasal dari satu induk. Misalnya pada fungsi os.stat(), seluruh
parameter menggunakan awalan st karena pada prinsipnya, fungsi
tersebut akan memanggil properti pada struct (st_size, st_mode,
st_mtime, dll). Atau pustaka X11 yang menggunakan awalan X pada
seluruh fungsi publiknya.

Penggunaan frase atau huruf pada awal fungsi ini tidak disarankan
pada Python, atau lebih tepatnya tidak dibutuhkan, karena struktur
pada Python:

 Atribut dan method name bersifat pre-fixed dengan objek,


 Function name selalu diawali dengan module name.

Beberapa bentuk khusus yang umum ditemukan (dapat


digabungkan dengan case convention):

1. _diawali_sebuah_garis_bawah: weak "internal use" indicator.


impor fungsi
from M import * tidak akan mengimpor objek dengan awalan
garis bawah.

2. diakhiri_sebuah_garis bawah_: digunakan untuk mengatasi


redundant dengan keyword / reserved words di Python, misal:
Tkinter.Toplevel(master, class_='ClassName').

3. __diawali_dua_garis bawah: menegaskan bahwa sebuah objek


merupakan bagian dari kelas tertentu (pada kelas FooBar,
fungsi __boo menjadi _FooBar__boo).

4. __diawali_dan_diakhiri_dua_garis bawah__: Objek atau atribut


tertentu yang diciptakan Python untuk digunakan dalam
program: __init__, __import__ or __file__. Jangan membuatnya
sendiri, hanya gunakan yang telah didokumentasikan.

Yang perlu diperhatikan dalam penamaan

Nama yang dihindari


Hindari karakter l (huruf L kecil), O (huruf O besar) atau I (huruf I
besar) sebagai nama variabel 1 karakter karena mereka sulit
dibedakan dengan angka satu dan nol. Saat Anda ingin
menggunakan l (huruf l kecil), akan sangat membantu jika Anda
menggunakan L besar.

ASCII
Identifiers yang digunakan pada library standar harus ASCII-
Compatible - lihat PEP 3131.

Nama Paket dan Nama Modul


Nama Modul sebaiknya pendek/singkat, menggunakan huruf kecil
dan opsional garis bawah (_) untuk meningkatkan keterbacaan.
Nama Paket menggunakan huruf kecil dan hindari garis bawah(_).
Jika sebuah modul yang ditulis dengan C/C++ menyediakan
Interface, maka modul C/C++ tersebut ditulis dengan diawali garis
bawah (misalnya _socket).

Nama Kelas
Gunakan CamelCase atau CapWords convention. Pastikan semua
akronim (misal HTTP) ditulis keseluruhan dengan huruf besar.
Penulisan Tipe Variable
Umumnya menggunakan CamelCase atau CapWords, lebih pendek
lebih baik:

1. T, AnyStr, Num

Jika terdapat covariant atau contravariant dari sebuah variabel,


tambahkan di akhir variabel untuk mempermudah pembacaan.

1. from typing import TypeVar

2. VT_co = TypeVar('VT_co', covariant=True)

3. KT_contra = TypeVar('KT_contra', contravariant=True)

Nama Exception
Karena exception seharusnya bertipe kelas, Anda juga menerapkan
konvensi penamaan kelas pada exception. Bedanya, tambahkan
“Error” atau nama deskriptif lain pada nama exception Anda.

Nama Variabel Global


Nama Variabel Global mengikuti fungsi/modul yang bersifat publik.
Anda bisa menggunakan garis bawah untuk menghindari variabel
tersebut di-import jika ia merupakan modul non-publik.

Nama Fungsi, Parameter, dan Variabel


Nama fungsi, parameter, dan variabel sebaiknya menggunakan
huruf kecil, dengan pemisahan menggunakan garis bawah untuk
meningkatkan keterbacaan. mixedCase dapat digunakan jika ada
dependensi dengan pustaka dengan style tertentu.

Instansiasi Fungsi dan Method


Gunakan self sebagai argument pertama instansiasi method.

Gunakan cls sebagai argumen pertama pada class methods.


Jika nama argument fungsi merupakan reserved keyword,
tambahkan garis bawah di akhir nama argument. Jangan
mengorbankan keterbacaan nama dengan menyingkatnya.
Mengganti argumen bernama class dengan class_ atau kelas, lebih
baik daripada clss, misalnya.

Nama Method dan Nama Variabel dalam Method


Gunakan standar penamaan Fungsi: huruf kecil dengan pemisah
kata garis bawah untuk meningkatkan keterbacaan. Tambahkan
garis bawah sebagai awalan untuk method non-publik dan variabel
internal pada fungsi.

Untuk menghindari kesamaan dengan subkelas, gunakan


__dimulai_dua_garis_nama_method untuk memanggil proses yang
tepat. Python menggabungkan nama modul dengan nama kelas.
Jika kelas Foo memiliki atribut __a, maka kita tidak dapat
mengaksesnya melalui Foo.__a, melainkan Foo._Foo__a. Mulai
dengan dua garis bawah hanya digunakan jika terjadi konflik
dengan atribut di kelas atau subkelas lainnya.

Konstanta
Konstanta umumnya didefinisikan pada bagian atas modul dengan
huruf besar, misalnya MAX_OVERFLOW dan TOTAL.

Selalu Persiapkan untuk Inheritance


Saat sebuah metode dan variabel dalam sebuah kelas didefinisikan,
sebaiknya Anda dapat langsung mengetahui atribut pada metode
dan variabel tersebut, apakah publik atau non-publik. Jika Anda
ragu, jadikan atributnya non-publik. Karena lebih mudah
menjadikan sebuah variabel/method bersifat non-publik
menjadi publik, dibandingkan sebaliknya.

Method/Variabel Publik dipersiapkan untuk pihak eksternal


menggunakan kelas Anda. Anda juga otomatis berkomitmen untuk
menghindari adanya incompatible backward changes. Sebaliknya,
Method/Variabel dengan atribut non-publik hanya digunakan oleh
Anda sebagai developer, dan tidak memberikan garansi kepada
siapapun bahwa Anda tidak akan mengubah atau menghapusnya.
Di sini kita tidak menggunakan atribut Private karena di Python
tidak ada atribut yang benar-benar Private.

Kategori lain dari atribut adalah "subclass API", umumnya disebut


protected pada bahasa lain. Sebuah kelas dapat didesain untuk
diwariskan (inherited-from), misalnya untuk memodifikasi atau
menjadi ekstensi dari perilaku (behavior) kelas. Dalam mendesain
kelas-kelas sejenis, pastikan untuk membuat keputusan eksplisit,
mana Variabel/Method yang memiliki atribut publik, bagian dari
subclass API, dan mana yang hanya anda gunakan secara internal.

Saat mendeklarasikan variabel/method tersebut, ikuti panduan


Pythonic berikut:

 Atribut publik tidak menggunakan awalan garis bawah.


 Jika nama sebuah Method/Variabel publik sama dengan
reserved keyword, tambahkan akhiran garis bawah. Hindari
menyingkat atau mengurangi huruf.
 Pada Data publik bersifat simple, hindari nama yang terlalu
panjang. Cukup dengan nama atribut sependek mungkin.
Ingatlah bahwa di masa depan Anda akan mungkin
mengembangkan skema atau data ini, sehingga nama
sependek mungkin akan menguntungkan Anda.
 Jika Anda berniat untuk mewariskan atau membuat subclass
dari kelas, dan menginginkan sebuah variabel hanya
digunakan di kelas utama saja, tambahkan awalan dua garis
bawah. Ini akan memudahkan Anda karena Python
mengenalinya sebagai konvensi kelas, menghindari
kemungkinan kesamaan nama atau implementasi.

Interface
Umumnya, garansi backward compatibility hanya diaplikasikan
pada interface publik. Untuk itu pengguna harus dapat
membedakan dengan jelas, interface publik dan internal/non-publik.
Interface yang didokumentasikan umumnya dianggap sebagai
interface publik, kecuali dijelaskan secara eksplisit. Sebaliknya,
setiap interface yang tidak terdokumentasi, umumnya dianggap
bersifat internal.

Untuk keterbacaan, modul sebaiknya mendeklarasikan nama


interface/API melalui atribut __all__. Jika __all__ kosong, artinya
modul tersebut tidak memiliki interface/API Publik. Selain __all__
yang diisi dengan sesuai, internal interface (paket, modul, kelas,
fungsi, atribut, atau nama lainnya), sebaiknya tetap dituliskan
dengan diawali garis bawah.

Sebuah interface otomatis dianggap internal, jika namespace


(paket, modul, atau kelasnya) bersifat internal.

Nama yang di-import harap selalu dianggap sebagai detail


implementasi. Modul lainnya tidak diperbolehkan untuk melakukan
akses tidak langsung untuk nama-nama tersebut, kecuali jika sudah
didokumentasikan, misalnya os.path atau modul __init__ yang
mengekspos fungsionalitas dari submodul.

Percabangan dan Ternary Operators


Beberapa contoh aplikasi dasar untuk pengenalan percabangan
yang sering digunakan adalah:

 Genap atau Ganjil.


 Positif atau Negatif.
 Positif, Negatif, atau Nol.

If
Seperti bahasa pemrograman lainnya, Python juga memiliki
statemen percabangan IF. Di Python, expression diletakkan setelah
if, dan keputusan ditentukan berdasarkan nilai kebenaran dari
expression tersebut.

Tip: Python menganggap setiap nilai non-zero dan non-null sebagai


True dan nilai zero/null sebagai False.
Jika expression dievaluasi sebagai True, maka blok statement di
dalam if statement akan dieksekusi. Sesuai konvensi, blok ini
memiliki indentasi masuk setelah tanda titik dua (:). Jika expression
dievaluasi sebagai False, maka blok selanjutnya (setelah statement
IF) yang akan dijalankan. Contoh:

1. kelerengku = 10
2. if kelerengku:
3. print ("Cetak ini jika benar")
4. print (kelerengku)

Output:

Cetak ini jika benar


10

Anda dapat menyingkat penulisan statement yang akan dieksekusi


jika ia terwakili dalam 1 baris. Misalnya:

1. if kerelengku: hitung()

Else
Statement Else dapat dikombinasikan dengan IF Statement, sebagai
jalan keluar saat kondisi / hasil evaluasi bernilai False. Else bersifat
opsional dan tunggal. Mari kita implementasikan dalam kasus
pengecekan tinggi badan pengunjung di suatu wahana.

1. tinggi_badan = int(input("Masukkan tinggi badan Anda : "))


2. if tinggi_badan>=160:
3. print ("Silakan, Anda boleh masuk")
4. else:
5. print ("Maaf, Anda belum boleh masuk")

Output 1:

Masukkan tinggi badan Anda : 160


Silakan, Anda boleh masuk
Output 2:

Masukkan tinggi badan Anda : 140


Maaf, Anda belum boleh masuk

Mari implementasikan pada kasus yang berbeda, kali ini kasusnya


adalah pengecekan bilangan ganjil atau genap pada suatu variabel.

1. bilangan = 4
2. if bilangan % 2 == 0:
3. print('Bilangan {} adalah genap'.format(bilangan))
4. else:
5. print('Bilangan {} adalah ganjil'.format(bilangan))

Output:

Bilangan 4 adalah genap

Elif - Alternatif untuk Switch/Case dan IF


bertingkat di python
Elif adalah kependekan dari else if, dan merupakan alternatif untuk
if bertingkat atau switch/case di beberapa bahasa pemrograman
lain. Sebuah IF Statement dapat diikuti satu atau lebih statement
elif (opsional & tidak dibatasi). Mari kita implementasikan pada
kasus penilaian tugas siswa.

1. nilai = int(input("Masukkan nilai tugas Anda : "))


2. if nilai>80:
3. print("Selamat! Anda mendapat nilai A")
4. print("Pertahankan!")
5. elif nilai>70:
6. print("Hore! Anda mendapat nilai B")
7. print("Tingkatkan!")
8. elif nilai>60:
9. print("Hmm.. Anda mendapat nilai C")
10. print("Ayo semangat!")
11. else:
12. print("Waduh, Anda mendapat nilai D")
13. print("Yuk belajar lebih giat lagi!")

Output 1:

Masukkan nilai tugas Anda : 85


Selamat! Anda mendapat nilai A
Pertahankan!
Output 2:

Masukkan nilai tugas Anda : 75


Hore! Anda mendapat nilai B
Tingkatkan!
Output 3:

Masukkan nilai tugas Anda : 65


Hmm.. Anda mendapat nilai C
Ayo semangat!
Output 4:

Masukkan nilai tugas Anda : 30


Waduh, Anda mendapat nilai D
Yuk belajar lebih giat lagi!
Catatan: Jika sudah memenuhi salah satu kondisi if/elif, maka
program akan keluar dari blok IF Statement. Anda harus
memastikan urutan secara logika, IF, Elif, dan Else dalam tingkatan
yang tepat. Contoh yang perlu diperhatikan adalah sebagai berikut:

Input #Kasus 1 #Kasus 2


Nilai
if nilai>80: if nilai>0:
print("Selamat! Anda mendapat nilai A") print("Selamat! Anda mendapat nilai A")
print("Pertahankan!") print("Pertahankan!")
elif nilai>70: elif nilai<80:
print("Hore! Anda mendapat nilai B") print("Hore! Anda mendapat nilai B")
print("Tingkatkan!") print("Tingkatkan!")
elif nilai>60: elif nilai<70:
print("Hmm.. Anda mendapat nilai C") print("Hmm.. Anda mendapat nilai C")
print("Ayo semangat!") print("Ayo semangat!")
else: else:
print("Waduh, Anda mendapat nilai D") print("Waduh, Anda mendapat nilai D")
print("Yuk belajar lebih giat lagi!") print("Yuk belajar lebih giat lagi!")

85 Masukkan nilai tugas Anda: 85 Masukkan nilai tugas Anda: 85


Selamat! Anda mendapat nilai A Selamat! Anda mendapat nilai A
Pertahankan! Pertahankan!
65 Masukkan nilai tugas Anda: 65 Masukkan nilai tugas Anda: 65
Hmm.. Anda mendapat nilai C Selamat! Anda mendapat nilai A
Ayo semangat! Pertahankan!
30 Masukkan nilai tugas Anda: 30 Masukkan nilai tugas Anda: 30
Waduh, Anda mendapat nilai D Selamat! Anda mendapat nilai A
Yuk belajar lebih giat lagi! Pertahankan!
Pada #Case 2, elif dan else tidak pernah dijalankan karena nilai
berapapun (yang bernilai positif) akan selalu masuk pada IF (klausa
pertama).

Mari kita implementasikan pada kasus pengecekan bilangan positif,


negatif, atau nol.

1. bilangan = -3
2. if bilangan > 0:
3. print('Bilangan {} adalah positif'.format(bilangan))
4. elif bilangan < 0:
5. print('Bilangan {} adalah negatif'.format(bilangan))
6. else:
7. print('Bilangan {} adalah nol'.format(bilangan))

Output:

Bilangan -3 adalah negatif

Ternary Operators
Ternary operator lebih dikenal sebagai conditional expressions pada
Python. Operator menentukan sesuatu berdasarkan kondisi True
atau False. Jika statement atau klausa if Anda cukup sederhana,
maka ternary Operators akan sangat membantu.

Perbandingan klausa IF dengan ternary Operators:

IF Ternary
if (condition): condition_if_true if condition else condition_if_false
condition_if_true
else:
condition_if_false
lulus = True lulus = True
if (lulus): kata = "selamat" if lulus else "perbaiki"
kata = ”selamat”
else:
kata = “perbaiki”
Opsi lain dari ternary operators melibatkan tuples. Contoh kodenya
berikut:
IF Ternary_Tuples
if (condition): (condition_if_false, condition_if_true)[condition]
condition_if_true
else:
condition_if_false
lulus = True nice = True
if (lulus): kata= ("perbaiki", "selamat")[lulus]
kata=”selamat”
else:
kata=“perbaiki”
Pada tuple ini, dimanfaatkan nilai [0] sebagai False dan [1] sebagai
True.

Aplikasi kedua ini menurut beberapa aktivis kurang ‘pythonic’,


salah satunya karena cukup membingungkan untuk meletakkan
klausa saat True atau False. Selain itu, kedua nilai akan tetap
dievaluasi walaupun hanya dibutuhkan salah satunya. Lihat contoh
berikut:

1. kondisi = True
2. print(2 if kondisi else 1/0)
3. #Output is 2
4.
5. print((1/0, 2)[kondisi])
6. #Eror Pembagian Nol akan muncul

Ternary-tuples sebaiknya dihindari, terutama untuk kode (dan


klausa True/False) yang kompleks. Ternary dapat digunakan untuk
menyingkat kode saat klausa True/False Anda cukup pendek -
misalnya sebuah fungsi tanpa parameter.

ShortHand Ternary
Selain Ternary Operators, dikenal juga shorthand ternary tag yang
mungkin membantu Anda untuk memeriksa kode/hasil dari sebuah
fungsi dan memastikan outputnya tidak menyebabkan error (atau
minimal memberikan informasi relevan saat error):

1. hasil = None
2. pesan = hasil or "Tidak ada data"
3. print(pesan)
Output:

Tidak ada data


For

Seperti di bahasa pemrograman lainnya, Python juga memiliki


fungsi for. Bedanya di Python, For tidak hanya untuk perulangan
dengan jumlah finite (terbatas), melainkan lebih ke fungsi yang
dapat melakukan perulangan pada setiap jenis variabel berupa
kumpulan atau urutan. Variabel yang dimaksud bisa berupa list,
string, ataupun range. Jika sebuah list atau urutan berisi expression,
maka Ia akan dievaluasi terlebih dahulu. Kemudian item pertama
pada urutan/list akan diassign sebagai variabel iterating_var.
Setelahnya, blok statement akan dieksekusi, berlanjut ke item
berikutnya, berulang, hingga seluruh urutan habis.

1. for huruf in 'Dicoding': # Contoh pertama


2. print('Huruf: {}'.format(huruf))
3.
4. flowers = ['mawar', 'melati', 'anggrek']
5. for flower in flowers: # Contoh kedua
6. print('Flower: {}'.format(flower))

Output:

Huruf : D
Huruf : i
Huruf : c
Huruf : o
Huruf : d
Huruf : i
Huruf : n
Huruf : g
Flower: mawar
Flower: melati
Flower: anggrek

Anda juga dapat melakukan perulangan berdasarkan indeks atau


range dengan memanfaatkan fungsi len():

1. flowers = ['mawar', 'melati', 'anggrek']


2. for index in range(len(flowers)):
3. print('Flowers: {}'.format(flowers[index]))
Output:

Flower : mawar
Flower : melati
Flower : anggrek
While

While pada bahasa Python digunakan untuk mengeksekusi


statement selama kondisi yang diberikan terpenuhi (True). Kondisi
dapat berupa expression apapun, dan harap diingat bahwa True di
Python termasuk semua nilai non-zero. Saat kondisi menjadi
False, program akan melanjutkan ke baris setelah blok statement.

Tip: Python tidak memiliki do.. while statement

Seperti for dan semua statement percabangan, blok statement


yang mengikuti kondisi while dan memiliki posisi indentasi yang
sama, dianggap blok statement yang akan dieksekusi.

Contoh:

1. count = 0
2. while (count < 7):
3. print('Hitungannya adalah: {}'.format(count))
4. count = count + 1

Output:

Hitungannya adalah: 0
Hitungannya adalah: 1
Hitungannya adalah: 2
Hitungannya adalah: 3
Hitungannya adalah: 4
Hitungannya adalah: 5
Hitungannya adalah: 6

Seperti pada bahasa lainnya, eksekusi statement while mungkin


bersifat infinit / infinite loop saat sebuah kondisi tidak pernah
bernilai False. Contohnya sebagai berikut:

1. var = 1
2. while var == 1: # This constructs an infinite loop
3. num = input('Masukkan angka: ')
4. print('Anda memasukkan angka: {}'.format(num))
5.
6.
7. while True: # This constructs an infinite loop
8. num = input('Masukkan angka: ')
9. print('Anda memasukkan angka: {}'.format(num))

Potongan kode di atas tidak akan pernah bernilai False karena nilai
var tidak pernah berubah. Untuk menghentikan infinite loop,
gunakan CTRL (atau CMD⌘) - C untuk menghentikannya dan keluar
dari program.

Anda juga dapat menyingkat penulisan blok statement While jika


statement Anda cukup terwakili oleh satu baris.

1. while (var1): do_something()

Perulangan Bertingkat

Ada kalanya Anda perlu untuk melakukan perulangan bertingkat,


misalnya untuk menghasilkan contoh print-out berikut:

******
*****
****
***
**
*
Anda dapat melakukannya dengan kode berikut:

1. for i in range(0, 6):


2. for j in range(0, 6 - i):
3. print('*', end='')
4. print()

Tip: Tambahkan parameter end pada print untuk mengatur karakter


yang mengakhiri pencetakan string/teks Anda. Secara default,
karakter end ini adalah newline ('\n').

Kontrol Perulangan
Break
Pernyataan break menghentikan perulangan kemudian keluar,
dilanjutkan dengan mengeksekusi pernyataan (statement) setelah
blok perulangan. Salah satu penggunaannya yang paling sering
adalah sebuah kondisi eksternal yang membutuhkan program untuk
keluar dari perulangan. Jika Anda memiliki perulangan bertingkat,
break akan menghentikan perulangan sesuai dengan tingkatan atau
di perulangan mana ia berada. Namun jika ia diletakkan di
perulangan dengan kedalaman kedua misalnya, hanya perulangan
itu saja yang berhenti, tidak dengan perulangan utama.

Contoh 1:

1. for huruf in 'Dico ding':


2. if huruf == ' ':
3. break
4. print('Huruf saat ini: {}'.format(huruf))

Output contoh 1:

Huruf saat ini: D


Huruf saat ini: i
Huruf saat ini: c
Huruf saat ini: o
Contoh 2, cetak bintang dengan memanfaatkan fungsi break

1. for i in range (0,10):


2. for j in range (0,10):
3. if j>i:
4. print()
5. break
6. else:
7. print("*",end="")
8.

Output contoh 2:

*
**
***
****
*****
******
*******
********
*********
**********
Continue

Pernyataan continue akan membuat iterasi saat ini berhenti,


kemudian melanjutkan ke iterasi
berikutnya, mengabaikan pernyataan (statement) yang berada
antara continue hingga akhir blok perulangan.

Contoh 1:

1. for huruf in 'Dico ding':


2. if huruf == ' ':
3. continue
4. print('Huruf saat ini: {}'.format(huruf))

Output contoh 1:

Huruf saat ini: D


Huruf saat ini: i
Huruf saat ini: c
Huruf saat ini: o
Huruf saat ini: d ## perhatikan spasi dilewati
Huruf saat ini: i
Huruf saat ini: n
Huruf saat ini: g

Contoh 2, cetak bintang yang sama dengan contoh 2 pada


pembahasan fungsi break, dengan 1 loop dan 1 if (tanpa else):

1. jumlahbaris = 10
2. baris = 0
3. bintang = 0
4. while baris < jumlahbaris:
5. if (bintang) >= (baris+1):
6. print()
7. baris = baris+1
8. bintang=0
9. continue ##saat masuk ke if, maka bagian print *
diluar if tidak akan dijalankan, langsung ulang ke while
10. print("*",end="")
11. bintang= bintang+1

*
**
***
****
*****
******
*******
********
*********
**********

Else setelah For

Pada Python juga dikenal fungsi else setelah for. Fungsinya


diutamakan pada perulangan yang bersifat pencarian - untuk
memberikan jalan keluar program saat pencarian tidak ditemukan.

Struktur umumnya adalah sebagai berikut:

1. for item in items:


2. if cari(item):
3. #ditemukan!
4. proses_item()
5. break
6. else:
7. #Item tidak ditemukan
8. not_found_in_container()

Anda mungkin melihat sesuatu yang menarik. Ada If dan Else,


namun dalam tingkatan yang berbeda, apakah mereka terkait?

Saat sebuah perulangan dijalankan, fungsi if akan dievaluasi. Saat


ia pernah sekali saja benar, maka else tidak akan dieksekusi.
Dengan kata lain, if yang berada dalam perulangan harus selalu
salah untuk memicu blok statemen else dijalankan. Lebih singkat
lagi, struktur pseudocode yang diikuti dalam membuat else pada
perulangan adalah seperti berikut:

1. if any(something_about(thing) for each thing in container):


2. do_something(that_thing)
3. else:
4. no_such_thing()

Contoh penggunaan dari for-else dapat dilihat pada potongan kode


berikut (jalankan di konsol sebelum melanjutkan ke bagian
selanjutnya):
1. for n in range(2, 10):
2. for x in range(2, n):
3. if n % x == 0:
4. print(n, 'equals', x, '*', n/x)
5. break

Potongan kode di atas melakukan pencarian faktor dari setiap


bilangan antara 2 s/d 9. Namun demikian, pada saat bilangan n
bernilai 2, 3, 5, 7, program tidak akan mencetak apapun. Ini karena
bilangan-bilangan tersebut merupakan bilangan prima. Hal ini bisa
diatasi dengan menambahkan keterangan else dan mencetak
bahwa bilangan tersebut adalah bilangan prima:

1. for n in range(2, 10):


2. for x in range(2, n):
3. if n % x == 0:
4. print( n, 'equals', x, '*', n/x)
5. break
6. else:
7. # loop fell through without finding a factor
8. print(n, ' adalah bilangan prima')

Else setelah While


Berbeda dengan Else setelah For, pada statement while, blok
statement else akan selalu dieksekusi saat kondisi pada while
menjadi salah. Contoh mudahnya adalah sebagai berikut:

1. n = 10
2. while n > 0:
3. n = n - 1
4. if n == 7:
5. break
6. print(n)
7. else:
8. print("Loop selesai")

Output:

9
8
Pada contoh diatas, loop akan di break saat nilai n == 7, saat
keluar dari perulangan, maka python tidak akan memunculkan
tulisan Loop selesai, namun jika tidak dilakukan break (perulangan
berakhir dengan normal):

1. n = 10
2. while n > 0:
3. n = n - 1
4. print(n)
5. else:
6. print("Loop selesai")

Output:

9
8
7
6
5
4
3
2
1
0
Loop selesai
Pass

Digunakan jika Anda menginginkan sebuah pernyataan atau blok


pernyataan (statement), namun tidak melakukan apapun -
melanjutkan eksekusi sesuai dengan urutannya. Kontrol ini banyak
digunakan saat Anda belum melakukan implementasi (atau
menyiapkan tempat untuk implementasi), serta membiarkan
program tetap berjalan saat misalnya Anda mengalami kegagalan
atau exception.

Pass statement adalah operasi bersifat Null (kosong), tidak ada


yang terjadi saat ia dipanggil. Contohnya:

1. def sebuahfungsi():
2. pass

Output:

#tidak ada
Jika Anda mendeklarasi sebuah fungsi tanpa kode apapun, justru
akan terjadi error:

1. def sebuahfungsi():

Output:

File "<test.py>", line 2


^
IndentationError: expected an indented block

Contoh pass untuk mengantisipasi exception/kegagalan fungsi,


perhatikan contoh kode yang belum ditambahkan pass berikut:

1. var1=""
2. while(var1!="exit"):
3. var1=input("Please enter an integer (type exit to exit): ")
4. print(int(var1))

Output:

Please enter an integer (type exit to exit): 1


1
Please enter an integer (type exit to exit): a
Traceback (most recent call last):
File "testp3.py", line 7, in <module>
print(int(var1))
ValueError: invalid literal for int() with base 10: 'a'

Kita dapat membaca bahwa program gagal saat mencoba proses


konversi variabel var1. Saat program mengalami kegagalan atau
exception, ia akan langsung keluar. Bandingkan dengan
pendekatan berikut (mengenai exception, import/library sys, dan
try/except akan dibahas pada modul-modul pembelajaran
berikutnya:

1. import sys
2. data=''
3. while(data!='exit'):
4. try:
5. data=input('Please enter an integer (type exit to exit):
')
6. print('got integer: {}'.format(int(data)))
7. except:
8. if data == 'exit':
9. pass # exit gracefully without prompt any error
10. else:
11. print('error: {}'.format(sys.exc_info()[0]))

Outputnya saat dijalankan:

Please enter an integer (type exit to exit): 1


got integer: 1
Please enter an integer (type exit to exit): a
Unexpected error: <class 'ValueError'>
Please enter an integer (type exit to exit): b
Unexpected error: <class 'ValueError'>
Please enter an integer (type exit to exit): c
Unexpected error: <class 'ValueError'>
Please enter an integer (type exit to exit): exit

Pada pendekatan kedua, program akan memberitahu kegagalan


yang terjadi sesuai dengan yang kita tuliskan pada baris berwarna
kuning, namun tetap terus berjalan, dalam hal ini hingga dituliskan
exit. Anda dapat melakukan antisipasi apapun sebelum menulis
pass (misalnya memasukkan informasi terkait error ke log, memberi
notifikasi ke admin, dan sebagainya).

List Comprehension (membuat list dengan inline loop dan if)

Ada kalanya Anda perlu untuk membuat sebuah list baru dari
dengan sebuah operasi dari list sebelumnya. Misalnya membuat
nilai kuadrat dari semua item dalam list:

1. #Cara 1
2. angka = [1, 2, 3, 4]
3. pangkat = []
4. for n in angka:
5. pangkat.append(n**2)
6. print(pangkat)

Cara yang umum digunakan adalah cara di atas, yakni melakukan


perulangan sejumlah item pada list angka kemudian membuat list
baru (pangkat) dan menambahkan hasil operasinya dalam list baru
(pangkat). Bandingkan dengan cara berikut:
1. #Cara 2 List Comprehension
2. angka = [1, 2, 3, 4]
3. pangkat = [n**2 for n in angka]
4. print(pangkat)

Cobalah kedua contoh di atas. Hasilnya sama bukan?

Output:

[1, 4, 9, 16]

List comprehension adalah salah satu cara untuk menghasilkan list


baru berdasarkan list atau iterables yang telah ada sebelumnya.
Sintaksis dasarnya adalah sebagai berikut:

1. new_list = [expression for_loop_one_or_more conditions]

Contoh kedua di atas dapat diartikan sebagai: untuk setiap anggota


angka buatlah nilai kuadratnya. List comprehension dapat
digunakan lebih lanjut, misalnya:

1. #Contoh3 menemukan item yang ada di kedua list


2. list1 = ['d', 'i', 'c', 'o']
3. list2 = ['d', 'i', 'n', 'g']
4. duplikat = []
5. for a in list1:
6. for b in list2:
7. if a == b:
8. duplikat.append(a)
9.
10. print(duplikat) # Output ['d','i']

Bandingkan dengan:

1. #Contoh4 Implementasi dengan list comprehension


2. list1 = ['d', 'i', 'c', 'o']
3. list2 = ['d', 'i', 'n', 'g']
4. duplikat = [a for a in list1 for b in list2 if a == b]
5. print(duplikat) # Output: ['d','i']

Sangat memudahkan bukan? Dari 5 baris cukup disingkat menjadi 1


baris saja.

Contoh penggunaan yang lain dapat dilihat pada contoh 5 berikut:


1. # Contoh 5 kecilkan semua huruf
2. list_a = ["Hello", "World", "In", "Python"]
3. small_list_a = [_.lower() for _ in list_a]
4. print(small_list_a)

Output:

['hello', 'world', 'in', 'python']

Anda tidak perlu bingung saat melihat kode di Internet yang


menuliskan seperti contoh di atas, karena garis bawah
(underscore) termasuk penamaan variabel yang valid. Secara
umum "_" biasa digunakan sebagai throwaway variable
(variabel tidak penting).

Banyak hal yang mungkin dilakukan dengan list comprehension.


Coba perkirakan apa yang akan dimunculkan oleh potongan kode
berikut dan pilih jawaban yang tepat pada kuis di bagian
berikutnya:

1. list_a = range(1, 10, 2)


2. x = [[a**2, a**3] for a in list_a]
3. print(x)

Penanganan Kesalahan (Error dan Exception


Handling)
Ada setidaknya dua jenis kesalahan berdasarkan kejadiannya:

1. Kesalahan sintaksis (syntax errors) atau sering disebut


kesalahan penguraian (parsing errors).
2. Pengecualian (exceptions) atau sering disebut kesalahan saat
beroperasi (runtime errors).

Kesalahan sintaksis terjadi ketika Python tidak dapat mengerti apa


yang Anda perintahkan. Sedangkan pengecualian (kesalahan saat
beroperasi) terjadi ketika Python mengerti apa yang Anda
perintahkan tetapi mendapatkan masalah saat mengikuti yang
Anda perintahkan (terjadi saat aplikasi sudah mulai beroperasi).
Kesalahan Sintaksis
Kesalahan sintaksis biasanya sering terjadi saat Anda masih baru
memulai belajar Python, misalnya contoh berikut adalah
penempatan indentasi (spasi di awal) yang tidak sesuai.

1. print('salah indentasi')

2. File "<stdin>", line 1

3. print('salah indentasi')

4. ^

5. IndentationError: unexpected indent

Contoh berikut ini menampilkan kesalahan sintaksis, di mana


setelah kondisi dari perintah while diharuskan ada tanda titik dua
(:).

1. while True print('Hello world')

2. File "<stdin>", line 1

3. while True print('Hello world')

4. ^

5. SyntaxError: invalid syntax

Pada kesalahan sintaksis, baris di mana kesalahan terdeteksi


dimunculkan kembali, kemudian terdapat tanda panah yang
menunjukkan titik paling awal dari kesalahan.

Kedua contoh di atas memiliki kelompok (tipe) kesalahan yang


berbeda, yang pertama adalah IndentationError dan yang kedua
adalah SyntaxError. Kemudian setelah penyebutannya, ada pesan
detail kesalahan (keterangan), misalnya indentasi yang tidak
diharapkan (unexpected).

Jika Anda menggunakan mode pemanggilan skrip, nama file skrip


dan nomor baris di mana terjadi kesalahan akan dimunculkan.
Sedangkan untuk mode interaktif pada dua contoh di atas, nama
file muncul sebagai “<stdin>”. Berikut adalah contoh pada
pemanggilan skrip bernama contoh_salah_sintaksis.py di mana
terjadi kesalahan pada baris 2.

1. python contoh_salah_sintaksis.py

2. File "contoh_salah_sintaksis.py", line 2

3. if True print('salah sintaksis')

4. ^

5. SyntaxError: invalid syntax

Pengecualian
Meski pernyataan atau ekspresi dari Python sudah Anda tulis
dengan benar, ada kemungkinan terjadi kesalahan ketika perintah
tersebut dieksekusi. Kesalahan yang terjadi saat proses sedang
berlangsung disebut pengecualian (exceptions) dan akan berakibat
fatal jika tidak ditangani. Kebanyakan pengecualian di Python tidak
ditangani oleh aplikasi, sehingga aplikasi terhenti kemudian muncul
pesan kesalahan seperti contoh berikut.

1. print(angka)

2. Traceback (most recent call last):

3. File "<stdin>", line 1, in <module>

4. NameError: name 'angka' is not defined

Misalkan Anda lupa memberikan nilai pada variabel angka, tetapi


Anda langsung memanggil variabel tersebut. Secara sintaksis sudah
sesuai, tapi muncul pengecualian dengan kelompok (tipe)
kesalahan NameError dan pesan detail kesalahan yang menyatakan
bahwa variabel angka tidak terdefinisi.

Contoh lain terkait pengecualian yang sering juga terjadi adalah


operasi dari variabel yang jenisnya tidak sesuai, misalnya contoh
berikut.

1. bukan_angka = '1'
2. bukan_angka + 2

3. Traceback (most recent call last):

4. File "<stdin>", line 1, in <module>

5. TypeError: can only concatenate str (not "int") to str

Pada contoh tersebut, variabel bukan_angka berjenis string,


sehingga saat mengoperasikan variabel tersebut dengan angka
(berjenis integer), meskipun secara sintaksis sudah sesuai, muncul
pengecualian dengan kelompok (tipe) kesalahan TypeError dan
pesan detail kesalahan yang menyatakan bahwa operasi
penambahan untuk string (contatetation) hanya bisa dilakukan jika
kedua operannya adalah string (dan bukan integer).

Seperti terlihat bahwa pada saat terjadi pengecualian, informasi


yang muncul seperti saat terjadi kesalahan (errors), termasuk juga
informasi nama file dan nomor baris di mana kesalahan terjadi.

Untuk mengetahui berbagai jenis pengecualian bawaan dari Python,


bisa kunjungi situs
dokumentasi https://docs.python.org/id/3.8/library/exceptions.html .

Anda mungkin juga menyukai