Penulis memakai   editor Visual Studio Code dengan tambahan:

• Extension Python, untuk mendapatkan benefit API doc, autocompletion,

linting, run feature, dan lainnya.

• Extension Jupyter, untuk interactive run program via editor.

A.1. Python Hello World

Bahasa pemrograman Python sangat sederhana dan mudah untuk dipelajari.

Pada chapter ini kita akan langsung mempraktikannya dengan membuat

program hello world.

A.1.1. Program Hello Python

Siapkan sebuah folder dengan isi satu file program Python bernama main.py .

Pada file main.py , tuliskan kode berikut:

Run program memakai   command berikut:

print("hello python")

# python <nama_file_program>

python main.py

Selamat, secara official sekarang anda yaitu  programmer Python! 🎉 Mudah

bukan!?

A.1.2. Penjelasan program

Folder hello-python bisa disebut dengan folder project, dimana isinya

yaitu  file-file program Python berekstensi .py .

File main.py yaitu  file program python. Nama file program bisa apa saja,

tapi umumnya pada pemrograman Python, file program utama bernama

main.py .

Command python <nama_file_program> digunakan untuk menjalankan

program. Cukup ganti <nama_file_program> dengan nama file program (yang

pada contoh ini yaitu  main.py ) maka kode program di dalam file tersebut

akan di-run oleh Python interpreter.

Statement print("<pesan_text>") yaitu  penerapan dari salah satu fungsi

built-in yang ada dalam Python stdlib (standard library), yaitu fungsi bernama

print() yang kegunaannya yaitu  untuk menampilkan pesan string (yang

disipkan pada argument pemanggilan fungsi print() ). Pesan tersebut akan

mucnul ke layar output stdout (pada contoh ini yaitu  terminal milik editor

penulis).

• Pembahasan detail mengenai fungsi ada di chapter Function

• Pembahasan detail mengenai Python standard library (stdlib) ada di

chapter Python standard library (stdlib)

Untuk sekarang, penulis tidak anjurkan untuk lompat ke pembahasan

tersebut. Silakan ikuti pembelajaran chapter per chapter secara

berurutan.

Catatan chapter 📑📑

â—‰ Source code praktik

github.com/novalagung/dasarpemrogramanpython-example/../hello-

python

â—‰ Referensi

• https://www.learnpython.org/en/Hello,_World!

• https://docs.python.org/3/library/functions.html

A.2. Run Python di

VSCode

Chapter ini membahas tentang pilihan opsi cara run program Python di Visual

Studio Code.

A.2.1. Cara run program Python di

VSCode

â—‰ memakai   command python

Command ini sudah kita terapkan pada chapter Program Pertama ➜ Hello

Python, cara penggunaannya cukup mudah, tinggal jalankan saja command di

terminal.

â—‰ memakai   tombol run â–¶

Cara run program ini lebih praktis karena tingal klik-klik saja. Di toolbar

VSCode sebelah kanan atas ada tombol â–¶ , gunakan tombol tersebut untuk

menjalankan program.

# python <nama_file_program>

python main.py

â—‰ memakai   jupyter code cells

Untuk menerapkan cara ini, tambahkan kode #%% atau # %% pada baris di

atas statement print("hello python") agar blok kode di bawahnya

dianggap sebagai satu code cell .

Setelah itu, muncul tombol Run Cell , klik untuk run program.

Catatan chapter 📑📑

â—‰ Chapter relevan lainnya

• Program Pertama ➜ Hello Python

â—‰ Referensi

• https://code.visualstudio.com/docs/python/python-tutorial

• https://code.visualstudio.com/docs/datascience/jupyter-notebooks

• https://docs.python.org/3/using/cmdline.html

A.3. Python Komentar

Komentar yaitu  sebuah statement yang tidak akan dijalankan oleh

interpreter. Biasanya digunakan untuk menambahkan keterangan atau men-

disable statements agar tidak dieksekusi saat run program.

Python mengenal dua jenis komentar, yaitu komentar satu baris dan multi-

baris.

A.3.1. Komentar satu baris

Karakter # digunakan untuk menuliskan komentar, contoh:

Jika di-run, outputnya:

Bisa dilihat statement yang diawali dengan tanda # tidak dieksekusi.

# ini yaitu  komentar

print("halo,")

print("selamat pagi!") # ini juga komentar

# println("statement ini tidak akan dipanggil")

A.3.2. Komentar multi-baris

Komentar multi-baris bisa diterapkan melalui dua cara:

â—‰ Komentar memakai   # dituliskan

â—‰ Komentar memakai   """ atau '''

Karakter """ atau ''' sebenarnya digunakan untuk membuat multiline

string atau string banyak baris. Selain itu, bisa juga dipergunakan sebagai

penanda komentar multi baris. Contoh penerapannya:

Atau bisa juga ditulis seperti ini untuk komentar satu baris:

• Pembahasan detail mengenai string ada di chapter String

• Pembahasan detail mengenai DocString ada di chapter DocString

# ini yaitu  komentar

# ini juga komentar

# komentar baris ke-3

"""

ini yaitu  komentar

ini juga komentar

komentar baris ke-3

"""

"""ini yaitu  komentar"""

Catatan chapter 📑📑

â—‰ Source code praktik

github.com/novalagung/dasarpemrogramanpython-example/../komentar

â—‰ Chapter relevan lainnya

• String

â—‰ Referensi

• https://docs.python-guide.org/writing/documentation/

A.4. Python Variabel

Dalam konsep programming, variabel yaitu  suatu nama yang dikenali

komputer sebagai penampung nilai/data yang disimpan di memory. Sebagai

contoh nilai 3.14 disimpan di variabel bernama PI .

Pada chapter ini kita akan belajar tentang penerapan variabel di Python.

A.4.1. Deklarasi variabel

Agar dikenali oleh komputer, variabel harus dideklarasikan. Deklarasi variabel

di Python cukup sederhana, caranya tinggal tulis saja nama variabel kemudian

diikuti operator assignment beserta nilai awal yang ingin dimasukan ke

variabel tersebut. Contoh:

Karakter = yaitu  operator assignment, digunakan untuk operasi

penugasan. Nilai yang ada di sebelah kanan = ditugaskan untuk ditampung

oleh variabel yang berada di sebelah kiri = . Contoh pada statement nama =

"noval" , nilai "nama" ditugaskan untuk ditampung oleh variabel nama .

Nilai string bisa dituliskan dengan memakai   literal " ataupun '

Ok. Selanjutnya, coba kita munculkan nilai ke-empat variabel di atas ke layar

memakai   fungsi print() . Caranya:

nama = "noval"

hobi = 'makan'

umur = 18

laki = True

Penjelasan mengenai program di atas bisa dilihat di bawah ini:

â—‰ String formatting print

Di program yang sudah ditulis, ada statement berikut:

Statement tersebut yaitu  contoh cara memunculkan string ke layar output

( stdout ):

Lalu di bawahnya ada statement ini, yang merupakan contoh penerapan teknik

string formatting atau output formatting untuk mem-format string ke layar

output:

Karakter %s disitu akan di-replace dengan nilai variabel nama sebelum

dimunculkan. Dan %s disini menandakan bahwa data yang akan me-replace-

nya bertipe data string .

print("==== biodata ====")

print("nama: %s" % (nama))

print("hobi: %s, umur: %d, laki: %r" % (hobi, umur, laki))

print("==== biodata ====")

print("nama: %s" % (nama))

# output ➜ "nama: noval"

Selain %s , ada juga %d untuk data bertipe numerik integer, dan %r untuk

data bertipe bool . Contoh penerapannya bisa dilihat pada statement ke-3

program yang sudah di tulis.

Pembahasan detail mengenai string formatting ada di chapter String ➜

formatting

A.4.2. Naming convention variabel

Mengacu ke dokumentasi PEP 8 – Style Guide for Python Code, nama variabel

dianjurkan untuk ditulis memakai   snake_case .

A.4.3. Operasi assignment

Di pemrograman Python, deklarasi variabel yaitu  pasti operasi assignment.

Variabel dideklarasikan dengan ditentukan langsung nilai awalnya.

print("hobi: %s, umur: %d, laki: %r" % (hobi, umur, laki))

# output ➜ "hobi: makan, umur: 18, laki: True"

pesan = 'halo, selamat pagi'

nilai_ujian = 99.2

nama = "noval"

umur = 18

nama = "noval agung"

umur = 21

A.4.4. Deklarasi variabel beserta tipe

data

Tipe data variabel bisa ditentukan secara eksplisit, penulisannya bisa dilihat

pada kode berikut:

Pembahasan detail mengenai tipe data ada di chapter Tipe Data

A.4.5. Deklarasi banyak variabel sebaris

Contoh penulisan deklarasi banyak variabel dalam satu baris bisa dilihat pada

kode berikut:

Karakter %f digunakan untuk mem-format nilai float

Output program di atas:

nama: str = "noval"

hobi: str = 'makan'

umur: int = 18

laki: bool = True

nilai_ujian: float = 99.2

nilai1, nilai2, nilai3, nilai4 = 24, 25, 26, 21

nilai_rata_rata = (nilai1 + nilai2 + nilai3 + nilai4) / 4

print("rata-rata nilai: %f" % (nilai_rata_rata))

Catatan chapter 📑📑

â—‰ Source code praktik

github.com/novalagung/dasarpemrogramanpython-example/../variables

â—‰ Chapter relevan lainnya

• Tipe Data

• String

• Number

â—‰ Referensi

• https://www.w3schools.com/python/python_datatypes.asp

• https://peps.python.org/pep-0008/

• https://en.wikipedia.org/wiki/Snake_case

• https://www.learnpython.org/en/String_Formatting

A.5. Python Konstanta

Konstanta (atau nilai konstan) yaitu  sebuah variabel yang nilainya

dideklarasikan di awal dan tidak bisa diubah setelahnya.

Pada chapter ini kita akan mempelajari tentang penerapan Konstanta di

Python.

A.5.1. Konstanta di Python

Deklarasi konstanta di Python dilakukan memakai   bantuan tipe class

bernama typing.Final .

Untuk memakai  nya, typing.Final perlu di-import terlebih dahulu

memakai   keyword from dan import .

â—‰ Module import

Keyword import digunakan untuk meng-import sesuatu, sedangkan keyword

from digunakan untuk menentukan dari module mana sesuatu tersebut akan

from typing import Final

PI: Final = 3.14

print("pi: %f" % (PI))

di-import.

Pembahasan detail mengenai import dan from ada di chapter

Modules

Statement from typing import Final artinya yaitu  meng-import tipe

Final dari module typing yang dimana module ini merupakan bagian dari

Python standard library (stdlib).

Pembahasan detail mengenai Python standard library (stdlib) ada di

chapter Python standard library (stdlib)

A.5.2. Tipe class typing.Final

Tipe Final digunakan untuk menandai suatu variabel yaitu  tidak bisa

diubah nilainya (konstanta). Cara penerapan Final bisa dengan dituliskan

tipe data konstanta-nya secara eksplisit, atau boleh tidak ditentukan (tipe akan

diidentifikasi oleh interpreter berdasarkan tipe data nilainya).

Pembahasan detail mengenai tipe data ada di chapter Tipe Data

# tipe konstanta PI tidak ditentukan secara explisit,

# melainkan didapat dari tipe data nilai

PI: Final = 3.14

# tipe konstanta TOTAL_MONTH ditentukan secara explisit yaitu `int`

TOTAL_MONTH: Final[int] = 12

A.5.3. Naming convention konstanta

Mengacu ke dokumentasi PEP 8 – Style Guide for Python Code, nama konstanta

harus dituliskan dalam huruf besar (UPPER_CASE).

Catatan chapter 📑📑

â—‰ Source code praktik

github.com/novalagung/dasarpemrogramanpython-example/../konstanta

â—‰ Chapter relevan lainnya

• Variabel

• Tipe Data

• Modules

• Python standard library (stdlib)

â—‰ Referensi

• https://docs.python.org/3/library/typing.html#typing.Final

• https://peps.python.org/pep-0008/

A.6. Python Tipe Data

Python mengenal cukup banyak tipe data, mulai dari yang built-in (atau

bawaan) maupun custom type. Pada chapter ini kita akan mempelajari high-

level overview tipe-tipe tersebut.

A.6.1. Tipe data numerik

Ada setidaknya 3 tipe data numerik di Python, yaitu:

Tipe

data Keterangan Contoh

int menampung bilangan bulat atauinteger number_1 = 10000024

float menampung bilangan desimal ataufloating point number_2 = 3.14

complex menampung nilai berisi kombinasibilangan real dan imajiner number_3 = 120+3j

Penjelasan detail mengenai string ada pada chapter Number

A.6.2. Tipe data string / str

Tipe string direpresentasikan oleh str , pembuatannya bisa memakai  

literal string yang ditandai dengan tanda awalan dan akhiran tanda " atau

' .

• memakai   tanda petik dua ( " )

• memakai   tanda petik satu ( ' )

Jika ada baris baru (atau newline) di bagian awal penulisan ''' atau """

maka baris baru tersebut merupakan bagian dari string. Jika ingin

meng-exclude-nya bisa memakai   """\ atau '''\ . Contoh:

# string sebaris

string_1 = "hello python"

# string multi-baris

string_2 = """Selamat

Belajar

Python"""

# string sebaris

string_3 = 'for the horde!'

# string multi-baris

string_4 = '''

