21. Functions — Solusi Pekerjaan Rumah

File solusi .py ada di exercises/21/homework/solutions/.

Soal 1 — Greet

Soal. Sebuah function greet(name) yang mencetak salam, dipanggil tiga kali.

Cara berpikir. Satu parameter, satu baris print; si pemanggil mengoper sebuah string di setiap pemanggilan.

Solusi.

def greet(name):
    print(f"Hello, {name}!")

greet("Keiko")
greet("Python")
greet("World")

Kesalahan umum.

  • Menulis statement return alih-alih print. Function harus mencetak langsung; si pemanggil tidak butuh nilai balik.
  • Lupa titik dua di akhir def greet(name):. Python memerlukannya dan akan memunculkan SyntaxError tanpanya.

Soal 2 — is_even

Soal. Kembalikan True atau False dari n % 2 == 0. Tidak ada pencetakan di dalam function.

Cara berpikir. n % 2 == 0 sudah berupa boolean. return langsung; biarkan si pemanggil yang mencetak.

Solusi.

def is_even(n):
    return n % 2 == 0

print(is_even(4))   # True
print(is_even(7))   # False
print(is_even(0))   # True
print(is_even(-2))  # True

Satu baris itu adalah seluruh isi function: Python mengevaluasi n % 2, lalu ... == 0, dan mengembalikan boolean-nya.

Kesalahan umum.

  • Menulis function seperti ini:

    if n % 2 == 0:
        return True
    else:
        return False

    Empat baris untuk apa yang bisa dilakukan satu baris di atas. n % 2 == 0 sudah berupa boolean.

Soal 3 — Clamp

Soal. clamp(x, lo, hi) mengembalikan x yang dibatasi oleh lo dan hi.

Cara berpikir. Dua pengecekan guard di bagian atas menangani kasus di luar rentang; jika tidak, kembalikan x apa adanya.

Solusi.

def clamp(x, lo, hi):
    if x < lo:
        return lo
    if x > hi:
        return hi
    return x

print(clamp(5, 0, 10))    # 5
print(clamp(-3, 0, 10))   # 0
print(clamp(99, 0, 10))   # 10

Dua blok if bersifat independen karena masing-masing me-return: yang pertama terpenuhi akan keluar dari function. Jika tidak, return x yang dijalankan.

Kesalahan umum.

  • Mengharapkan clamp(99, 0, 10) menghasilkan 99. Dibatasi oleh memaksa output berada di dalam rentang, sehingga mengembalikan 10.

Tantangan — Swap

Soal. Sebuah function yang mengembalikan dua nilai yang ditukar, beserta pemanggilan multi-assignment.

Cara berpikir. Isinya hanya satu baris: return b, a. Si pemanggil menulis x, y = swap(x, y) untuk menerima keduanya sekaligus.

Solusi.

def swap(a, b):
    return b, a

x = 1
y = 2

print(f"Before: x={x} y={y}")
x, y = swap(x, y)
print(f"After:  x={x} y={y}")

Output:

Before: x=1 y=2
After:  x=2 y=1

Trik a, b = b, a yang sama dari Bab 11, dibungkus dalam sebuah function. Tidak menambah kemampuan, tapi memberi nama pada operasinya sehingga kode pemanggil lebih mudah dibaca.

Kesalahan umum.

  • Menulis x, y = swap(x, y), 0. Itu adalah syntax error atau memberikan hasil yang tidak terduga. Untuk membongkar nilai return yang berjumlah banyak, pemanggilan harus berdiri sendiri di sisi kanan assignment.

Selesai?

Dua bab berikutnya membahas list dan dictionary, struktur data bawaan Python. Lalu module untuk memisahkan kode ke beberapa file, dan mini-project Part 5: petualangan teks.