Belajar Python di Progate



Memperbarui dan Menambah Element di Dictionary

Memperbarui Element-Element Dictionary

Seperti pada list, Anda dapat menambah atau memperbarui element pada dictionary.

Memperbarui nilai dari kunci yang sudah ada dapat dilakukan dengan menulis nama_dictionary[kunci] = nilai.

Menambah Element pada Dictionary

Menambah element dapat dilakukan dengan menggunakan sintaksis yang sama dengan memperbarui element.

Saat suatu kunci tidak ada dalam dictionary, element baru dengan kunci akan ditambahkan.

Loop for (2)

Mendapatkan Semua Element Pada Dictionary

Seperti list, Anda dapat menggunakan loop for untuk melakukan pengulangan pada dictionary dengan menulis for nama_variable in nama_dictionary:.

Kunci dari tiap element ditentukan ke variable sementara.

Dengan demikian, Anda bisa mendapatkan nilai yang sesuai dengan variable, seperti bisa dilihat pada gambar di bawah.

Loop while

Loop while

Anda juga dapat menggunakan loop while untuk mengulang code.

Dengan loop while, code akan diulangi sampai kondisi tertentu, seperti jika x <= 100 mengevaluasi False.

Mari belajar bagaimana cara menulis loop while pada slide berikutnya!

Cara Menulis Loop While

Sintaksis untuk loop while adalah sebagai berikut:

while <conditional expression>:

Code pada loop while akan terus berulang selama kondisi True.


Alur Loop While

Mari belajar alur loop while dengan gambar di bawah.
Pertama-tama, variable didefinisikan sebelum loop while.
Pada setiap iterasi loop while, kondisi diperiksa dan variable diperbarui.
Siklus terus berlanjut sampai kondisi mengevaluasi False.

Loop Infinite (1)

Jika Anda lupa untuk memperbarui nilai variable yang digunakan pada kondisi di akhir loop while, loop infinite (loop tak terbatas) dapat terjadi karena kondisi selalu mengevaluasi True.

Loop Infinite memberikan beban yang besar pada komputer, jadi pastikan kondisi akan mengevaluasi False pada titik tertentu.

Loop Infinite (2)

Kemungkinan lain yang dapat menyebabkan loop tak terbatas adalah lupa mengindentasi code untuk memperbarui variable.

Code tidak akan termasuk dalam loop while dan kondisi akan selalu mengevaluasi True. Loop tidak akan pernah berhenti.

Statement break

break

Anda dapat menggunakan statement break untuk keluar dari loop. Statement break biasanya digabung dengan statement if, seperti pada gambar di bawah. Ini dapat digunakan seperti pada loop while.


Statement continue

continue

Tidak seperti statement break yang akan mengakhiri loop, statement continue melewatkan loop untuk iterasi tertentu. Statement continue dapat digunakan dengan cara yang sama pada loop for dan loop while.


Menyiapkan Barang-Barang

Aplikasi Belanja

Dengan menggunakan apa yang sudah kita pelajari, mari kita memperbarui aplikasi belanja yang sudah kita buat di Python 1.

Seperti pada gambar di bawah, kita akan mencetak hasil menurut jumlah buah yang dimasukkan pada console.

Menyiapkan Buah

Mari kita mulai dengan menyiapkan dictionary bernama items dimana kunci-nya adalah nama-nama buah dan nilainya adalah harga-harga buah tersebut. Setelah itu, ayo kita cetak harga tiap buahnya dengan menggunakan loop.

# Buat dictionary dengan kunci dan nilai, dan tetapkan ke variable items 

items = {'apel': 2, 'pisang': 4, 'jeruk': 6}

# Buat loop for yang mengambil kunci dari items

for item_name in items:

    # Cetak '--------------------------------------------------'

    print('--------------------------------------------------')

    # Cetak 'Harga setiap ___ ___ dolar'

    print('Harga setiap '+item_name+' '+str(items[item_name])+' dolar')

Membeli Sebuah Barang

Membeli Buah

Sekarang, mari kita buat agar pengguna dapat mengisi jumah buah yang mereka inginkan. Kita akan menggunakan input() yang kita pelajari di Python 1 untuk mendapatkan input.