Sesuk

Preiiii

'''

string_5 = '''\

Sesuk

Preiiii

'''

Penjelasan detail mengenai string ada pada chapter String

A.6.3. Tipe data bool

Literal untuk tipe data boolean di Python yaitu  True untuk nilai benar, dan

False untuk nilai salah.

A.6.4. Tipe data None

Tipe data None merepresentasikan nilai kosong (seperti nilai null atau nil

di bahasa lain). Pengecekan nilai kosong digunakan

Penjelasan lebih detail mengenai None ada pada chapter None

bool_1 = True

bool_2 = False

data = "hello"

print(data)

# output ➜ hello

data = None

print(data)

# output ➜ data

data = "python"

print(data)

# output ➜ python

A.6.5. Tipe data list

List yaitu  tipe data di Python untuk menampung nilai kolektif yang disimpan

secara urut, dengan isi bisa berupa banyak varian tipe data (tidak harus

sejenis). Cara penerapan list yaitu  dengan menuliskan nilai kolektif dengan

pembatas , dan diapit tanda [ dan ] .

Pengaksesan element list memakai   notasi list[index_number] . Contoh:

Penjelasan detail mengenai list ada pada chapter List

A.6.6. Tipe data tuple

Tuple yaitu  tipe data kolektif yang mirip dengan list, dengan pembeda

yaitu :

# list with int as element's data type

list_1 = [2, 4, 8, 16]

# list with str as element's data type

list_2 = ["grayson", "jason", "tim", "damian"]

# list with various data type in the element

list_3 = [24, False, "Hello Python"]

list_1 = [2, 4, 8, 16]

print(list_1[2])

# output ➜ 8

• Nilai pada data list yaitu  bisa diubah (mutable), sedangkan nilai data

tuple tidak bisa diubah (immutable).

• List memakai   tanda [ dan ] untuk penulisan literal, sedangkan

pada tuple yang digunakan yaitu  tanda ( dan ) .

Pengaksesan element tuple memakai   notasi tuple[index_number] .

Contoh:

Penjelasan detail mengenai tuple ada pada chapter Tuple

A.6.7. Tipe data dictionary

Tipe data dict atau dictionary berguna untuk menyimpan data kolektif

terstruktur berbentuk key value. Contoh penerapan:

# tuple with int as element's data type

tuple_1 = (2, 3, 4)

# tuple with str as element's data type

tuple_2 = ("numenor", "valinor")

# tuple with various data type in the element

tuple_3 = (24, False, "Hello Python")

tuple_1 = (2, 3, 4)

print(tuple_1[2])

# output ➜ 4

profile_1 = {

"name": "Noval",

Pengaksesan property dictionary memakai   notasi dict[property_name] .

Contoh:

Penulisan data dictionary diperbolehkan secara horizontal, contohnya seperti

berikut:

Penjelasan detail mengenai dictionary ada pada chapter Dictionary

A.6.8. Tipe data set

Tipe data set yaitu  cara lain untuk menyimpan data kolektif. Tipe data ini

memiliki beberapa kelemahan:

• Tidak bisa menyimpan informasi urutan data

• Elemen data yang sudah dideklarasikan tidak bisa diubah nilainya (tapi

bisa dihapus)

• Tidak bisa diakses memakai   index (tetapi bisa memakai  

perulangan)

Contoh penerapan set:

print("name: %s" % (profile_1["name"]))

# output ➜ name: Noval

print("hobbies: %s" % (profile_1["hobbies"]))

# output ➜ name: ["gaming", "learning"]

profile_1 = { "name": "Noval", "hobbies": ["gaming", "learning"] }

Penjelasan detail mengenai set ada pada chapter Set

A.6.9. Tipe data lainnya

Selain tipe-tipe di atas ada juga beberapa tipe data lainnya, seperti frozenset,

bytes, memoryview, range; yang kesemuanya akan dibahas satu per satu di

chapter terpisah.

• Penjelasan detail mengenai frozenset ada pada chapter Set ➜

frozenset

• Penjelasan detail mengenai range ada pada chapter Perulangan ➜

for & range

Catatan chapter 📑📑

â—‰ Source code praktik

github.com/novalagung/dasarpemrogramanpython-example/../tipe-data

â—‰ Chapter relevan lainnya

• String

set_1 = {"pineapple", "spaghetti"}

print(set_1)

# output ➜ {"pineapple", "spaghetti"}

• List

• Tuple

• Set

• Dictionary

â—‰ Referensi

• https://docs.python.org/3/tutorial/introduction.html

• https://docs.python.org/3/library/stdtypes.html#typesseq

A.7. Python Operator

Operator yaitu  suatu karakter yang memiliki kegunaan khusus contohnya

seperti + untuk operasi aritmatika tambah, dan and untuk operasi logika

AND.

Pada chapter ini kita akan mempelajari macam-macam operator yang ada di

Python.

A.7.1. Operator aritmatika

Operator Keterangan Contoh

+ operasi tambah num = 2 + 2 ➜ hasilnyanum nilainya 4

unary + penanda nilai positif num = +2 ➜ hasilnya numnilainya 2

- operasi pengurangan num = 3 - 2 ➜ hasilnyanum nilainya 1

unary - penanda nilai negatif num = -2 ➜ hasilnya numnilainya -2

* operasi perkalian num = 3 * 3 ➜ hasilnyanum nilainya 9

Operator Keterangan Contoh

/ operasi pembagian num = 8 / 2 ➜ hasilnyanum nilainya 4

// operasi bagi dengan hasildibulatkan ke bawah

num = 10 // 3 ➜ hasilnya

num nilainya 3

% operasi modulo (pencariansisa hasil bagi)

num = 7 % 4 ➜ hasilnya

num nilainya 3

** operasi pangkat num = 3 ** 2 ➜ hasilnyanum nilainya 9

A.7.2. Operator assignment

Operator assignment yaitu  = , digunakan untuk operasi assignment

(penugasan nilai atau penentuan nilai), sekaligus untuk deklarasi variabel jika

variabel tersebut sebelumnya belum terdeklarasi. Contoh:

# deklarasi variabel num_1

num_1 = 12

# deklarasi variabel num_2

num_2 = 24

# nilai baru ditugaskan ke variabel num_2

num_2 = 12

# deklarasi variabel num_3 dengan isi nilai hasil operasi aritmatika

`num_1 + num_2`

A.7.3. Operator perbandingan

Operator perbandingan pasti menghasilkan nilai kebenaran bool dengan

kemungkinannya hanya dua nilai, yaitu benar ( True ) atau salah ( False ).

Python mengenal operasi perbandingan standar yang umumnya juga dipakai

di bahasa lain.

Operator Keterangan Contoh

== apakah kiri sama dengankanan

res = 4 == 5 ➜ hasilnya

res nilainya False

!= apakah kiri tidak samadengan kanan

res = 4 != 5 ➜ hasilnya

res nilainya True

> apakah kiri lebih besardibanding kanan

res = 4 > 5 ➜ hasilnya

res nilainya False

< apakah kiri lebih kecildibanding kanan

res = 4 < 5 ➜ hasilnya

res nilainya True

>= apakah kiri lebih besar atausama dengan kanan

res = 5 >= 5 ➜ hasilnya

res nilainya True

<= apakah kiri lebih kecil atausama dengan kanan

res = 4 <= 5 ➜ hasilnya

res nilainya False

A.7.4. Operator logika

Operator Keterangan Contoh

and operasi logika AND res = (4 == 5) and (2 != 3) âžœhasilnya res nilainya False

or operasi logika OR res = (4 == 5) or (2 != 3) âžœhasilnya res nilainya True

not

atau !

operasi logika

negasi (atau NOT)

res = not (2 == 3) ➜ hasilnya res

nilainya True

res = !(2 == 3) ➜ hasilnya res

nilainya True

A.7.5. Operator bitwise

Operator Keterangan Contoh

& operasi bitwise AND x & y = 0 (0000 0000)

| operasi bitwise OR x | y = 14 (0000 1110)

~ operasi bitwise NOT ~x = -11 (1111 0101)

^ operasi bitwise XOR x ^ y = 14 (0000 1110)

Operator Keterangan Contoh

>> operasi bitwise right shift x >> 2 = 2 (0000 0010)

<< operasi bitwise left shift x << 2 = 40 (0010 1000)

A.7.6. Operator identity ( is )

Operator is memiliki kemiripan dengan operator logika == , perbedaannya

pada operator is yang dibandingkan bukan nilai, melainkan identitas atau ID-

nya.

Bisa saja ada 2 variabel bernilai sama tapi identitasnya berbeda. Contoh:

Di Python ada special case yang perlu kita ketahui perihal penerapan

operator is untuk operasi perbandingan identitas khusus tipe data

numerik. Pembahasan detailnya ada di chapter Object ID & Reference.

num_1 = 100001

num_2 = 100001

res = num_1 is num_2

print("num_1 is num_2 =", res)

print("id(num_1): %s, id(num_2): %s" % (id(num_1), id(num_2)))

INFO

Pengecekan nilai kosong (atau None ) dianjurkan untuk selalu dilakukan

memakai   operator is , dan menghindari penggunaan operator == .

Hal ini karena operator is membandingkan identitas data dan identitas

data None selalu valid. Sedangkan operator == perbandingannya

dilakukan dengan via special method __eq__() yang default method

tersebut bisa di-override isinya.

Lebih jelasnya penggunaan operator is terhadap None di bahas

di chapter None

â—‰ Fungsi print() tanpa string formatting

Statement print("num_1 is not num_2 =", res) yaitu  salah satu cara

untuk printing data tanpa memakai   string formatting (seperti %s ).

Yang terjadi pada statement tersebut yaitu , semua nilai argument

pemanggilan fungsi print() akan digabung dengan delimiter karakter spasi (

) kemudian ditampilkan ke layar console.

Agar lebih jelas, silakan perhatikan statement berikut, keduanya yaitu 

menghasilkan output yang sama.

print("message: %s %s %s" % ("hello", "python", "learner"))

print("message:", "hello", "python", "learner")

â—‰ Fungsi id()

Digunakan untuk mengambil nilai identitas atau ID suatu data. Contoh

penerapannya sangat mudah, cukup panggil fungsi id() kemudian tulis data

yang ingin diambil ID-nya sebagai argument pemanggilan fungsi tersebut.

Nilai kembalian fungsi id() bertipe numerik.

Pembahasan detail mengenai fungsi id() ada di chapter Object ID &

Reference

A.7.7. Operator membership ( in )

Operator in digunakan untuk mengecek apakah suatu nilai merupakan

bagian dari data kolektif atau tidak.

Operator ini bisa dipergunakan pada semua tipe data kolektif seperti

data_1 = "hello world"

id_data_1 = id(data_1)

print("data_1:", data_1)

# output ➜ data_1: hello world

print("id_data_1:", id_data_1)

# output ➜ id_data_1: 19441xxxxxxxx

dictionary, set, tuple, dan list. Selain itu, operator in juga bisa digunakan

pada string untuk pengecekan substring

Operator in jika diterapkan pada tipe dictionary, yang di-check yaitu 

key-nya bukan value-nya.

sample_list = [2, 3, 4]

is_3_exists = 3 in sample_list

print(is_3_exists)

# output ➜ True

sample_tuple = ("hello", "python")

is_hello_exists = "hello" in sample_tuple

print(is_hello_exists)

# output ➜ True

sample_dict = { "nama": "noval", "age": 12 }

is_key_nama_exists = "nama" in sample_dict

print(is_key_nama_exists)

# output ➜ True

sample_set = { "sesuk", "preiiii" }

is_prei = "preiiii" in sample_set

print(is_prei)

# output ➜ True

text = 'Hello world'

is_substring_exists = 'orl' in text

print(is_substring_exists)

# output ➜ True

Catatan chapter 📑📑

â—‰ Source code praktik

github.com/novalagung/dasarpemrogramanpython-example/../operator

â—‰ Chapter relevan lainnya

• Variabel

• Tipe Data

• String ➜ formatting

â—‰ TBA

• Operator @ for matrix multiplication

â—‰ Referensi

• https://realpython.com/python-operators-expressions/

• https://www.programiz.com/python-programming/operators

• https://stackoverflow.com/a/15172182/1467988

A.8. Seleksi kondisi

Python ➜ if, elif, else

Seleksi kondisi yaitu  suatu blok kode yang dieksekusi hanya ketika kriteria

yang ditentukan terpenuhi. Teknik seleksi kondisi banyak digunakan untuk

kontrol alur program.

Python mengenal beberapa keyword seleksi kondisi, dan pada chapter ini akan

kita pelajari.

A.8.1. Keyword if

if yaitu  keyword seleksi kondisi di Python. Cara penerapan keyword ini

sangat mudah, cukup tulis saja if diikuti dengan kondisi berupa nilai bool

atau statement operasi logika, lalu dibawahnya ditulis blok kode yang ingin

dieksekusi ketika kondisi tersebut terpenuhi. Contoh:

grade = 100

if grade == 100:

print("perfect")

if grade == 90:

print("ok")

print("keep working hard!")

Bisa dilihat di output, hanya pesan perfect yang muncul karena kondisi

grade == 100 yaitu  yang terpenuhi. Sedangkan statement print("ok")

tidak tereksekusi karena nilai variabel grade bukanlah 90 .

â—‰ Block indentation

Di python, suatu blok kondisi ditandai dengan indentation atau spasi, yang

menjadikan kode semakin menjorok ke kanan.

Sebagai contoh, 2 blok kode print berikut merupakan isi dari seleksi kondisi

if grade == 90 .

Sesuai aturan PEP 8 – Style Guide for Python Code, indentation di Python

memakai   4 karakter spasi dan bukan karakter tab.

A.8.2. Keyword elif

elif (kependekan dari else if) digunakan untuk menambahkan blok seleksi

kondisi baru, untuk mengantisipasi blok if yang tidak terpenuhi.

Dalam penerapannya, suatu blok seleksi kondisi harus diawali dengan if .

Keyword elif hanya bisa dipergunakan pada kondisi setelahnya yang masih

satu rantai (masih satu chain). Contoh:

if grade == 90:

print("ok")

print("keep working hard!")

str_input = input('Enter your grade: ')

Jalankan program di atas, kemudian inputkan suatu nilai numerik lalu tekan

enter.

Kode di atas menghasilkan:

• Ketika nilai inputan yaitu  86 , muncul pesan awesome karena blok

seleksi kondisi yang terpenuhi yaitu  elif grade >= 85 .

• Ketika nilai inputan yaitu  100 , muncul pesan perfect karena blok

seleksi kondisi yang terpenuhi yaitu  grade == 100 .

• Ketika nilai inputan yaitu  40 , tidak muncul pesan karena semua blok

seleksi kondisi tidak terpenuhi.

â—‰ Fungsi input()

Fungsi input digunakan untuk menampilkan suatu pesan text (yang disisipkan

saat fungsi dipanggil) dan mengembalikan nilai inputan user dalam bentuk

string.

Agar makin jelas, silakan praktikan kode berikut:

str_input = input('Enter your grade: ')

print("inputan user:", str_input, type(str_input))

Kode di atas menghasilkan:

1. Text Enter your grade : muncul, kemudian kursor akan berhenti disitu.

2. User perlu menuliskan sesuatu kemudian menekan tombol enter agar

eksekusi program berlanjut.

3. Inputan dari user kemudian menjadi nilai balik fungsi input() (yang pada

contoh di atas ditampung oleh variabel input_str ).

4. Nilai inputan user di print memakai   statement print("inputan

user:", str_input) .

â—‰ Fungsi type()

Fungsi type() digunakan untuk melihat informasi tipe data dari suatu nilai

atau variabel. Fungsi ini mengembalikan string dalam format <class

'tipe_data'> .

â—‰ Type conversion / konversi tipe data

Konversi tipe data string ke int dilakukan memakai   fungsi int() .

Dengan memakai   fungsi tersebut, data string yang disisipkan pada

parameter, tipe datanya berubah menjadi int .

Sebagai contoh, bisa dilihat pada program berikut ini, hasil statement

type(grade) yaitu  <class 'int'> yang menunjukan bahwa tipe datanya

yaitu  int .

Pembahasan detail mengenai type conversion ada di chapter Konversi

Tipe Data

A.8.3. Keyword else

else digunakan sebagai blok seleksi kondisi penutup ketika blok if dan/

atau elif dalam satu chain tidak ada yang terpenuhi. Contoh:

str_input = input('Enter your grade: ')

grade = int(str_input)

print("inputan user:", grade, type(grade))

str_input = input('Enter your grade: ')

grade = int(str_input)

if grade == 100:

print("perfect")

elif grade >= 85:

print("awesome")

elif grade >= 65:

print("passed the exam")

else:

print("below the passing grade")

A.8.4. Seleksi kondisi bercabang / nested

Seleksi kondisi bisa saja berada di dalam suatu blok seleksi kondisi. Teknik ini

biasa disebut dengan seleksi kondisi bercabang atau bersarang.

Di Python, cara penerapannya cukup dengan menuliskan blok seleksi kondisi

tersebut. Gunakan indentation yang lebih ke kanan untuk seleksi kondisi

terdalam.

str_input = input('Enter your grade: ')

grade = int(str_input)

if grade == 100:

print("perfect")

elif grade >= 85:

print("awesome")

elif grade >= 65:

print("passed the exam")

if grade <= 70:

print("but you need to improve it!")

else:

print("with ok grade")

else:

print("below the passing grade")

Pada kode di atas, pada seleksi kondisi terluar, di bawah blok if dan

elif sengaja penulis tulis di baris baru agar lebih mudah untuk dibaca.

Hal seperti ini diperbolehkan.

A.8.5. Seleksi kondisi dengan operasi

logika

Keyword and , or , dan not bisa digunakan dalam seleksi kondisi.

Contohnya:

grade = int(input('Enter your current grade: '))

prev_grade = int(input('Enter your previous grade: '))

if grade >= 90 and prev_grade >= 65:

print("awesome")

if grade >= 90 and prev_grade < 65:

print("awesome. you definitely working hard, right?")

elif grade >= 65:

print("passed the exam")

else:

print("below the passing grade")

if (grade >= 65 and not prev_grade >= 65) or (not grade >= 65 and

prev_grade >= 65):

print("at least you passed one exam. good job!")

A.8.6. Seleksi kondisi sebaris & ternary

Silakan perhatikan kode sederhana berikut, isinya yaitu  seleksi kondisi

sederhana pengecekan nilai grade >= 65 atau tidak.

Kode di atas bisa dituliskan dalam bentuk alternatif penulisan kode lainnya:

â—‰ One-line / sebaris

Metode penulisan sebaris ini cocok diterapkan pada situasi dimana seleksi

kondisi hanya memiliki 1 kondisi saja.

â—‰ Ternary

Metode penulisan ternary umum diterapkan pada blok kode seleksi kondisi

yang memiliki 2 kondisi ( True dan False ).

if grade >= 65:

print("passed the exam")

else:

print("below the passing grade")

if grade >= 65: print("passed the exam")

if grade < 65: print("below the passing grade")

print("passed the exam") if grade >= 65 else print("below the passing

grade")

â—‰ Ternary dengan nilai balik

Metode penulisan ini sebenarnya yaitu  sama seperti penerapan ternary

sebelumnya, perbedaannya: pada metode ini setiap kondisi menghasilkan nilai

balik yang umumnya ditampung oleh variabel. Pada contoh di atas, nilai balik

ditampung variabel message .

A.8.7. Pattern matching

Selain keyword if , Python menyediakan keyword lain yaitu match dan

case yang kegunaannya yaitu  untuk pattern matching. Pattern matching

sendiri merupakan teknik seleksi kondisi yang cukup advance, mendukung

banyak variasi pencocokan pola.

Lebih detailnya mengenai pattern matching ada di chapter Pattern Matching ➜

match

Catatan chapter 📑📑

â—‰ Source code praktik

github.com/novalagung/dasarpemrogramanpython-example/../if-elif-

else

message = "passed the exam" if grade >= 65 else "below the passing grade"

print(message)

â—‰ Referensi

• https://docs.python.org/3/tutorial/controlflow.html

A.9. Perulangan Python ➜

for & range

Perulangan atau loop merupakan teknik untuk mengulang-ulang eksekusi suatu blok

kode, atau mengiterasi elemen milik tipe data kolektif (contohnya: list). Chapter ini

membahas tentang penerapannya di Python.

A.9.1. Keyword for dan fungsi range()

Perulangan di Python bisa dibuat memakai   kombinasi keyword for dan fungsi

range() .

• Keyword for yaitu  keyword untuk perulangan, dalam penerapannya diikuti

dengan keyword in .

• Fungsi range() digunakan untuk membuat object range, yang umumnya

dipakai sebagai kontrol perulangan.

Agar lebih jelas, silakan perhatikan dan test kode berikut:

for i in range(5):

print("index:", i)

Penjelasan:

• Statement print("index:", i) muncul 5 kali, karena perulangan dilakukan

dengan kontrol range(5) dimana statement tersebut menghasilkan object

range dengan isi deret angka sejumlah 5 dimulai dari angka 0 hingga 4 .

• Statement for i in range(5): yaitu  contoh penulisan perulangan

memakai   for dan range() . Variabel i berisi nilai counter setiap iterasi,

yang pada konteks ini yaitu  angka 0 hingga 4 .

• Statement print("index:", i) wajib ditulis menjorok ke kanan karena

merupakan isi dari blok perulangan for i in range(5): .

â—‰ Fungsi list()

Fungsi range() menghasilkan object sequence, yaitu jenis data yang strukturnya

mirip seperti list (tapi bukan list) yang kegunaan utamanya yaitu  untuk kontrol

perulangan.

Object sequence bisa dikonversi bentuk list dengan cara dibungkus memakai  

fungsi list() .

r = range(5)

print("r:", list(r))

• Pembahasan detail mengenai list ada di chapter List

• Pembahasan detail mengenai type conversion ada di chapter Konversi Tipe

Data

A.9.2. Penerapan fungsi range()

Statement range(n) menghasilkan data range sejumlah n yang isinya dimulai dari

angka 0 . Syntax range(n) yaitu  bentuk paling sederhana penerapan fungsi ini.

Selain range(n) ada juga beberapa cara penulisan lainnya:

• memakai   range(start, stop) . Hasilnya data range dimulai dari start

dan hingga stop - 1 . Sebagai contoh, range(1, 4) menghasilkan data range

[1, 2, 3] .

• memakai   range(start, stop, step) . Hasilnya data range dimulai dari

start dan hingga stop - 1 , dengan nilai increment sejumlah step . Sebagai

contoh, range(1, 10, 3) menghasilkan data range [1, 4, 7] .

Agar lebih jelas, silakan perhatikan kode berikut. Ke-3 perulangan ini ekuivalen,

menghasilkan output yang sama.

for i in range(3): for i in range(0, 3): for i in

Tambahan contoh penerapan for dan range() :

A.9.3. Iterasi element data kolektif

Perulangan memakai   for bisa dilakukan pada beberapa jenis tipe data (seperti

list, string, tuple, dan lainnya) caranya dengan langsung menuliskan saja variabel

atau data tersebut pada statement for .

for i in range(2, 10, 2):

print("index:", i)

for i in range(5, -5, -1):

print("index:", i)

Tipe data yang bisa digunakan pada keyword for bisasa disebut dengan tipe

iterator. Lebih detailnya dibahas pada chapter Iterator.

Contoh penerapannya bisa dilihat di bawah ini:

â—‰ Iterasi data list

â—‰ Iterasi data tuple

â—‰ Iterasi data string

Penggunaan keyword for pada tipe data string akan mengiterasi setiap karakter

yang ada di string.

messages = ["morning", "afternoon", "evening"]

for m in messages:

print(m)

numbers = ("twenty four", 24)

for n in numbers:

print(n)

â—‰ Iterasi data dictionary

Penggunaan keyword for pada tipe data dict (atau dictionary) akan mengiterasi

key-nya. Dari key tersebut value bisa diambil dengan mudah memakai   notasi

dict[key] .

for char in "hello python":

print(char)

bio = {

"name": "toyota camry",

"year": 1993,

}

for key in bio:

print("key:", key, "value:", bio[key])

â—‰ Iterasi data set

A.9.4. Perulangan bercabang / nested for

Cara penerapan nested loop yaitu  cukup dengan menuliskan statement for

sebagai isi dari statement for atasnya. Contoh:

numbers = {"twenty four", 24}

for n in numbers:

print(n)

max = int(input("jumlah bintang: "))

for i in range(max):

for j in range(0, max - i):

print("*", end=" ")

print()

â—‰ Parameter opsional end pada fungsi print()

Fungsi print() memiliki parameter opsional bernama end , kegunaannya untuk

mengubah karakter akhir yang muncul setelah data string di-print. Default nilai

paramter end ini yaitu  \n atau karakter baris baru, itulah kenapa setiap selesai

print pasti ada baris baru.

Statement print("*", end=" ") akan menghasilkan pesan * yang di-akhiri

dengan karakter spasi karena nilai parameter end di-set dengan nilai karakter spasi

(atau ).

Pembahasan detail mengenai fungsi dan parameter opsional ada di chapter

berikut:

• Function

• Function ➜ Positional, Optional, Keyword Arguments

â—‰ Fungsi print() tanpa parameter

Pemanggilan fungsi print() argument/parameter menghasilkan baris baru.

Catatan chapter 📑📑

â—‰ Source code praktik

github.com/novalagung/dasarpemrogramanpython-example/../for-range

â—‰ Chapter relevan lainnya

• List

• String

• Function

â—‰ Referensi

• https://docs.python.org/3/library/functions.html#func-range

• https://docs.python.org/3/library/functions.html#print

• https://python-reference.readthedocs.io/en/latest/docs/functions/range.html

A.10. Perulangan Python

➜ while

Di Python, selain keyword for ada juga keyword while yang fungsinya

kurang lebih sama yaitu untuk perulangan. Bedanya, perulangan

memakai   while terkontrol via operasi logika atau nilai bool .

Pada chapter ini kita akan mempelajari cara penerapannya.

A.10.1. Keyword while

Cara penerapan perulangan ini yaitu  dengan menuliskan keyword while

kemudian diikuti dengan nilai bool atau operasi logika. Contoh:

should_continue = True

while should_continue:

n = int(input("enter an even number greater than 0: "))

if n <= 0 or n % 2 == 1:

print(n, "is not an even number greater than 0")

should_continue = False

else:

print("number:", n)

Program di atas memunculkan prompt inputan enter an even number

greater than 0: yang dimana akan terus muncul selama user tidak

menginputkan angka ganjil atau angka dibawah sama dengan 0 .

Contoh lain penerapan while dengan kontrol yaitu  operasi logika:

n = int(input("enter max data: "))

i = 0

while i < n:

print("number", i)

i += 1

â—‰ Operasi increment dan decrement

Python tidak mengenal operator unary ++ dan -- . Solusi untuk melakukan

operasi increment maupun decrement bisa memakai   cara berikut:

Operasi Cara 1 Cara 2

Increment i += 1 i = i + 1

Decrement i -= 1 i = i - 1

A.10.2. Perulangan while vs for

Operasi while cocok digunakan untuk perulangan yang dimana kontrolnya

yaitu  operasi logika atau nilai boolean yang tidak ada kaitannya dengan

sequence.

Pada program yang sudah di tulis di atas, perulangan akan menjadi lebih

ringkas dengan pengaplikasian keyword for , silakan lihat perbandingannya di

bawah ini:

• Dengan keyword while :

n = int(input("enter max data: "))

i = 0

while i < n:

print("number", i)

i += 1

• Dengan keyword for :

Sedangkan keyword for lebih pas digunakan pada perulangan yang

kontrolnya yaitu  data sequence, contohnya seperti range dan list.

A.10.3. Perulangan bercabang / nestedwhile

Contoh perulangan bercabang bisa dilihat pada kode program berikut ini.

Caranya cukup tulis saja keyword while di dalam block kode while .

n = int(input("enter max data: "))

for i in range(n):

print("number", i)

n = int(input("enter max data: "))

i = 0

while i < n:

j = 0

while j < n - i:

print("*", end=" ")

j += 1

print()

i += 1

A.10.4. Kombinasi while dan for

Kedua keyword perulangan yang sudah dipelajari, yaitu for dan while bisa

dikombinasikan untuk membuat suatu nested loop atau perulangan bercabang.

Pada contoh berikut, kode program di atas diubah memakai   kombinasi

keyword for dan while .

n = int(input("enter max data: "))

i = 0

for i in range(n):

j = 0

while j < n - i:

print("*", end=" ")

j += 1

print()

Catatan chapter 📑📑

â—‰ Source code praktik

github.com/novalagung/dasarpemrogramanpython-example/../while

â—‰ Referensi

• https://docs.python.org/3/tutorial/controlflow.html

A.11. Perulangan Python

➜ break, continue

Keyword break dan continue sering dipergunakan dalam perulangan untuk

alterasi flow secara paksa, seperti memberhentikan perulangan atau memaksa

perulangan untuk lanjut ke iterasi berikutnya.

Pada chapter ini kita akan mempelajarinya.

A.11.1. Keyword break

Pengaplikasian break biasanya dikombinasikan dengan seleksi kondisi.

Sebagai contoh program sederhana berikut, yaitu program dengan spesifikasi:

• Berisi perulangan yang sifatnya berjalan terus-menerus tanpa henti

(karena memakai   nilai True sebagai kontrol).

• Perulangan hanya berhenti jika nilai n (yang didapat dari inputan user)

yaitu  tidak bisa dibagi dengan angka 3 .

while True:

n = int(input("enter a number divisible by 3: "))

if n % 3 != 0:

break

print("%d is divisible by 3" % (n))

A.11.2. Keyword continue

Keyword continue digunakan untuk memaksa perulangan lanjut ke iterasi

berikutnya (seperti proses skip).

Contoh penerapannya bisa dilihat pada program berikut, yang spesifikasinya:

• Program berisi perulangan dengan kontrol yaitu  data range sebanyak 10

(dimana isinya yaitu  angka numerik 0 hingga 9 ).

• Ketika nilai variabel counter i yaitu  dibawah 3 atau di atas 7 maka

iterasi di-skip.

Efek dari continue yaitu  semua statement setelahnya akan di-skip. Pada

program di atas, statement print(i) tidak dieksekusi ada continue .

Hasilnya bisa dilihat pada gambar berikut, nilai yang di-print yaitu  angka 3

hingga 7 saja.

for i in range(10):

if i < 3 or i > 7:

continue

print(i)

A.11.3. Label perulangan

Python tidak mengenal konsep perulangan yang memiliki label.

Teknik menamai perulangan dengan label umumnya digunakan untuk

mengontrol flow pada perulangan bercabang / nested, misalnya untuk

menghentikan perulangan terluar secara paksa ketika suatu kondisi terpenuhi.

Di Python, algoritma seperti ini bisa diterapkan namun memakai  

tambahan kode. Contoh penerapannya bisa dilihat pada kode berikut:

Penjelasan:

max = int(input("jumlah bintang: "))

outer_loop = True

for i in range(max):

if not outer_loop:

break

for j in range(i + 1):

print("*", end=" ")

if j >= 7:

outer_loop = False

break

print()

• Program yang memiliki perulanga nested dengan jumlah perulangan ada 2.

• Disiapkan sebuah variabel bool bernama outer_loop untuk kontrol

perulangan terluar.

• Ketika nilai j (yang merupakan variabel counter perulangan terdalam)

yaitu  lebih dari atau sama dengan 7 , maka variabel outer_loop di set

nilainya menjadi False , dan perulangan terdalam di- break secara

paksa.

• Dengan ini maka perulangan terluar akan terhenti.

Catatan chapter 📑📑

â—‰ Source code praktik

github.com/novalagung/dasarpemrogramanpython-example/../break-

continue

â—‰ Chapter relevan lainnya

• Perulangan ➜ for & range

• Perulangan ➜ while

â—‰ Referensi

• https://docs.python.org/3/tutorial/controlflow.html

A.12. Python List

List yaitu  tipe data kolektif yang disimpan secara urut dan bisa diubah

nilainya (istilah lainnya yaitu  tipe data sequence).

Pada bahasa pemrograman umumnya ada tipe data array. List di Python ini

memiliki banyak kemiripan dengan array, bedanya list bisa berisi data dengan

berbagai macam tipe data, jadi tidak harus sejenis tipe datanya.

Pada chapter ini kita akan belajar lebih detail mengenai list dan

pengoperasiannya.

A.12.1. Pengenalan list

Deklarasi variabel dan data list yaitu  memakai   literal list dengan notasi

penulisan seperti berikut:

# contoh list

list_1 = [10, 70, 20]

# list dengan deklarasi element secara vertikal

list_2 = [

'ab',

'cd',

'hi',

'ca'

]

# list dengan element berisi bermacam-macam tipe data

list_3 = [3.14, 'hello python', True, False]

# list kosong

list_4 = []

Data dalam list biasa disebut dengan element. Setiap elemen disimpan dalam

list secara urut dengan penanda urutan yang disebut index. Nilai index

dimulai dari angka 0 .

Sebagai contoh, pada variabel list_1 di atas:

• Element index ke- 0 yaitu  data 10

• Element index ke- 1 yaitu  data 70

• Element index ke- 2 yaitu  data 20

A.12.2. Perulangan list

List yaitu  salah satu tipe data yang dapat digunakan langsung pada

perulangan for . Contoh:

Selain itu, perulangan list bisa juga dilakukan memakai   index, contohnya

seperti berikut:

Fungsi len() digunakan untuk menghitung jumlah element list. Dengan

mengkombinasikan nilai balik fungsi ini dan fungsi range() bisa terbentuk

data range dengan lebar sama dengan lebar list.

list_1 = [10, 70, 20]

for e in list_1:

print("elem:", e)

list_1 = [10, 70, 20]

for i in range(0, len(list_1)):

print("index:", i, "elem:", list_1[i])

â—‰ Fungsi enumerate()

Fungsi enumerate() digunakan untuk membuat data sequence menjadi data

enumerasi, yang jika dimasukan ke perulangan di setiap iterasinya bisa kita

akses index beserta element-nya.

A.12.3. Nested list

Penulisan nested list cukup mudah, contohnya bisa dilihat pada program

matrix berikut:

list_1 = [10, 70, 20]

for i, v in enumerate(list_1):

print("index:", i, "elem:", v)

matrix = [

[0, 1, 0, 1, 0],

[1, 1, 1, 0, 0],

[0, 0, 0, 1, 1],

[0, 1, 1, 1, 0],

]

for row in matrix:

for cel in row:

print(cel, end=" ")

print()

A.12.4. Fungsi list()

â—‰ Konversi range ke list

Data range (hasil pemanggilan fungsi range() ) bisa dikonversi ke bentuk list

memakai   fungsi list() . Cara ini cukup efisien untuk pembuatan data

list yang memiliki pattern atau pola. Sebagai contoh:

• List dimulai angka 0 hingga 9 :

• List dimulai angka 1 hingga 21 dengan penambahan 3 :

• List dimulai angka 100 hingga 0 dengan pengurangan -10 :

range_1 = range(0, 10)

list_1 = list(range_1)

print(list_1)

# output ➜ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

range_2 = range(0, 22, 3)

list_2 = list(range_2)

print(list_2)

# output ➜ [0, 3, 6, 9, 12, 15, 18, 21]

Selain metode ini, ada juga cara lainnya untuk membuat list, yaitu

memakai   metode list comprehension, yang akan dibahas pada

chapter berikutnya, yaitu List Comprehension

â—‰ Konversi string ke list

Selain untuk konversi data range ke list, fungsi list() bisa digunakan untuk

konversi data string ke list, dengan hasil yaitu  setiap karakter string menjadi

element list.

â—‰ Konversi tuple ke list

Tipe data tuple bisa diubah bentuknya menjadi list dengan memakai  

fungsi list() . Contoh penerapannya:

range_3 = range(100, 0, -10)

list_3 = list(range_3)

print(list_3)

# output ➜ [100, 90, 80, 70, 60, 50, 40, 30, 20, 10]

alphabets = list('abcdefgh')

print(alphabets)

# output ➜ ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

tuple_1 = (1, 2, 3, 4)

numbers = list(tuple_1)

print(numbers)

# output ➜ [1, 2, 3, 4]

Pembahasan detail mengenai tuple ada di chapter Tuple

A.12.5. Operasi pada list

â—‰ Mengakses element via index

Nilai elemen list bisa diakses memakai   notasi list[index] . Contoh:

DANGER

Pengaksesan elemen memakai   index di-luar kapasitas data akan

menghasilkan error.

Sebagai contoh, data list_1 di atas jika diakses index ke-3-nya misalnya

( list_1[3] ) hasilnya yaitu  error.

â—‰ Mengecek apakah element ada

Kombinasi keyword if dan in bisa digunakan untuk mengidentifikasi

apakah suatu element merupakan bagian dari list atau tidak. Contoh

penerapannya:

list_1 = [10, 70, 20]

elem_1st = list_1[0]

elem_2nd = list_1[1]

elem_3rd = list_1[2]

print(elem_1st, elem_2nd, elem_3rd)

# output ➜ [10, 70, 20]

â—‰ Slicing list

Slicing yaitu  metode pengaksesan list memakai   notasi slice. Notasi ini

mirip seperti array, namun mengembalikan data bertipe tetap slice.

Contoh pengaplikasian metode slicing bisa dilihat pada kode berikut. Variabel

list_2 diakses element-nya mulai index 1 hingga sebelum 3 :

Pembahasan detail mengenai slice ada di chapter Slice

â—‰ Mengubah nilai element

Cara mengubah nilai element list dengan cara mengakses nilai element

memakai   index, kemudian diikuti operator assignment = dan nilai baru.

list_1 = [10, 70, 20]

n = 70

if n in list_1:

print(n, "is exists")

else:

print(n, "is NOT exists")

# output ➜ 70 is exists

list_2 = ['ab', 'cd', 'hi', 'ca']

print('list_2:', list_2)

# output ➜ list2: ['ab', 'cd', 'hi', 'ca']

slice_1 = list_2[1:3]

print('slice_1:', slice_1)

# output ➜ slice_1: ['cd', 'hi']

â—‰ Append element

Operasi append atau menambahkan element baru setelah index terakhir, bisa

memakai   2 cara:

• via method append() :

• via slicing:

list_2 = ['ab', 'cd', 'hi', 'ca']

print('before:', list_2)

# output ➜ before: ['ab', 'cd', 'hi', 'ca']

list_2[1] = 'zk'

list_2[2] = 'sa'

print('after: ', list_2)

# output ➜ after: ['ab', 'zk', 'sa', 'ca']

list_1 = [10, 70, 20]

print('before: ', list_1)

# output ➜ before: [10, 70, 20]

list_1.append(88)

list_1.append(87)

print('after: ', list_1)

# output ➜ after : [10, 70, 20, 88, 87]

list_1 = [10, 70, 20]

print('before: ', list_1)

# output ➜ before: [10, 70, 20]

list_1[len(list_1):] = [88, 87]

print('after: ', list_1)

# output ➜ after : [10, 70, 20, 88, 87]

Pembahasan detail mengenai method ada 4 chapter berikut:

• OOP ➜ Instance Method

• OOP ➜ Class Method

• OOP ➜ Static Method

• OOP ➜ Abstract Method

â—‰ Extend/concat/union element

Operasi extend (atau concat atau union) yaitu  operasi penggabungan dua

data list. Ada beberapa metode yang tersedia, diantaranya:

• via method extend() :

• via slicing:

• via operator + :

list_1 = [10, 70, 20]

list_2 = [88, 77]

list_1.extend(list_2)

print(list_1)

# output ➜ [10, 70, 20, 88, 87]

list_1 = [10, 70, 20]

list_2 = [88, 77]

list_1[len(list_1):] = list_2

print(list_1)

# output ➜ [10, 70, 20, 88, 87]

Metode extend memakai   operator + mengharuskan hasil operasi

untuk ditampung ke variabel.

â—‰ Menyisipkan element pada index i

Method insert() digunakan untuk menyisipkan element baru pada posisi

index tertentu (misalnya index i ). Hasil operasi ini membuat semua element

setelah index tersebut posisinya bergeser ke kanan.

Pada penggunaannya, para parameter pertama diisi dengan posisi index, dan

parameter ke-2 diisi nilai.

• Variabel list_3 awalnya berisi [10, 70, 20, 70]

• Ditambahkan angka 15 pada index 0 , hasilnya nilai list_3 sekarang

yaitu  [15, 10, 70, 20, 70]

• Ditambahkan lagi, angka 25 pada index 2 , hasilnya nilai list_3

list_1 = [10, 70, 20]

list_2 = [88, 77]

list_3 = list_1 + list_2

print(list_3)

# output ➜ [10, 70, 20, 88, 87]

list_3 = [10, 70, 20, 70]

list_3.insert(0, 15)

print(list_3)

# output ➜ [15, 10, 70, 20, 70]

list_3.insert(2, 25)

print(list_3)

# output ➜ [15, 10, 25, 70, 20, 70]

sekarang yaitu  [15, 10, 25, 70, 20, 70]

â—‰ Menghapus element

Method remove() digunakan untuk menghapus element. Isi parameter fungsi

dengan element yang ingin di hapus.

Jika element yang ingin dihapus ditemukan ada lebih dari 1, maka yang

dihapus hanya yang pertama (sesuai urutan index).

â—‰ Menghapus element pada index i

Method pop() berfungsi untuk menghapus element pada index tertentu. Jika

tidak ada index yang ditentukan, maka data element terakhir yang dihapus.

Method pop() mengembalikan data element yang berhasil dihapus.

list_3 = [10, 70, 20, 70]

list_3.remove(70)

print(list_3)

# output ➜ [10, 20, 70]

list_3.remove(70)

print(list_3)

# output ➜ [10, 20]

list_3 = [10, 70, 20, 70]

x = list_3.pop(2)

print('list_3:', list_3)

# output ➜ list_3: [10, 70, 70]

print('removed element:', x)

Jika index i yang ingin dihapus tidak diketemukan, maka error IndexError

muncul.

• Lebih detailnya mengenai error dibahas pada chapter Error

Selain memakai   method pop() , keyword del bisa difungsikan untuk hal

yang sama, yaitu menghapus elemen tertentu. Contoh penerapannya:

â—‰ Menghapus element pada range index

Python memiliki keyword del yang berguna untuk menghapus suatu data.

list_3 = [10, 70, 20, 70]

x = list_3.pop(7)

list_3 = [10, 70, 20, 70]

print('len:', len(list_3), "data:", list_3)

del list_3[1]

print('len:', len(list_3), "data:", list_3)

Dengan menggabungkan keyword ini dan operasi slicing, kita bisa menghapus

element dalam range tertentu dengan cukup mudah.

Contoh, menghapus element pada index 1 hingga sebelum 3 :

â—‰ Menghitung jumlah element

Fungsi len() digunakan untuk menghitung jumlah element.

Selain fungsi len() , ada juga method count() milik method slice yang

kegunaannya memiliki kemiripan. Perbedaannya, method count() melakukan

operasi pencarian sekaligus menghitung jumlah element yang ditemukan.

Agar lebih jelas, silakan lihat kode berikut:

list_3 = [10, 70, 20, 70]

del list_3[1:3]

print(list_3)

# output ➜ [10, 70]

list_3 = [10, 70, 20, 70]

total = len(list_3)

print(total)

# output ➜ 4

list_3 = [10, 70, 20, 70]

count = list_3.count(70)

print('jumlah element dengan data `70`:', count)

# output ➜ jumlah element dengan data `70`: 2

â—‰ Mencari index element list

Untuk mencari index memakai   nilai element, gunakan method index()

milik list. Contoh bisa dilihat berikut, data cd ada dalam list pada index 1 .

Jika data element yang dicari tidak ada, maka akan muncul error ValueError :

â—‰ Mengosongkan list

Ada dua cara untuk mengosongkan list:

• via method clear() :

list_2 = ['ab', 'cd', 'hi', 'ca']

idx_1st = list_2.index('cd')

print('idx_1st: ', idx_1st)

# output ➜ idx_1st: 1

idx_2nd = list_2.index('kk')

print('idx_2nd: ', idx_2nd)

• Menimpanya dengan [] :

• memakai   keyword del dan slicing:

â—‰ Membalik urutan element list

Method reverse() digunakan untuk membalik posisi element pada list.

â—‰ Copy list

Ada 2 cara untuk menduplikasi list, memakai   method copy() dan teknik

list_1 = [10, 70, 20]

list_1.clear()

print(list_1)

# output ➜ []

list_1 = [10, 70, 20]

list_1 = []

print(list_1)

# output ➜ []

list_1 = [10, 70, 20]

del list_1[:]

print(list_1)

# output ➜ []

list_1 = [10, 70, 20]

list_1.reverse()

print(list_1)

# output ➜ [20, 70, 10]

slicing.

• memakai   method copy() :

• Kombinasi operasi assignment dan slicing:

Operasi copy disini jenisnya yaitu  shallow copy.

Lebih detailnya mengenai shallow copy vs deep copy dibahas pada

chapter terpisah.

â—‰ Sorting

Mengurutkan data list bisa dilakukan memakai   default sorter milik Python,

yaitu method sort() .

list_1 = [10, 70, 20]

list_2 = list_1.copy()

print(list_1)

# output ➜ [10, 70, 20]

print(list_2)

# output ➜ [10, 70, 20]

list_1 = [10, 70, 20]

list_2 = list_1[:]

print(list_1)

# output ➜ [10, 70, 20]

print(list_2)

# output ➜ [10, 70, 20]

list_1 = [10, 70, 20]

list_1.sort()

Method ini sebenarnya menyediakan kapasitas sorting yang cukup advance,

caranya dengan cara menambahkan closure/lambda pada argument method

ini.

Pembahasan detail mengenai closure ada di chapter Function ➜ Closure

Pembahasan detail mengenai lambda ada di chapter Function ➜ Lambda

Catatan chapter 📑📑

â—‰ Source code praktik

github.com/novalagung/dasarpemrogramanpython-example/../list

â—‰ Chapter relevan lainnya

• Perulangan ➜ for & range

• List Comprehension

• Slice

• Function ➜ Closure

• Function ➜ Lambda

â—‰ Referensi

• https://docs.python.org/3/tutorial/datastructures.html

• https://docs.python.org/3/library/stdtypes.html#typesseq

A.13. Python List

Comprehension

List comprehension yaitu  metode ringkas pembuatan list (selain

memakai   literal [] atau memakai   fungsi list() ). Cara ini lebih

banyak diterapkan untuk operasi list yang menghasilkan struktur baru.

Pada chapter ini kita akan mempelajarinya.

A.13.1. Pengenalan list comprehension

Metode penulisan list comprehension membuat kode menjadi sangat ringkas,

dengan konsekuensi agak sedikit membingungkan untuk yang belum terbiasa.

Jadi penulis sarankan gunakan sesuai kebutuhan.

Silakan pelajari contoh berikut agar lebih mudah memahami seperti apa itu list

comprehension.

â—‰ Contoh #1

Perulangan berikut:

... bisa dituliskan lebih ringkas memakai   list comprehension, menjadi

seq = []

for i in range(5):

seq.append(i * 2)

print(seq)

# output ➜ [0, 2, 4, 6, 8]

seperti berikut:

â—‰ Contoh #2

Perulangan berikut:

... bisa dituliskan lebih ringkas menjadi seperti berikut:

â—‰ Contoh #3

Perulangan berikut:

seq = [i * 2 for i in range(5)]

print(seq)

# output ➜ [0, 2, 4, 6, 8]

seq = []

for i in range(10):

if i % 2 == 1:

seq.append(i)

print(seq)

# output ➜ [1, 3, 5, 7, 9]

seq = [i for i in range(10) if i % 2 == 1]

print(seq)

# output ➜ [1, 3, 5, 7, 9]

seq = []

for i in range(1, 10):

... bisa dituliskan lebih ringkas menjadi dengan bantuan ternary menjadi

seperti ini:

... dan bisa dijadikan lebih ringkas lagi memakai   list comprehension:

â—‰ Contoh #4

Perulangan berikut:

... bisa dituliskan lebih ringkas menjadi seperti berikut:

seq = []

for i in range(1, 10):

seq.append(i * (2 if i % 2 == 0 else 3))

print(seq)

# output ➜ [3, 4, 9, 8, 15, 12, 21, 16, 27]

seq = [(i * (2 if i % 2 == 0 else 3)) for i in range(1, 10)]

print(seq)

# output ➜ [3, 4, 9, 8, 15, 12, 21, 16, 27]

list_x = ['a', 'b', 'c']

list_y = ['1', '2', '3']

seq = []

for x in list_x:

for y in list_y:

seq.append(x + y)

print(seq)

# output ➜ ['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3']

â—‰ Contoh #5

Perulangan berikut:

... bisa dituliskan lebih ringkas menjadi seperti ini:

seq = [x + y for x in list_x for y in list_y]

print(seq)

# output ➜ ['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3']

matrix = [

[1, 2, 3, 4],

[5, 6, 7, 8],

[9, 10, 11, 12],

]

transposed = []

for i in range(4):

tr = []

for row in matrix:

tr.append(row[i])

transposed.append(tr)

print(transposed)

# output ➜ [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

matrix = [

[1, 2, 3, 4],

[5, 6, 7, 8],

[9, 10, 11, 12],

]

transposed = []

... dan bisa dijadikan lebih ringkas lagi memakai   list comprehension:

Catatan chapter 📑📑

â—‰ Source code praktik

github.com/novalagung/dasarpemrogramanpython-example/../list-

comprehension

â—‰ Chapter relevan lainnya

• Perulangan ➜ for & range

• List

• Generator & Yield

â—‰ TBA

• Stack vs Queue

matrix = [

[1, 2, 3, 4],

[5, 6, 7, 8],

[9, 10, 11, 12],

]

transposed = [[row[i] for row in matrix] for i in range(4)]

print(transposed)

# output ➜ [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

â—‰ Referensi

• https://docs.python.org/3/tutorial/datastructures.html

• https://docs.python.org/3/library/stdtypes.html#typesseq

A.14. Python Tuple

Tuple yaitu  tipe data sequence yang ideal digunakan untuk menampung nilai

kolektif yang isinya tidak akan berubah (immutable), berbeda dengan list yang lebih

cocok untuk data yang bisa berubah nilai elemen-nya (mutable).

Pada chapter ini kita akan belajar tentang topik ini.

A.15.1. Tuple vs. List

Tipe data tuple sekilas memiliki beberapa kemiripan dan juga perbedaan jika

dibandingkan dengan list.

Tuple List

Literal () , atau tuple() ,atau elemen ditulis tanpa () [] , atau list()

Contoh

Urutan

elemen urut sesuai index

x = ()

x = tuple()

x = (1, True, "h", 2, 1)

x = 1, True, "h", 2, 1

x = []

x = list()

x = [1, True, "h", 2, 1]

Tuple List

Pengaksesan

elemen via index dan perulangan

Mutability elemen tidak bisa diubah elemen bisa diubah

Duplikasi

elemen elemen bisa duplikat

Tipe data

elemen bisa sejenis maupun berbeda satu sama lain

A.14.2. Pengenalan Tuple

Deklarasi tuple memakai   literal () dengan delimiter tanda koma ( , ). Contoh

syntax-nya bisa dilihat pada kode berikut:

• Tuple bisa menampung element yang tipe datanya bisa sejenis bisa tidak, sama

seperti list.

• Fungsi len() digunakan untuk menghitung lebar tuple.

tuple_1 = (2, 3, 4, "hello python", False)

print("data:", tuple_1)

# output ➜ data: (2, 3, 4, "hello python", False)

print("total elem:", len(tuple_1))

# output ➜ total elem: 5

A.14.3. Mengakses element tuple via index

Element tuple bisa diakses memakai   notasi tuple[index] .

DANGER

Pengaksesan elemen memakai   index di-luar kapasitas data akan

menghasilkan error.

Sebagai contoh, data tuple_1 di atas jika diakses index ke-4-nya misalnya

( tuple_1[4] ) hasilnya yaitu  error.

A.14.4. Perulangan tuple

Tuple yaitu  salah satu tipe data yang bisa digunakan secara langsung pada

perulangan memakai   keyword for .

Pada contoh berikut, variabel tuple_2 dimasukan ke blok perulangan. Di setiap

iterasinya, variabel t berisi element tuple.

tuple_1 = (2, 3, 4, 5)

print("elem 0:", tuple_1[0])

# output ➜ elem 0: 2

print("elem 1:", tuple_1[1])

# output ➜ elem 1: 3

tuple_1 = (2, 3, 4, 5)

print("elem 0:", tuple_1[5])

# output ➜ IndexError: tuple index out of range

Perulangan di atas ekuivalen dengan perulangan berikut:

â—‰ Fungsi enumerate()

Fungsi enumerate() digunakan untuk membuat data sequence menjadi data

enumerasi, yang jika dimasukan ke perulangan di setiap iterasinya bisa kita akses

index beserta element-nya.

A.14.5. Mengecek apakah element ada

Kombinasi keyword if dan in bisa digunakan untuk mengidentifikasi apakah

suatu element merupakan bagian dari tuple atau tidak. Contoh penerapannya:

tuple_2 = ('ultra instinc shaggy', 'nightwing', 'noob saibot')

for t in tuple_2:

print(t)

tuple_2 = ('ultra instinc shaggy', 'nightwing', 'noob saibot')

for i in range(0, len(tuple_2)):

print("index:", i, "elem:", tuple_2[i])

tuple_2 = ('ultra instinc shaggy', 'nightwing', 'noob saibot')

for i, v in enumerate(tuple_2):

print("index:", i, "elem:", v)

A.14.6. Nested tuple

Nested tuple dibuat dengan menuliskan data tuple sebagai element tuple. Contoh:

Penulisan data literal nested tuple bisa dalam bentuk horizontal maupun vertikal.

Perbandingannya bisa dilihat pada kode berikut:

tuple_1 = (10, 70, 20)

n = 70

if n in tuple_1:

print(n, "is exists")

else:

print(n, "is NOT exists")

# output ➜ 70 is exists

tuple_nested = ((0, 2), (0, 3), (2, 2), (2, 4))

for row in tuple_nested:

for cell in row:

print(cell, end=" ")

print()

# horizontal

tuple_nested = ((0, 2), (0, 3), (2, 2), (2, 4))

A.14.7. List dan tuple

Tipe data list dan tuple umum dikombinasikan. Keduanya sangat mirip tapi memiliki

perbedaan yang jelas, yaitu nilai tuple tidak bisa dimodifikasi sedangkan list bisa.

# deklarasi data list berisi elemen tuple

data = [

("ultra instinc shaggy", 1, True, ['detective', 'saiyan']),

("nightwing", 3, True, ['teen titans', 'bat family']),

]

# append tuple ke list

data.append(("noob saibot", 6, False, ['brotherhood of shadow']))

# append tuple ke list

data.append(("tifa lockhart", 2, True, ['avalanche']))

# print data

print("name | rank | win | affliation")

print("------------------------------")

for row in data:

for cell in row:

print(cell, end=" | ")

print()

A.14.8. Fungsi tuple()

â—‰ Konversi string ke tuple

Fungsi tuple() bisa digunakan untuk konversi data string ke tuple. Hasilnya

yaitu  nilai tuple dengan element berisi setiap karakter yang ada di string. Contoh:

â—‰ Konversi list ke tuple

Konversi list ke tuple bisa dilakukan dengan mudah memakai   fungsi tuple() .

Contoh penerapannya:

â—‰ Konversi range ke tuple

Range juga bisa dikonversi ke tuple memakai   fungsi tuple() .

alphabets = tuple('abcdefgh')

print(alphabets)

# output ➜ ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')

numbers = tuple([2, 3, 4, 5])

print(numbers)

# output ➜ (2, 3, 4, 5)

r = range(0, 3)

rtuple = tuple(r)

print(rtuple)

# output ➜ (0, 1, 2)

A.14.9. Tuple packing dan unpacking

â—‰ Tuple packing

Packing yaitu  istilah untuk menggabungkan beberapa data menjadi satu data

kolektif. Contoh pengaplikasiannya bisa dilihat pada program berikut, ada 3 variabel

dengan isi berbeda di-pack menjadi satu data tuple.

Bisa dilihat penerapan metode packing cukup mudah. Tulis saja data atau variabel

yang ingin di-pack dalam notasi tuple, kemudian gunakan sebagai nilai pada operasi

assignment.

Pada contoh di atas, variabel row_data menampung nilai tuple hasil packing

variabel first_name , rank , dan win .

O iya, penulisan tuple boleh juga dituliskan tanpa memakai   karakterk ( & ) .

Namun, pastikan untuk hati-hati dalam penerapan penulisan tuple tanpa () ,

karena bisa jadi salah paham. Jangan gunakan metode ini pada saat memakai  

first_name = "aerith gainsborough"

rank = 11

win = False

row_data = (first_name, rank, win)

print(row_data)

# output ➜ ('aerith gainsborough', 11, False)

# dengan ()

row_data = (first_name, rank, win)

# tanpa ()

row_data = first_name, rank, win

tuple sebagai nilai argument pemanggilan fungsi, karena interpreter akan

menganggapnya sebagai banyak argument.

Penjelasan detail mengenai packing ada di chapter Pack Unpack ➜ Tuple, List,

Set, Dict

â—‰ Tuple unpacking

Unpacking yaitu  istilah untuk menyebar isi suatu data kolektif ke beberapa

variabel. Unpacking merupakan kebalikan dari packing.

Contoh penerapan tuple unpacking:

Penjelasan detail mengenai packing ada di chapter Pack Unpack ➜ Tuple, List,

Set, Dict

A.14.10. Tuple kosong ()

Tuple bisa saja tidak berisi apapun, contohnya data () , yang cukup umum

digunakan untuk merepresentasikan data kolektif yang isinya bisa saja kosong.

# fungsi print() dengan satu argument berisi tuple (first_name, rank, win)

print((first_name, rank, win))

# fungsi print() dengan isi 3 arguments: first_name, rank, win

print(first_name, rank, win)

row_data = ('aerith gainsborough', 11, False)

first_name, rank, win = row_data

print(first_name, rank, win)

# output ➜ aerith gainsborough 11 False

Berikut yaitu  contoh penerapannya, dimisalkan ada data kolektif yang didapat dari

database berbentuk array object. Data tersebut perlu disimpan oleh variabel list

yang element-nya yaitu  tuple dengan spesifikasi:

• Tuple element index 0 berisi name .

• Tuple element index 1 berisi rank .

• Tuple element index 2 berisi win .

• Tuple element index 3 berisi affliation , dimana affliation bisa saja kosong.

Sample data bisa dilihat berikut ini:

Bisa dilihat data kucing meong tidak memiliki affliation , karena terisi dengan

nilai tuple () .

Catatan chapter 📑📑

â—‰ Source code praktik

github.com/novalagung/dasarpemrogramanpython-example/../tuple

empty_tuple = ()

print(empty_tuple)

# output ➜ ()

data = [

("ultra instinc shaggy", 1, True, ('detective', 'saiyan')),

("nightwing", 3, True, ('teen titans', 'bat family')),

("kucing meong", 7, False, ()),

]

â—‰ Chapter relevan lainnya

• List

â—‰ TBA

• Slicing tuple

• Zip

â—‰ Referensi

• https://docs.python.org/3/tutorial/datastructures.html

• https://docs.python.org/3/library/stdtypes.html#typesseq

A.15. Python Set

Set yaitu  tipe data yang digunakan untuk menampung nilai kolektif unik, jadi tidak ada duplikasi elemen. Elemen

yang ada pada set disimpan secara tidak urut.

Pada chapter ini, selain mempelajari tentang set kita akan bahas juga satu variasinya yaitu frozenset .

A.15.1. Set vs. Tuple vs. List

Tipe data set sekilas memiliki kemiripan jika dibandingkan dengan tuple dan list, namun sebenarnya lebih banyak

perbedaannya. Silakan lihat tabel berikut untuk lebih jelasnya.

Set Tuple List

Literal

set() , atau

elemen ditulis diapit {

dan }

() , atau tuple() ,

atau elemen ditulis tanpa () [] , atau list()

Contoh

Urutan

elemen tidak urut urut sesuai index

Pengaksesan

elemen hanya via perulangan via index dan perulangan

Mutability elemen bisa diubah elemen tidak bisa diubah elemen bisa diubah

Duplikasi

elemen elemen selalu unik elemen bisa duplikat

Tipe data

elemen bisa sejenis maupun berbeda satu sama lain

x = set()

x = {1, True, "h", 2}

x = ()

x = tuple()

x = (1, True, "h", 2, 1)

x = 1, True, "h", 2, 1

x = []

x = list()

x = [1, True, "h", 2, 1]

A.15.2. Pengenalan Set

Implementasi tipe data set cukup mudah, langsung tulis saja nilai elemen dengan separator , dan diapit

memakai   tanda kurung kurawal { } . Contoh:

• Set bisa menampung element yang tipe datanya bisa sejenis bisa tidak, sama seperti tuple dan list.

• Fungsi len() digunakan untuk menghitung lebar set.

INFO

Untuk deklarasi set kosong (tanpa isi), gunakan fungsi set() , bukan {} karena literal tersebut akan

menciptakan data bertipe lainnya yaitu dictionary.

Hanya gunakan kurung kurawal buka dan tutup untuk deklarasi set yang ada elemennya (tidak kosong).

A.15.3. Mengakses elemen set

Nilai set by default hanya bisa diakses memakai   perulangan:

data_1 = {1, 'abc', False, ('banana', 'spaghetti')}

print("data:", data_1)# output ➜ data: {1, 'abc', False, ('banana', 'spaghetti')}

print("len:", len(data_1))# output ➜ len: 4

data_2 = set()

print("data:", data_2)# output ➜ data: set()

print("len:", len(data_2))# output ➜ len: 0

fellowship = {'aragorn', 'gimli', 'legolas'}

for p in fellowship:print(p)

Dari limitasi ini, set difungsikan untuk menyelesaikan masalah yang cukup spesifik seperti eliminasi elemen

duplikat.

â—‰ Eliminasi elemen duplikat

Tipe data set memang didesain untuk menyimpan data unik, duplikasi elemen tidak mungkin terjadi, bahkan

meskipun dipaksa. Contoh:

Variabel data yang diisi dengan data set dengan banyak elemen duplikasi, sewaktu di-print elemennya yaitu 

unik.

Ok, selanjutnya, pada contoh kedua berikut kita akan coba gunakan set untuk mengeliminasi elemen duplikat pada

suatu list.

Penjelasan untuk kode di atas:

• Variabel data berisi list dengan banyak elemen duplikasi

• Data list kemudian dikonversi ke bentuk set dengan cara membungkus variabelnya memakai   fungsiset() . Operasi ini menghasilkan nilai set berisi elemen unik.

• Selanjutnya data set dikonversi lagi ke bentuk list memakai   fungsi list() .

â—‰ Mengecek apakah element ada

Selain untuk kasus di atas, set juga bisa digunakan untuk pengecekan membership dengan kombinasi keywordif dan in .

Pada contoh berikut, variabel fellowship dicek apakah berisi string gimli atau tidak.

data = {1, 2, 3, 2, 1, 4, 5, 2, 3, 5}print(data)# output ➜ {1, 2, 3, 4, 5}

data = [1, 2, 3, 2, 1, 4, 5, 2, 3, 5]print(data)# output ➜ [1, 2, 3, 2, 1, 4, 5, 2, 3, 5]

data_unique_set = set(data)print(data_unique_set)# output ➜ {1, 2, 3, 4, 5}

data_unique = list(data_unique_set)print(data_unique)# output ➜ [1, 2, 3, 4, 5]

fellowship = {'aragorn', 'gimli', 'legolas'}to_find = 'gimli'

if to_find in fellowship:

A.15.4. Operasi pada set

â—‰ Menambah element

Method add() milik tipe data set digunakan untuk menambahkan element baru. O iya, perlu diingat bahwa tipe

data ini didesain untuk mengabaikan urutan elemen, jadi urutan tersimpannya elemen bisa saja acak.

â—‰ Menghapus element secara acak

Gunakan method pop() untuk menghapus satu elemen secara acak atau random.

â—‰ Menghapus spesifik elemen

Ada dua method tersedia untuk kebutuhan menghapus elemen tertentu dari suatu set, yaitu discard() danremove() . Penggunaan keduanya yaitu  sama, harus disertai dengan 1 argument pemanggilan method, yaitu

elemen yang ingin dihapus.

Pada contoh berikut, elemen boromir dihapus dari set memakai   method discard() , dan elemen gandalf

dihapus memakai   method remove() .

fellowship = set()

fellowship.add('aragorn')print("len:", len(fellowship), "data:", fellowship)# output ➜ len: 1 data: {'aragorn'}

fellowship.add('gimli')print("len:", len(fellowship), "data:", fellowship)# output ➜ len: 2 data: {'gimli', 'aragorn'}

fellowship.add('legolas')print("len:", len(fellowship), "data:", fellowship)# output ➜ len: 3 data: {'gimli', 'legolas', 'aragorn'}

fellowship = {'narya', 'nenya', 'nilya'}

fellowship.pop()print("len:", len(fellowship), "data:", fellowship)# output ➜ len: 2 data: {'narya', 'nilya'}

fellowship.pop()print("len:", len(fellowship), "data:", fellowship)# output ➜ len: 1 data: {'nilya'}

fellowship.pop()print("len:", len(fellowship), "data:", fellowship)# output ➜ len: 0 data: set()

Perbedaan dua method di atas: jika elemen yang ingin dihapus tidak ada, method discard() tidak memunculkan

error, sedangkan method remove() memunculkan error. Contoh:

â—‰ Mengosongkan isi set

Method clear() digunakan untuk mengosongkan isi set.

â—‰ Copy set

Method copy() digunakan untuk meng-copy set, menghasilkan data set baru.

fellowship = {'aragorn', 'gimli', 'legolas', 'gandalf', 'boromir', 'frodo', 'sam', 'merry', 'pippin'}print("fellowship:", fellowship)# output ➜ fellowship: {'aragorn', 'gimli', 'legolas', 'gandalf', 'boromir', 'frodo', 'sam', 'merry','pippin'}

fellowship.discard('boromir')print("fellowship:", fellowship)# output ➜ fellowship: {'legolas', 'pippin', 'sam', 'aragorn', 'gimli', 'frodo', 'gandalf', 'merry'}

fellowship.remove('gandalf')print("fellowship:", fellowship)# output ➜ fellowship: {'legolas', 'pippin', 'sam', 'aragorn', 'gimli', 'frodo', 'merry'}

fellowship = {'aragorn', 'gimli', 'legolas', 'gandalf', 'boromir', 'frodo', 'sam', 'merry', 'pippin'}print("fellowship:", fellowship)

fellowship.discard('batman')print("fellowship:", fellowship)

fellowship.remove('superman')print("fellowship:", fellowship)

fellowship = {'aragorn', 'gimli', 'legolas'}fellowship.clear()

print("len:", len(fellowship), "data:", fellowship)# output ➜ len: 0 data: set()

Pada contoh di atas, statement data1.copy() menghasilkan data baru dengan isi sama seperti isi data1

ditampung oleh variabel bernama data2 .

Operasi copy disini jenisnya yaitu  shallow copy.

Lebih detailnya mengenai shallow copy vs deep copy dibahas pada chapter terpisah.

â—‰ Pengecekan difference antar set

Method difference() digunakan untuk mencari perbedaan elemen antara data (dimana method dipanggil) vs.

data pada argument pemanggilan method tersebut.

Sebagai contoh, pada variabel fellowship berikut akan dicari elemen yang tidak ada di variabel hobbits .

Selain method di atas, adalagi method difference_update() yang kegunaannya yaitu  mengubah nilai data

(dimana method dipanggil) dengan nilai baru yang didapat dari perbedaan elemen antara data tersebut vs. data

pada argument pemanggilan method.

â—‰ Pengecekan intersection antar set

Method intersection() digunakan untuk mencari elemen yang ada di data (dimana method dipanggil) vs. data

pada argument pemanggilan method tersebut.

Pada variabel fellowship berikut akan dicari elemen yang juga ada pada variabel hobbits .

data1 = {'aragorn', 'gimli', 'legolas'}print("len:", len(data1), "data1:", data1)# output ➜ len: 3 data1: {'gimli', 'legolas', 'aragorn'}

data2 = data1.copy()print("len:", len(data2), "data2:", data2)# output ➜ len: 3 data2: {'gimli', 'legolas', 'aragorn'}

fellowship = {'aragorn', 'gimli', 'legolas', 'gandalf', 'boromir', 'frodo', 'sam', 'merry', 'pippin'}hobbits = {'frodo', 'sam', 'merry', 'pippin', 'bilbo'}

diff = fellowship.difference(hobbits)print("diff:", diff)# output ➜ diff: {'boromir', 'legolas', 'aragorn', 'gimli', 'gandalf'}

fellowship.difference_update(hobbits)print("fellowship:", fellowship)# output ➜ fellowship: {'boromir', 'legolas', 'aragorn', 'gimli', 'gandalf'}

fellowship = {'aragorn', 'gimli', 'legolas', 'gandalf', 'boromir', 'frodo', 'sam', 'merry', 'pippin'}hobbits = {'frodo', 'sam', 'merry', 'pippin', 'bilbo'}

Tersedia juga method intersection_update() yang berguna untuk mengubah nilai data (dimana method

dipanggil) dengan nilai baru yang didapat dari kesamaan elemen antara data tersebut vs. data pada argument

pemanggilan method.

â—‰ Pengecekan keanggotaan subset

Di awal chapter ini kita telah sedikit menyinggung pengecekan membership memakai   kombinasi keyword if

dan in . Selain metode tersebut, ada alternatif cara lain yang bisa digunakan untuk mengecek apakah suatu data

(yang pada konteks ini yaitu  set) merupakan bagian dari element set lain, caranya memakai   methodissubset() .

Method issubset() menerima argument berupa data set. Contohnya bisa dilihat pada kode berikut:

• Nilai res_1 yaitu  False karena set hobbits_1 memiliki setidaknya satu elemen yang bukan anggota darifellowship , yaitu bilbo .

• Nilai res_2 yaitu  True karena set hobbits_2 semua elemennya yaitu  anggota dari fellowship .

â—‰ Pengecekan keanggotaan superset

Selain issubset() , ada juga issuperset() yang fungsinya kurang lebih sama namun kondisinya

pengecekannya dibalik.

Agar lebih jelas, silakan lihat kode berikut:

fellowship.intersection_update(hobbits)print("fellowship:", fellowship)# output ➜ fellowship: {'frodo', 'pippin', 'sam', 'merry'}

fellowship = {'aragorn', 'gimli', 'legolas', 'gandalf', 'boromir', 'frodo', 'sam', 'merry', 'pippin'}

hobbits_1 = {'frodo', 'sam', 'merry', 'pippin', 'bilbo'}res_1 = hobbits_1.issubset(fellowship)print("res_1:", res_1)# output ➜ res_1: False

hobbits_2 = {'frodo', 'sam', 'merry', 'pippin'}res_2 = hobbits_2.issubset(fellowship)print("res_2:", res_2)# output ➜ res_2: True

fellowship = {'aragorn', 'gimli', 'legolas', 'gandalf', 'boromir', 'frodo', 'sam', 'merry', 'pippin'}

hobbits_1 = {'frodo', 'sam', 'merry', 'pippin', 'bilbo'}res_1 = fellowship.issuperset(hobbits_1)print("res_1:", res_1)# output ➜ res_1: False

hobbits_2 = {'frodo', 'sam', 'merry', 'pippin'}res_2 = fellowship.issuperset(hobbits_2)

• Nilai res_1 yaitu  False karena set hobbits_1 memiliki setidaknya satu elemen yang bukan anggota darifellowship , yaitu bilbo .

• Nilai res_2 yaitu  True karena set hobbits_2 semua elemennya yaitu  anggota dari fellowship .

â—‰ Pengecekan keanggotaan disjoint

Method ini mengembalikan nilai True jika set pada pemanggilan fungsi berisi elemen yang semuanya bukan

anggota data dimana method dipanggil.

• Nilai res_1 yaitu  False karena beberapa anggota set fellowship yaitu  aragorn dan gimli' .

• Nilai res_2 yaitu  False karena beberapa anggota set fellowship yaitu  pippin . Sedangkan bilbo ia

bukanlah anggota fellowship , tapi karena setidaknya ada 1 elemen yang match, maka method isdisjoint

mengembalikan nilai False .

• Nilai res_3 yaitu  True karena bilbo bukanlah anggota fellowship .

â—‰ Extend/concat/union element

Operasi extend (atau concat atau union) yaitu  operasi penggabungan dua data set. Ada beberapa metode yang

tersedia, diantaranya:

• via method union() :

• via method update() :

fellowship = {'aragorn', 'gimli', 'legolas', 'gandalf', 'boromir', 'frodo', 'sam', 'merry', 'pippin'}

res_1 = fellowship.isdisjoint({'aragorn', 'gimli'})print("res_1:", res_1)

res_2 = fellowship.isdisjoint({'pippin', 'bilbo'})print("res_2:", res_2)

res_3 = fellowship.isdisjoint({'bilbo'})print("res_3:", res_3)

hobbits = {'frodo', 'sam', 'merry', 'pippin'}dunedain = {'aragorn'}elf = {'legolas'}dwarf = {'gimly'}human = {'boromir'}maiar = {'gandalf'}

fellowship_1 = hobbits.union(dunedain).union(dunedain).union(elf).union(dwarf).union(human).union(maiar)print("fellowship_1:", fellowship_1)# output ➜ fellowship_1: {'boromir', 'gimly', 'legolas', 'pippin', 'sam', 'aragorn', 'frodo', 'gandalf','merry'}

hobbits = {'frodo', 'sam', 'merry', 'pippin'}

Bisa dilihat perbedaannya ada di-bagaimana nilai balik method disimpan.

• Pada method union() , pemanggilan method tersebut mengembalikan data setelah penggabungan, dan bisa

di-chain langsung dengan pemanggilan method union() lainnya.

• Pada method update() , data yang digunakan untuk memanggil method tersebut diubah secara langsung

nilainya.

â—‰ Operator bitwise pada set

• Operasi or pada set memakai   operator |

Nilai res berisi elemen set unik kombinasi set a dan set b .

• Operasi and pada set memakai   operator &

Nilai res berisi elemen set yang merupakan anggota set a dan set b . Operasi seperti ini biasa disebut

dengan operasi and.

• Operasi exclusive or pada set memakai   operator ^

Nilai res berisi elemen set yang ada di set a atau set b tetapi tidak ada di-keduanya.

â—‰ Operator - pada set

Digunakan untuk pencarian perbedaan elemen. Contoh penerapan:

a = set('abracadabra') # {'c', 'a', 'r', 'd', 'b'}b = set('alacazam') # {'c', 'z', 'a', 'm', 'l'}

res = a | bprint(res)# output ➜ {'c', 'z', 'a', 'r', 'd', 'b', 'm', 'l'}

a = set('abracadabra') # {'c', 'a', 'r', 'd', 'b'}b = set('alacazam') # {'c', 'z', 'a', 'm', 'l'}

res = a & bprint(res)# output ➜ {'c', 'a'}

a = set('abracadabra') # {'c', 'a', 'r', 'd', 'b'}b = set('alacazam') # {'c', 'z', 'a', 'm', 'l'}

res = a ^ bprint(res)# output ➜ {'z', 'r', 'b', 'd', 'm', 'l'}

a = set('abracadabra') # {'c', 'a', 'r', 'd', 'b'}

Nilai res berisi elemen set unik yang merupakan anggota set a tapi bukan anggota set b

A.15.5. Fungsi set()

â—‰ Konversi string ke set

String dibungkus memakai   method set() menghasilkan data set berisi karakter string yang unik.

â—‰ Konversi list ke set

Data list bisa diubah menjadi set dengan mudah dengan cara membungkusnya memakai   fungsi set() . Isi

dari set yaitu  elemen unik list.

â—‰ Konversi tuple ke set

Data tuple juga bisa diubah menjadi set via fungsi set() . Isi dari set yaitu  elemen unik tuple.

â—‰ Konversi range ke set

Data range (hasil dari pemanggilan fungsi range() ) bisa dikonversi ke bentuk set via fungsi set() .

A.15.6. Set comprehension

Metode comprehension juga bisa diterapkan pada set. Contohnya bisa dilihat pada kode berikut, statement set

comprehension dibuat untuk melakukan pengecekan apakah ada element pada set set('abracadabra') yang

bukan anggota element set('abc') .

data = set('abcda')print('data', data)# output ➜ data {'c', 'b', 'a', 'd'}

data = set(['a', 'b', 'c', 'd', 'a'])print('data', data)# output ➜ data {'c', 'b', 'a', 'd'}

data = set(('a', 'b', 'c', 'd', 'a'))print('data', data)# output ➜ data {'c', 'b', 'a', 'd'}

data = set(range(1, 5))print('data', data)# output ➜ data {1, 2, 3, 4}

A.15.7. frozenset

frozenset yaitu  set yang immutable atau tidak bisa diubah nilai elemennya setelah dideklarasikan.

Cara penggunaannya seperti set, perbedaannya pada deklarasi frozenset, fungsi frozenset() digunakan dan

bukan set() .

Semua operasi set, method milik set bisa digunakan pada frozenset, kecuali beberapa operasi yang sifatnya

mutable atau mengubah elemen. Contohnya seperti method add() , pop() , remove() dan lainnya tidak bisa

digunakan di frozenset.

Catatan chapter 📑📑

â—‰ Source code praktik

github.com/novalagung/dasarpemrogramanpython-example/../set

â—‰ Chapter relevan lainnya

• List

• List Comprehension

• Tuple

â—‰ Referensi

• https://docs.python.org/3/tutorial/datastructures.html

• https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset

res = {x for x in set('abracadabra') if x not in set('abc')}print(res)# output ➜ {'d', 'r'}

a = frozenset('abracadabra')print(a)# output ➜ frozenset({'c', 'a', 'r', 'd', 'b'})

b = frozenset('alacazam')print(b)# output ➜ frozenset({'c', 'z', 'a', 'm', 'l'})

A.16. Python Dictionary

Pada chapter ini kita akan belajar salah satu tipe data mapping di Python, yaitu

Dictionary.

A.16.1. Pengenalan Dictionary

Dictionary atau dict yaitu  tipe data kolektif berbentuk key-value. Contoh

penulisannya:

Literal dictionary ditulis dengan memakai   { } , mirip seperti tipe data

set, hanya saja bedanya pada tipe dictionary isinya berbentuk key-value.

Pembahasan detail mengenai tipe data set ada di chapter Set

Ok, sekarang dari kode di atas, coba tambahkan kode berikut untuk melihat

bagaimana data dictionary dimunculkan di layar console.

profile = {

"id": 2,

"name": "john wick",

"hobbies": ["playing with pencil"],

"is_female": False,

}

print("data:", profile)

print("total keys:", len(profile))

Sedangkan untuk memunculkan nilai item tertentu berdasarkan key-nya, bisa

dilakukan memakai   notasi dict["key"] . Contoh:

DANGER

Pengaksesan item memakai   key yang tidak dikenali akan

menghasilkan error.

Sebagai contoh, variabel profile di atas jika diakses item dengan key

age misalnya ( profile["age"] ) hasilnya yaitu  error.

print("name:", profile["name"])

# output ➜ name: john wick

print("hobbies:", profile["hobbies"])

# output ➜ ['playing with pencil']

profile = {

"id": 2,

"name": "john wick",

"hobbies": ["playing with pencil"],

"is_female": False,

}

print("age:", profile["age"])

# KeyError: 'age'

â—‰ Urutan item dictionary

Mulai dari Python version 3.7, item dictionary tersimpan secara urut. Artinya

urutan item dictionary akan selalu sesuai dengan bagaimana inisialisasi

awalnya.

â—‰ Pretty print dictionary

Ada tips agar data dictionary yang di-print di console muncul dengan tampilan

yang lebih mudah dibaca, dua diantaranya:

• memakai   pprint.pprint() :

Import terlebih dahulu module pprint , lalu gunakan fungsi pprint()

untuk memunculkan data ke console.

• memakai   json.dumps() :

Import terlebih dahulu module json , lalu gunakan fungsi dumps() untuk

memformat dictionary menjadi bentuk string yang mudah dibaca,

kemudian print memakai   print() .

import pprint

pprint.pprint(profile)

Tentukan lebar space indentation sesuai selera (pada contoh di bawah ini

di set nilainya 4 spasi).

Lebih detailnya mengenai JSON dibahas di chapter JSON

A.16.2. Inisialisasi dictionary

Pembuatan data dictionary bisa dilakukan memakai   beberapa cara:

• memakai   { } :

import json

print(json.dumps(profile, indent=4))

profile = {

"id": 2,

"name": "john wick",

"hobbies": ["playing with pencil"],

"is_female": False,

}

• memakai   fungsi dict() dengan isi argument key-value:

• memakai   fungsi dict() dengan isi list tuple:

Sedangkan untuk membuat dictionary tanpa item atau kosong, bisa cukup

memakai   dict() atau {} :

A.16.3. Perulangan item dictionary

Gunakan keyword for dan in untuk mengiterasi data tiap key milik

profile = dict(

set="id",

name="john wick",

hobbies=["playing with pencil"],

is_female=False,

)

profile = dict([

('set', "id"),

('name', "john wick"),

('hobbies', ["playing with pencil"]),

('is_female', False)

])

profile = dict()

print(profile)

# output ➜ {}

profile = {}

print(profile)

# output ➜ {}

dictionary. Dari key tersebut kemudian akses value-nya.

Karakter \t menghasilkan tab. Penggunaan karakter ini bisa membuat

rapi tampilan output.

Program di atas ketika di run outputnya:

A.16.4. Nested dictionary

Dictionary bercabang atau nested dictionary bisa dimanfaatkan untuk

menyimpan data dengan struktur yang kompleks, misalnya dictionary yang

salah satu value item-nya yaitu  list.

Penerapannya tak berbeda seperti inisialisasi dictionary umumnya, langsung

tulis saja dictionary sebagai child dictionary. Contoh:

profile = {

"id": 2,

"name": "mario",

"hobbies": ("playing with luigi", "saving the mushroom kingdom"),

"is_female": False,

}

for key in profile:

print("key:", key, "\t value:", profile[key])

Pada kode di atas, key affliations berisi list object dictionary.

Contoh cara mengakses value nested item dictionary:

profile = {

"id": 2,

"name": "mario",

"hobbies": ("playing with luigi", "saving the mushroom kingdom"),

"is_female": False,

"affliations": [

{

"name": "luigi",

"affliation": "brother"

},

{

"name": "mushroom kingdom",

"affliation": "protector"

},

]

}

print("name:", profile["name"])

print("hobbies:", profile["hobbies"])

print("affliations:")

for item in profile["affliations"]:

print("  âžœ %s (%s)" % (item["name"], item["affliation"]))

# output ↓

#

# name: mario

# hobbies: ('playing with luigi', 'saving the mushroom kingdom')

# affliations:

#   âžœ luigi (brother)

#   âžœ mushroom kingdom (protector)

A.16.5. Dictionary mutability

Item dictionary yaitu  mutable, perubahan value item bisa dilakukan langsung

memakai   operator assignment = .

value = profile["affliations"][0]["name"],

profile["affliations"][0]["affliation"]

print("  âžœ %s (%s)" % (value))

# output ➜ luigi (brother)

value = profile["affliations"][1]["name"],

profile["affliations"][1]["affliation"]

print("  âžœ %s (%s)" % (value))

# output ➜ mushroom kingdom (protector)

profile = {

"id": 2,

"name": "mario",

"hobbies": ("playing with luigi", "saving the mushroom kingdom"),

"is_female": False,

"affliations": [

{

"name": "luigi",

"affliation": "brother"

},

{

"name": "mushroom kingdom",

"affliation": "protector"

},

]

}

print(profile["affliations"][0]["name"])

# output ➜ luigi

A.16.6. Operasi data dictionary

â—‰ Pengaksesan item

Pengaksesan item dilakukan lewat notasi dict["key"] , atau bisa dengan

memakai   method get() .

â—‰ Mengubah isi dictionary

Cara mengubah value item dictionary yaitu  dengan mengaksesnya terlebih

dahulu, kemudian diikuti operasi assignment.

profile = {

"id": 2,

"name": "mario",

"hobbies": ("playing with luigi", "saving the mushroom kingdom"),

"is_female": False,

}

print("id:", profile["id"])

# output ➜ id: 2

print("name:", profile.get("name"))

# output ➜ name: mario

profile = {

"id": 2,

"name": "mario",

"hobbies": ("playing with luigi", "saving the mushroom kingdom"),

"is_female": False,

}

print("name:", profile["name"])

â—‰ Menambah item dictionary

Caranya yaitu  mirip seperti operasi pengubahan value item, perbedaannya

ada pada key-nya. Key yang ditulis yaitu  key item baru yang ingin

ditambahkan.

Selain cara tersebut, bisa juga dengan memakai   method update() . Tulis

key dan value baru yang ingin ditambahka