25. Module dan import — Solusi Pekerjaan Rumah
Setiap soal memiliki foldernya sendiri di bawah
exercises/25/homework/solutions/. Untuk menjalankan salah
satu:
cd exercises/25/homework/solutions/01-greet-module
python main.py
Soal 1 — Module greet
Soal. Lengkapi module greet.py yang
mengekspos hello dan bye.
Cara berpikir. File .py biasa dengan
dua function — tidak perlu pembungkus. Keduanya sederhana: masing-masing
satu print.
Solusi. greet.py:
def hello(name):
print(f"Hello, {name}!")
def bye(name):
print(f"Goodbye, {name}.")main.py:
import greet
greet.hello("Keiko")
greet.bye("Keiko")Kesalahan umum.
- Menambahkan guard
if __name__ == "__main__":di module dan memanggil function di sana. Module hanya boleh mendefinisikan function; si pemanggil yang melakukan pemanggilan. - Menjalankan dari direktori yang salah.
cdke folder terlebih dahulu, atau Python tidak akan menemukangreet.py.
Soal 2 — Math helpers
Soal. Module dengan double dan
triple.
Cara berpikir. Bentuknya sama dengan Soal 1, tapi function-nya mengembalikan nilai alih-alih mencetak. Si pemanggil yang mencetak.
Solusi. math_helpers.py:
def double(x):
return x * 2
def triple(x):
return x * 3main.py:
import math_helpers as mh
print(mh.double(7)) # 14
print(mh.triple(7)) # 21
print(mh.double(mh.triple(5))) # 30Kesalahan umum.
- Menaruh
printdi dalam function module. Mengembalikan nilai membiarkan si pemanggil memutuskan apa yang akan dilakukan dengannya.
Soal 3 — Counter
Soal. Module dengan increment,
get, dan reset. Counter internal harus
bertahan antar pemanggilan.
Cara berpikir. Variable di level module (di luar
function apapun) hidup selama lifetime module — yang, berkat caching
import Python, adalah selama lifetime program. Ketiga function membaca
dan memodifikasi variable yang sama itu. Function yang menugaskan ke
variable level module harus mendeklarasikannya dengan
global.
Solusi. counter.py:
_count = 0
def increment():
global _count
_count = _count + 1
def get():
return _count
def reset():
global _count
_count = 0main.py:
import counter
counter.increment()
counter.increment()
counter.increment()
print(counter.get()) # 3
counter.reset()
print(counter.get()) # 0Kesalahan umum.
- Mendeklarasikan
countdi dalamincrement. Setiap pemanggilan mengatur ulangnya ke0, lalu menaikkannya ke1. State yang persisten harus berada di level module, di luar function. - Lupa
global _countdi dalamincrementdanreset. Tanpanya, Python membuat variable lokal yang membayangi yang di level module; nilai level module tidak pernah berubah.
Tantangan — String utilities
Soal. Module dengan tiga function string buatanmu sendiri.
Cara berpikir. Pilih tiga. Contoh menunjukkan
shout, echo, dan reverse_words.
reverse_words memisahkan berdasarkan spasi dengan
.split() dan membalik list yang dihasilkan.
Solusi. string_utils.py:
def shout(s):
return s.upper() + "!"
def echo(s, n):
return " ".join([s] * n)
def reverse_words(s):
words = s.split()
words.reverse()
return " ".join(words)main.py:
import string_utils as su
print(su.shout("hello")) # HELLO!
print(su.echo("hi", 4)) # hi hi hi hi
print(su.reverse_words("one two three four")) # four three two ones.split() tanpa argumen memisahkan pada spasi apapun dan
mengembalikan list kata. [s] * n membuat list berisi
n salinan dari s. " ".join(...)
menggabungkan dengan spasi.
Kesalahan umum.
- Menulis
s.split(" ")alih-alihs.split(). Bentuk tanpa argumen menangani banyak spasi dan spasi di awal/akhir dengan bersih; bentuk spasi tunggal tidak.
Selesai?
Part 5 selesai begitu keempat program pekerjaan rumah berjalan. Mini-project Part 5 — sebuah Petualangan Teks — menggabungkan function, list, dictionary, dan module menjadi dunia game kecil.