Selanjutnya, kita akan mencetak detail pembelian.

Control Flow

Control Flow

Anda sekarang dapat membeli buah.

Selanjutnya, mari membuat control flow untuk membandingkan uang yang dimiliki pengguna dengan total harga!

Uang yang Tersisa

Menghitung Uang yang Tersisa

Untuk menyudahi, kita akan mencetak sisa uang di dalam dompet Anda setelah membeli beberapa buah!

Selain itu, mari memodifikasi program untuk keluar dari loop jika dompet Anda kosong selama berbelanja.

money = 20

items = {'apel': 2, 'pisang': 4, 'jeruk': 6}

for item_name in items:

    print('--------------------------------------------------')

    print('Anda memiliki ' + str(money) + ' dolar di dompet Anda')

    print('Harga setiap ' + item_name + ' ' + str(items[item_name]) + ' dolar')

    

    input_count = input('Mau berapa ' + item_name + '?:')

    print('Anda akan membeli ' + input_count + ' ' + item_name)

    

    count = int(input_count)

    total_price = items[item_name] * count

    print('Harga total adalah ' + str(total_price) + ' dolar')

    

    if money >= total_price:

        print('Anda telah membeli ' + input_count + ' ' + item_name)

        money -= total_price

        # Ketika money sama dengan 0, cetak 'Dompet Anda kosong' dan hentikan loop

        if money==0:

            print('Dompet Anda kosong')

            break

        

        

    else:

        print('Uang Anda tidak mencukupi')

        print('Anda tidak dapat membeli ' + item_name + ' sebanyak itu')

# Menggunakan variable money dan tipe conversion, cetak 'Uang Anda tinggal ___ dolar'

print('Uang Anda tinggal '+str(money)+' dolar')

Python III

Pada pelajaran ini, kita akan belajar bagaimana cara menggunakan function dan module.
Untuk membuat pelajaran ini menjadi lebih menyenangkan,
mari kita mempelajarinya sambil membuat permainan Batu Kertas Gunting.

Function

Function

Pertama-tama, mari kita lihat bagaimana function bekerja dalam Python. Function adalah bagian dari code yang menjalankan tugas tertentu. print adalah salah satu contoh function, yang memudahkan Anda untuk mencetak teks tanpa perlu untuk menulis banyak code.

Lebih Lanjut Tentang Function

Seperti print, ada banyak function yang sudah tersedia di Python yang dapat membuat coding lebih mudah. Jika tertarik, Anda juga dapat membuat function Anda sendiri.



Mendefinisikan Function

Mari belajar bagaimana cara mendefinisikan function yang sederhana.
Sintaksis untuk mendefinisikan function adalah sebagai berikut:
def function_name():
Jangan lupa untuk mengindentasi code didalam function.

Memanggil Function

Function tidak akan dijalankan hanya dengan mendefinisikannya, Anda perlu memanggil function untuk menjalankan code didalamnya. Untuk memanggil sebuah function, Anda cukup menulis function_name(). Perlu diingat bahwa function hanya dapat dipanggil setelah Anda mendefinisikannya.

Argument dan Parameter

Apa Itu Argument?

Anda dapat memberikan nilai ke sebuah function ketika Anda memanggilnya. Nilai ini disebut argument dan dapat digunakan berulang kali di dalam sebuah function. Dengan menggunakan argument, Anda dapat membuat sebuah function untuk me-return nilai yang berbeda berdasarkan argument yang Anda berikan.

Function dengan Argument

Untuk memberikan argument ke sebuah function, function harus mempunyai variable untuk menerimanya, variable ini di sebut parameter. Pada contoh di bawah, function greet memiliki parameter name untuk menerima sebuah argument.



Memberikan Argument ke Sebuah Function

Kita bisa memberikan argument dengan memanggil sebuah function dengan: function_name(argument). Saat function dipanggil, argument yang diberikan akan ditentukan ke parameter untuk digunakan di dalam function.

Scope

Variable mempunyai scope, sesuatu yang merujuk ke rentang tertentu dimana variable dapat diakses. Scope dari parameter dan variable yang di definisikan didalam sebuah function akan terbatas pada function tersebut. Maka dari itu, mereka tidak dapat digunakan diluar function itu.

