Gom Code vào túi (Hàm - Function)

Ở bài bổ trợ trước, các con đã biết máy tính quản lý thế giới bằng các Đối tượng (Object) và điều khiển chúng bằng các Hành động (Method) có sẵn như forward(), left().

Nhưng nếu các con muốn chú rùa của mình biết làm một hành động hoàn toàn mới, chưa từng có sẵn trong Python — ví dụ như hành động ve_hinh_vuong() hay ve_ngôi_sao() chỉ bằng một câu lệnh duy nhất thì sao? Bài hôm nay sẽ giúp các con tự tạo ra những phép thuật đó nhờ vào Hàm (Function).

📦 Phần 1: Khái niệm "Hàm" là gì?

Cách giảng trực quan cho con:

"Các con hãy tưởng tượng 'Hàm' giống như một chiếc túi thần kỳ hoặc một nút bấm mới trên chiếc điều khiển từ xa. Con nhét một đoạn code dài, phức tạp vào trong chiếc túi đó và đặt cho nó một cái tên. Mỗi lần cần dùng, con chỉ cần gọi đúng cái tên đó ra (gọi là Gọi hàm - Call function), toàn bộ đoạn code bên trong sẽ tự động chạy mà con không cần phải gõ lại từ đầu!"

Để tự chế ra một chiếc túi thần kỳ (Hàm), trong Python chúng ta dùng từ khóa def (viết tắt của define - định nghĩa).

💻 Thực hành 1: Tự chế hành động ve_hinh_vuong()

Hướng dẫn con tạo một file mới đặt tên là bai7_ham.py. Chúng ta sẽ dạy cho chú rùa một hành động mới tinh:

import turtle

rua = turtle.Turtle()
rua.shape("turtle")
rua.speed(5)

# --- BƯỚC 1: ĐỊNH NGHĨA HÀM (Chế tạo nút bấm) ---
# Ta dùng 'def', đặt tên hàm là 've_hinh_vuong' và có dấu ngoặc () với dấu hai chấm :
def ve_hinh_vuong():
    for i in range(4):
        rua.forward(100)
        rua.left(90)

# --- BƯỚC 2: GỌI HÀM (Bấm nút) ---
# Bây giờ, chỉ cần gõ tên hàm là rùa tự vẽ luôn!
ve_hinh_vuong()

# Thử cho rùa đi ra chỗ khác rồi bấm nút vẽ tiếp hình thứ hai xem sao
rua.penup()       # Nhấc bút lên để không để lại nét vẽ
rua.forward(150)  # Đi ra xa 150 bước
rua.pendown()     # Hạ bút xuống lại

ve_hinh_vuong()   # Bấm nút lần nữa! Rùa lại vẽ một hình vuông nữa cực kỳ nhanh

turtle.done()

 

Con thấy: Nhờ có Hàm, thay vì phải viết $4 \times 2 = 8$ dòng code vòng lặp, giờ đây con chỉ cần gọi ve_hinh_vuong() hai lần là xong. Code trở nên cực kỳ gọn gàng!

🎛️ Phần 2: Nâng cấp Hàm với "Tham số" (Nguyên liệu đầu vào)

Cách giảng cho con:

"Cỗ máy vẽ hình vuông ở trên rất tốt, nhưng nó chỉ vẽ được một cỡ duy nhất là 100 bước. Nếu con muốn lúc thì vẽ hình vuông tí hon, lúc thì vẽ hình vuông khổng lồ thì sao? Chúng ta sẽ đục một cái lỗ trên cỗ máy để truyền nguyên liệu/kích thước vào. Cái lỗ đó trong lập trình gọi là Tham số (Parameter)."

💻 Thực hành 2: Hàm vẽ hình vuông linh hoạt kích cỡ

Hướng dẫn con sửa lại hàm cũ một chút, thêm chữ kich_thuoc vào trong dấu ngoặc đơn:

import turtle
rua = turtle.Turtle()

# Thêm tham số 'kich_thuoc' vào trong ngoặc
def ve_hinh_vuong_linh_hoat(kich_thuoc):
    for i in range(4):
        rua.forward(kich_thuoc)  # Rùa sẽ đi theo kích thước được truyền vào
        rua.left(90)

# Bây giờ ta ra lệnh vẽ các hình vuông to nhỏ khác nhau:
ve_hinh_vuong_linh_hoat(50)   # Vẽ hình vuông cạnh 50 (Nhỏ)
ve_hinh_vuong_linh_hoat(100)  # Vẽ hình vuông cạnh 100 (Vừa)
ve_hinh_vuong_linh_hoat(200)  # Vẽ hình vuông cạnh 200 (To)

turtle.done()

🏆 Dự án nhỏ cuối bài: Xây dựng "Hộp công cụ họa sĩ" để vẽ ngôi làng

Để chốt lại bài học, các con sẽ cùng định nghĩa 2 hàm: một hàm vẽ thân nhà (hình vuông) và một hàm vẽ mái nhà (hình tam giác đều), sau đó gọi chúng ra để lắp ghép thành một ngôi nhà hoàn chỉnh nhé!

Hướng dẫn con gõ đoạn code kiến trúc sư này:

import turtle
rua = turtle.Turtle()
rua.speed(5)

# 1. Định nghĩa hàm vẽ thân nhà
def ve_than_nha():
    rua.color("blue")
    for i in range(4):
        rua.forward(100)
        rua.left(90)

# 2. Định nghĩa hàm vẽ mái nhà
def ve_mai_nha():
    rua.color("red")
    for i in range(3):
        rua.forward(100)
        rua.left(120)  # Góc quay ngoài của tam giác đều là 120 độ

# --- BẮT ĐẦU XÂY NHÀ ---
# Bước 1: Vẽ thân nhà trước
ve_than_nha()

# Bước 2: Điều khiển rùa leo lên đỉnh thân nhà để chuẩn bị lợp mái
rua.left(90)
rua.forward(100)
rua.right(90)

# Bước 3: Vẽ mái nhà
ve_mai_nha()

turtle.done()

💡 Thử thách nâng cấp "Oai" hơn cho con:

Sau khi ngôi nhà hiện lên, hãy khích lệ các con:

  • "Bây giờ các con thử tự chế thêm một hàm tên là ve_cay() hoặc ve_mat_troi() để trang trí thêm cho bức tranh ngôi làng của mình sinh động hơn xem nào!"

Bài học này giúp các con rèn luyện tư duy chia nhỏ một bài toán lớn (bức tranh) thành các bài toán nhỏ (từng cái nhà, cái cây) để xử lý. Đây chính là tư duy của một kỹ sư phần mềm thực thụ!