Beberapa Parameter

Function dengan Banyak Parameter

Anda dapat menambahkan banyak parameter ke sebuah function dengan memisahkan parameter tersebut dengan tanda koma ,.
Pada contoh dibawah, name adalah parameter pertama, dan message adalah parameter kedua.

Memberikan Beberapa Argument ke Sebuah Function

Contoh dibawah menunjukkan bagaimana cara memberikan beberapa argument ke sebuah function. Saat memberikan argument, Anda harus menulisnya sesuai dengan urutan penulisan parameter.


Nilai Default Parameter

Nilai Default Parameter

Anda dapat mengatur nilai default parameter.
Nilai default akan digunakan ketika tidak ada argument yang disediakan untuk parameter.

Batu Kertas Gunting

Sejauh ini, kita sudah belajar dasar-dasar function.
Sekarang, mari menggunakannya untuk membuat permainan Batu Kertas Gunting menjadi lebih baik!

Menerima Nama Pengguna

Mari kita beri nama pengguna, lalu mencetaknya.

Memilih Tangan

Memilih Tangan

Mari biarkan pengguna memilih tangan dengan nomor 0, 1, atau 2.
Kita akan menyiapkan list yang berisi 'Batu', 'Kertas', dan 'Gunting', dan saat pengguna memilih nomor, kita akan mencetak element yang sesuai dengan nomor index.

def print_hand(hand, name='Tamu'):
    # Tetapkan list hands ke variable hands 
    hands=['Batu', 'Kertas', 'Gunting']
    
    # Memperbarui dengan menggunakan element dari variable hands 
    print(name + ' memilih: ' + hands[hand])

print('Memulai Permainan Batu Kertas Gunting!')
player_name = input('Masukkan nama Anda: ')
# Cetak 'Pilih tangan: (0: Batu, 1: Kertas, 2: Gunting)'
print('Pilih tangan: (0: Batu, 1: Kertas, 2: Gunting')

# Dapatkan input, ubah, dan tetapkan ke variable player_hand 
player_hand=int(input('Masukkan nomor (0-2): '))

# Ubah argument pertama ke player_hand
print_hand(player_hand, player_name)

Nilai Return

Memvalidasi Nilai Input

Sejauh ini, program kita menghasilkan erorr jika pengguna memasukkan nomor selain 0, 1, atau 2 sehingga kita perlu memvalidasinya.
Untuk melakukannya, kita akan belajar topik selanjutnya, nilai return.

Apa itu Nilai Return?

Saat kita ingin menggunakan hasil dari sebuah function, kita dapat menggunakan return. Pada contoh di bawah, function add menjadikan 3 dan 7 sebagai argument, dan mengembalikan 10 ke pemanggilnya.

Function dengan Nilai Return

Untuk mengirim nilai ke asal sebuah function yang dipanggil, kita menggunakan statement return. Dengan menulis return nilai, nilai dapat dikembalikan untuk digunakan di luar function.

Menerima Nilai Return

Saat Anda memanggil sebuah function yang mempunyai nilai return, pemanggil akan digantikan dengan nilai.
Pada contoh di bawah, add(1,3) akan digantikan dengan 4, dan disimpan ke variable sum.


# Definisikan function validate 
def validate(hand):
    # Tambahkan control flow berdasarkan nilai hand
    if hand<0 or hand>2:
        return False
    else:
        return True
    
def print_hand(hand, name='Tamu'):
    hands = ['Batu', 'Kertas', 'Gunting']
    print(name + ' memilih: ' + hands[hand])

print('Memulai permainan Batu Kertas Gunting!')
player_name = input('Masukkan nama Anda: ')

print('Pilih tangan: (0: Batu, 1: Kertas, 2: Gunting)')
player_hand = int(input('masukkan nomor (0-2): '))

# Tambahkan control flow berdasarkan nilai return dari function validate 
if validate(player_hand):
    print_hand(player_hand, player_name)
else:
    print('Mohon masukkan nomor yang benar')

Return

Bagaiman Return Bekerja

Return tidak hanya mengirim balik nilai return ke pemanggil, namun juga menghentikan function. Ini berarti, apapun yang tertulis setelah return pada function tidak akan di jalankan.

Beberapa Return

Dengan menambahkan control flow, Anda dapat menggunakan return berkali-kali. Pada contoh di bawah, jika nilai parameter name sama dengan 'Tamu', function akan berakhir setelah mengembalikan 'Siapa nama Anda?'. Code setelahnya tidak akan di jalankan.

Menambah Komputer

Permainan Batu Kertas Gunting

Dari sini, kita akan menyelesaikan permainan Batu Kertas Gunting.
Kita akan menambahkan function sehingga pengguna dapat bermain melawan komputer. Selain itu, kita juga akan belajar tentang module.

Memilih Tangan

Mari memulai dengan mencetak tangan yang dipilih oleh komputer.

Menilai Pemenang

Menilai Pemenang

Mari membuat function untuk menilai siapa yang memenangkan permainan.

def validate(hand):
    if hand < 0 or hand > 2:
        return False
    return True

def print_hand(hand, name='Tamu'):
    hands = ['Batu', 'Kertas', 'Gunting']
    print(name + ' memilih: ' + hands[hand])

# Definisikan function judge 
def judge(player, computer):
    # Tambahkan control flow berdasarkan perbandingan antara player dan computer
    if player==computer:
        return 'Seri'
    elif player==0 and computer==1:
        return 'Kalah'
    elif player==1 and computer==2:
        return 'Kalah'
    elif player==2 and computer==0:
        return 'Kalah'
    else:
        return 'Menang'

print('Memulai permainan Batu Kertas Gunting!')
player_name = input('Masukkan nama Anda: ')

print('Pilih tangan: (0: Batu, 1: Kertas, 2: Gunting)')
player_hand = int(input('Masukkan nomor (0-2): '))

if validate(player_hand):
    computer_hand = 1
    
    print_hand(player_hand, player_name)
    print_hand(computer_hand, 'Komputer')
    
    # Tetapkan nilai return dari judge ke variable result 
    result = judge(player_hand, computer_hand)
    # Cetak variable result 
    print('Hasil: '+result)
else:
    print('Mohon masukkan nomor yang benar')


Menggunakan Module

Membagi File

Code pada file script.py kita sudah menjadi sangat panjang.
Semakin panjang code Anda, akan semakin sulit untuk dibaca dan dimengerti, ini akan berpotensi menimbulkan bug yang tidak diinginkan. Untuk mencegah ini, mari belajar untuk membagi code ke beberapa file terpisah.

Module

Kita dapat memindahkan sebagian code ke file terpisah, lalu, mengimportnya sebagai module. Module adalah file yang dapat diimport ke file lain. Dengan mengimport module, Anda dapat menggunakan function di dalam modul tersebut. Kita akan memindahkan beberapa function di dalam script.py ke utils.py.

Import

Anda dapat mengimport sebuah module menggunakan sintaksis berikut: import nama_module.
Ekstensi dari file, .py, dapat di abaikan ketika Anda mengimportnya.


Menggunakan Module

Anda dapat memanggil function dari sebuah module dengan meletakkan nama module sebelum nama function, seperti module_name.function_name().

Library Standar Python

Menyelesaikan Permainan Batu Kertas Gunting

Akhirnya, mari membuat permainan menjadi lebih menyenangkan dengan membuat acak tangan komputer.

Library Standar Python

Sebelumnya, kita belajar cara membuat module utils yang dibuat khusus. Python juga mempunyai daftar module bawaan yang dapat Anda gunakan, di dalam Library Standar Python.
Mari kita coba menggunakan salah satu dari module yang sangat berguna ini.


Module Acak

Kita akan mengacak tangan yang dipilih komputer menggunakan function randint dari module random.
Dengan menulis random.randint(x,y), Anda mendapat integer acak di antara x dan y inklusif.


Class

Pada pelajaran ini, kita akan belajar bersama Ninja Ken dan Guru Domba mengenai konsep penting di Python yaitu class!

Gambaran

Pemahaman Produk

Pertama, mari kita lihat bagaimana aplikasi pemesanan makanan ini akan bekerja. Saat berjalan, program akan menerima nomor item menu dan kuantitasnya sesuai dengan yang dimasukkan pengguna.

Definisi Class

Membuat Object

Untuk membuat object untuk item-item pada menu, terlebih dahulu kita harus menyiapkan blueprint.
Blueprint diketahui sebagai class, dan object-nya disebut instance. Pastikan Anda mengingat istilah ini ya!

Langkah-langkah untuk Membuat Instance

Proses untuk membuat instance dapat dilihat di bawah.
Kita akan memulai dari Step 1: Menyiapkan Class dan melanjutkan dari sana.

Mendefinisikan Class

Mari terlebih dahulu menyiapkan class (bluprint).
Class dapat didefinisikan menggunakan class ClassName:.
Nama class, biasanya selalu diawali dengan huruf kapital seperti pada class MenuItem.

Konten Class

Konten class (atau instruksi blueprint) ditulis pada baris selanjutnya di bawah class MenuItem: dan harus diindentasi.
Karena saat ini kita tidak perlu untuk menulis apapun, maka dari itu kita ketik pass (dimana kita gunakan saat tidak ada code untuk dijalankan) seperti pada gambar di kanan.

Instansiasi Class

Instansiasi

Seperti bisa dilihat di bawah, jika kita memanggil ClassName() kita dapat membuat instance dari class (blueprint). Selain itu, dengan menggunakan variable_name=ClassName(), kita dapat menentukan instance baru pada sebuah variable.

Variable Instance

Data Instance

Kita dapat menambah data yang diinginkan pada tiap instance (item menu). Pada contoh di bawah, instance memiliki nama "Roti Lapis" dan harga "$5".

Variable Instance

Seperti bisa dilihat di bawah, kita dapat menggunakan menu_item1.name = "Roti Lapis" untuk mengatur nama menu_item1 ke "Roti Lapis". Disini, name disebut sebagai variable instance.

Variable yang Menggunakan Instance

Anda dapat mengakses dan menggunakan nilai dari variable instance dengan memanggil instance.instance_variable_name.

class MenuItem:
    pass


menu_item1 = MenuItem()

menu_item1.name = 'Roti Lapis'
print(menu_item1.name)

# Tentukan price menu_item1 ke 5
menu_item1.price=5

# Cetak price dari menu_item1
print(menu_item1.price)


Class dan Method

Menambahkan Method ke Class

Kita dapat mendefinisikan function di dalam class. Function yang didefinisikan di dalam class disebut method.
Mendefinisikan method sama seperti mendefinisikan function normal lainnya, namun secara eksplisit, parameter pertama harus dinamai self!

Memanggil Method

Anda dapat memanggil method yang Anda definisikan di dalam class menggunakan instance dari class itu sendiri. Sintaksis untuk ini adalah instance.method_name().

class MenuItem:
    # Definiskan method info 
    def info(self):
        print('Tampilkan nama dan harga dari menu item')


menu_item1 = MenuItem()
menu_item1.name = 'Roti Lapis'
menu_item1.price = 5

# Panggil method info dari menu_item1
menu_item1.info()

menu_item2 = MenuItem()
menu_item2.name = 'Kue Coklat'
menu_item2.price = 4

# Panggil method info dari menu_item2
menu_item2.info()

Method Instance: self

Bagaimana Cara Menggunakan "self"?

Parameter pertama, self, menunjuk ke instance yang dipanggil.
Karena ini, Anda dapat menggunakan self untuk mengakses instance dan kontennya. Pada contoh di bawah, self.name digunakan untuk mendapatkan nilai variable instance name dari menu_item1.


Meninjau Kembali Konversi Tipe

Sekarang mari gunakan nilai dari name dan price untuk mencetak "Roti Lapis: $5". Nilai price adalah integer, maka dari itu untuk menggabungkannya dengan string, kita harus mengubahnya terlebih dahulu menjadi string. Mari kita tinjau kembali bagaimana cara mengubah integer menjadi string pada gambar di bawah.

Method Instance: Parameter

Meninjau Kembali Instance & Class

Mari kita tinjau kembali apa yang sudah kita pelajari sejauh ini mengenai class dan instance. Class seperti blueprint dan instance adalah object yang kita buat menggunakan blueprint tersebut.
Property instance disebut variable instance dan function disebut method instance.

Method untuk Total Harga

Dengan menggunakan apa yang sudah kita pelajari sejauh ini, mari kita buat method untuk menghitung total harga. Jangan lupa bahwa, saat meneruskan parameter ke method instance, self akan diteruskan secara otomatis. Parameter apapun yang Anda masukkan akan menjadi parameter kedua dan seterusnya.


class MenuItem:
    def info(self):
        return self.name + ': $' + str(self.price)

    # Definiskan method get_total_price
    def get_total_price(self, count):
        total_price=self.price*count
        return total_price


menu_item1 = MenuItem()
menu_item1.name = 'Roti Lapis'
menu_item1.price = 5

print(menu_item1.info())

# Panggil method get_total_price 
result=menu_item1.get_total_price(4)

# Cetak 'Total harga adalah $____'
print('Total harga adalah $'+str(result))


Method __init__ (1)

Method __init__

Mari belajar tentang method __init__ (juga dikenal sebagai class constructor di Python), yang dijalankan setelah instance dibuat. Saat ClassName() dipanggil, dan instance dibuat, method __init__ akan dipanggil segera sesudahnya.
Kita akan belajar bagaimana menggunakannya pada slide selanjutnya.

Menggunakan __init__

Method __init__ dapat didefinisikan seperti method instance lainnya.
Pada contoh di bawah, menjalankan menu_item1 = MenuItem() akan membuat instance MenuItem dan secara otomatis memanggil method __init__ dan menjalankan code di dalamnya.

Method __init__ (2)

Variable Instance pada __init__

Mari mengatur variable instance di dalam method __init__.
Di dalam method instance, karena kita dapat mengakses variable instance menggunakan self.variable_name, kita dapat mengatur variable instance dengan self.variable_name = nilai.

Method __init__ (3)

Argument Method __init__

Method __init__ juga dapat menerima argument seperti method instance pada umumnya. Untuk meneruskan argument ke __init__, kita dapat meletakkan argument tersebut didalam ClassName() saat kita memanggilnya.

class MenuItem:
    # Tambahkan parameter name dan price
    def __init__(self, name, price):
        # Gantikan 'Roti Lapis' ke parameter name
        self.name = name
        
        # Gantikan 5 ke parameter price
        self.price = price

    def info(self):
        return self.name + ': $' + str(self.price)

    def get_total_price(self, count):
        total_price = self.price * count
        return total_price


# Tambahkan 'Roti Lapis' dan 5 sebagai argument
menu_item1 = MenuItem('Roti Lapis', 5)

print(menu_item1.info())

result = menu_item1.get_total_price(4)
print('Total harga adalah $' + str(result))

Pemisahan File

Meninjau Kembali Import

Di Python Study III kita belajar cara memisahkan code Python menjadi file-file berbeda dan mengimport file luar sebagai module. Ingat, untuk mengimport module dari module_name.py, kita dapat menggunakan import module_name.

Mengimport Class secara Langsung

Ada cara lebih mudah untuk menggunakan import. Seperti ditunjukkan pada gambar di sebelah kiri, Anda dapat langsung mengimport class dari module dengan menulis from module_name import ClassName. Dengan menggunakan ini, Anda dapat menggunakan class MenuItem seperti sebelumnya bahkan di dalam script.py.



Menampilkan Menu (1)

List Instance

Kita juga dapat menampilkan tiap instance yang kita sudah buat dari class MenuItem. Seperti ditunjukkan di bawah, kita dapat menambah setiap instance ke sebuah list yang disebut menu_items dan menggunakan loop for untuk mendapatkan informasi tiap instancenya.


Menampilkan Menu (2)

Menomori Item

Pada produk akhir, kita menomori tiap menu item dimulai dari 0.
Untuk menambah nomor, kita dapat membuat variable (contoh: 'index') dan menambahkannya dengan 1 menggunakan loop for.

from menu_item import MenuItem

menu_item1 = MenuItem('Roti Lapis', 5)
menu_item2 = MenuItem('Kue Coklat', 4)
menu_item3 = MenuItem('Kopi', 3)
menu_item4 = MenuItem('Jus Jeruk', 2)

menu_items = [menu_item1, menu_item2, menu_item3, menu_item4]

# Definisikan variable index dan tetapkan 0 kepadanya
index=0

for menu_item in menu_items:
    # Cetak dengan format '0. Roti Lapis: $5' untuk setiap index
    print(str(index)+'. '+menu_item.info())
    
    # Tambahkan 1 ke variable index
    index+=1

Mengelola Input

Mendapatkan Input sebagai Integer

Mari menggunakan input, seperti yang kita pelajari di Python Study I, untuk mengambil nomor item menu yang diketik oleh pengguna. Karena input yang diterima akan bertipe string, kita harus menggunakan int() untuk mengubahnya menjadi integer.

Menghitung Jumlah Total

Menambah 10% Diskon

Pada method get_total_price yang kita definisikan pada class MenuItem, mari berikan diskon 10% (90% dari total harga) jika count lebih besar dari atau sama dengan 3. Desimal juga dapat digunakan di aritmetika dengan tipe-tipe numerik. Seperti yang ditunjukkan di bawah, mari mengalikan nilai dari variable total_price dengan 0.9.

Membulatkan

Saat mengalikan integer dan desimal, hasilnya bisa dilihat pada gambar di sebelah kiri. Kita hanya menginginkan aplikasi kita untuk memunculkan angka bulat non-desimal. Kita dapat menggunakan round(desimal) agar tidak perlu khawatir akan kembalian!

from menu_item import MenuItem

menu_item1 = MenuItem('Roti Lapis', 5)
menu_item2 = MenuItem('Kue Coklat', 4)
menu_item3 = MenuItem('Kopi', 3)
menu_item4 = MenuItem('Jus Jeruk', 2)

menu_items = [menu_item1, menu_item2, menu_item3, menu_item4]

index = 0

for menu_item in menu_items:
    print(str(index) + '. ' + menu_item.info())
    index += 1

print('--------------------')

order = int(input('Masukkan nomor menu: '))
selected_menu = menu_items[order]
print('Item yang di pilih: ' + selected_menu.name)

# Terima input dari console, dan Berikan input ke variable count
count=int(input('Jumlah pesanan (diskon 10% untuk 3 atau lebih): '))

# Panggil method get_total_price 
result=selected_menu.get_total_price(count)

# Cetak 'Total harga adalah $____'
print('Total harga adalah $'+str(result))


Warisan Class

Pada pelajaran ini, kita akan mempelajari lebih lanjut fungsi class yang kita pelajari pada Python Study IV.
Mari belajar bagaimana cara menggunakan class dengan lebih baik.

Gambaran Umum

Fitur-Fitur Objektif

Pertama-tama, mari kita lihat apa yang akan kita buat pada pelajaran ini. Di bawah adalah contoh hasil akhir dari program yang akan Anda buat pada pelajaran ini. Perhatikan, selain bisa memesan makanan dan minuman secara terpisah, Anda juga bisa melihat kalori dari makanan dan volume minuman.

Apa Itu warisan?

Menggunakan Class yang Sudah Ada

Selanjutnya, mari membuat class Food dan Drink.
Walaupun kita dapat membuat class baru dari awal, kita juga dapat menggunakan class Food dan Drink pada class MenuItem.
Dengan melakukan ini, code menjadi lebih efisien karena kita menghindari pengulangan penulisan code yang sama.

Apa Itu Warisan?

Membuat class baru berdasarkan class lain disebut warisan.
Disini, class baru disebut class anak dan class yang mendasarinya disebut class induk. Dengan menulis class NamaClassAnak(NamaClassInduk): kita dapat mewariskan blueprint ClassInduk ke ClassAnak yang baru didefinisikan.

# Import class MenuItem menggunakan 'from' 'import'
from menu_item import MenuItem

# Wariskan class MenuItem dan definisikan class Drink 
class Drink(MenuItem):
    pass

Bagaimana warisan Bekerja?

Instance Class Anak

Class Anak diwarisi method instance milik class induk.
Seperti ditunjukkan di bawah, instance class Food dapat menggunakan method __init__ dan info yang didefinisikan di dalam class MenuItem.

Menambah Method Instance

Method Instance Class Anak

Sekarang, mari tambahkan method calorie_info di dalam class Food. Perlu diingat bahwa class anak dapat menggunakan method yang didefinisikan di dalam class induk dan method yang didefinisikan di dalam dirinya sendiri. Akan tetapi, class induk tidak bisa menggunakan method yang didefinisikan di dalam class anak.

Merevisi Method Info (1)

Menimpa (Override)

Saat Anda mendefinisikan sebuah method di dalam class anak dengan nama yang sama dengan class induk, Anda dapat menimpa method sebelumnya. Saat Anda menimpa, instance dari class anak akan memanggil method yang didefinisikan di dalam class anak daripada method dari class induk.

Bagaimana "Menimpa" Bekerja

Mari kita perhatikan lebih lanjut tentang "menimpa".
Seperti gambar di bawah, instance class anak akan memanggil method yang didefinisikan di dalam class anak. Selanjutnya, pada kasus dimana ada method dengan nama yang sama di class anak dan class induk, method induk akan di-timpa.


Menimpa Method __init__

Menimpa Method __init__

Disini, kita akan menimpa method __init__ milik class MenuItem di dalam class Food. Seperti gambar di bawah, Anda dapat mengubah parameter saat menimpanya.

super()

super()

Dengan menggunakan super() di dalam method yang telah Anda timpa akan memperbolehkan Anda untuk memanggil method dari class induk-nya. Selain itu, seperti bisa dilihat di bawah, dengan menulis super().methodName(), Anda dapat menggunakan method instance yang didefinisikan di dalam class induk.


from menu_item import MenuItem

class Food(MenuItem):
    def __init__(self, name, price, calorie_count):
        # Menggunakan super() panggil __init__() dari class induk
        super().__init__(name, price)
        
        # Hapus 2 baris di bawah
        
        self.calorie_count = calorie_count
    
    def info(self):
        return self.name + ': $' + str(self.price) + ' (' + str(self.calorie_count) + 'kkal)'
    
    def calorie_info(self):
        print('kkal: ' + str(self.calorie_count))


Aplikasi Praktis

Menampilkan Total Harga

Terakhir, mari gunakan nilai-nilai dari input console untuk menampilkan total harga. Anda dapat menggunakan method get_total_price yang kita definisikan di dalam class MenuItem (dari Python Study IV) di dalam instance class Food dan Drink, yang mana adalah class anak dari MenuItem.

from food import Food
from drink import Drink

food1 = Food('Roti Lapis', 5, 330)
food2 = Food('Kue Coklat', 4, 450)
food3 = Food('Kue Sus', 2, 180)

foods = [food1, food2, food3]

drink1 = Drink('Kopi', 3, 180)
drink2 = Drink('Jus Jeruk', 2, 350)
drink3 = Drink('Espresso', 3, 30)

drinks = [drink1, drink2, drink3]

print('Makanan')
index = 0
for food in foods:
    print(str(index) + '. ' + food.info())
    index += 1

print('Minuman')
index = 0
for drink in drinks:
    print(str(index) + '. ' + drink.info())
    index += 1

print('--------------------')

food_order = int(input('Masukkan nomor makanan: '))
selected_food = foods[food_order]

drink_order = int(input('Masukkan nomor minuman: '))
selected_drink = drinks[drink_order]

# Ambil input dari console dan tetapkan ke variable count
count = int(input('Mau berapa paket makanan? (Diskon 10% untuk 3 atau lebih): '))

# Panggil method get_total_price dari selected_food dan selected_drink
result = selected_food.get_total_price(count)+selected_drink.get_total_price(count)

# Cetak 'Total harga adalah $____'
print('Total harga adalah $'+str(result))


Contoh sertifikat hasil belajar python di PROGATE: https://progate.com/course_certificate/622b6d0fqulk0h

Komentar

Postingan populer dari blog ini

SIPD Chrome Extension untuk Migrasi Data dari SIPD ke SIMDA PINK Th. Anggaran 2022

FMIS Chrome Extension untuk Integrasi Data SIPD ke FMIS

Mapping Sumber Dana di WP-SIPD