You are on page 1of 40

HÀM (FUNCTIONS)

KHOA CÔNG NGHỆ THÔNG TIN


TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI
NỘI DUNG

• Đặt vấn đề
• Khái niệm hàm và ý nghĩa của hàm
• Sử dụng các hàm có sẵn, hàm trong các thư viện
• Xây dựng và sử dụng hàm trong chương trình
• Tham số của hàm
• Biến toàn cục, biến cục bộ

Introduction to Computer Science 2 FIT – HNUE 2023


ĐẶT VẤN ĐỀ
VÍ DỤ 6-1

§ Bài toán: Lập trình giải phương trình bậc 2: ax2 + bx + c = 0 (a ≠ 0)


§ Ý tưởng giải thuật
• Nhập giá trị của các hệ số a, b, c từ bàn phím
• Tính biệt số ∆ theo công thức: ∆ = 𝑏 ! − 4𝑎𝑐
• Nếu ∆ < 0 thông báo phương trình vô nghiệm
"
• Ngược lại, nếu ∆ = 0, thông báo phương trình có nghiệm kép 𝑥1 = 𝑥2 = −
!#

• Ngược lại, nếu ∆ > 0, thông báo phương trình có hai nghiệm phân biệt x1 và x2 được
tính như sau:
o 𝑥1 = (−𝑏 + ∆)/(2𝑎)

o 𝑥2 = (−𝑏 − ∆)/(2𝑎)

Introduction to Computer Science 4 FIT – HNUE 2023


VÍ DỤ 6-1

Introduction to Computer Science 5 FIT – HNUE 2023


VÍ DỤ 6-1

§ Nhận xét
Gi i PTB2
• Mỗi gạch đầu dòng
trong thuật toán trên
thực hiện một công việc
hoàn chỉnh
Nh p giá tr các
• Chúng ta có thể phân rã h s a, b, c
Tính Delta Bi n lu n nghi m

bài toán giải phương


trình bậc hai thành các
bài toán nhỏ hơn, mỗi
bài toán nhỏ thực hiện Tr ng h p
Vô nghi m
Tr ng h p có
nghi m kép
Tr ng h p có
hai nghi m phân

một nhiệm vụ cụ thể. bi t

Introduction to Computer Science 6 FIT – HNUE 2023


VÍ DỤ 6-1

Introduction to Computer Science 7 FIT – HNUE 2023


VÍ DỤ 6-1

Introduction to Computer Science 8 FIT – HNUE 2023


KHÁI NIỆM VÀ Ý NGHĨA CỦA HÀM
KHÁI NIỆM HÀM

§ Hàm: Một khối lệnh trong chương trình giải


quyết một vấn đề cụ thể và trọn vẹn.
inputs
§ Có hai loại hàm: hàm trả về giá trị (function)
và hàm không trả về giá trị (proceduce).
outputs
Function
§ Ý nghĩa của việc sử dụng hàm Machine
• Triển khai việc viết các chương trình theo mô hình
chia để trị
• Tiết kiệm thời gian và công sức vì có thể sử dụng
lại các hàm đã có

Introduction to Computer Science 10 FIT – HNUE 2023


CÁC LOẠI HÀM TRONG PYTHON

§ Hàm có sẵn trong Python


§ Hàm được xây dựng trong các thư viện
§ Hàm do người lập trình tự xây dựng trong chương trình

Tương tự với việc lắp ghép nên


một mô hình từ nhiều mảnh
ghép, có thể tạo nên một
Hàm, thư viện và lớp Phần mềm
chương trình từ nhiều hàm khác
hau.

Introduction to Computer Science 11 FIT – HNUE 2023


HÀM CÓ SẴN TRONG PYTHON

§ Là các hàm đã được trình dịch của Python xây dựng sẵn, chúng ta
có thể dùng ngay mà không cần khai báo.
§ Về bản chất các hàm này được xây dựng và đưa vào thư viện có tên
là __builtins__ và được tích hợp sẵn.
§ Ví dụ: print(), input(), max(), min(), pow(),…
§ Để xem các hàm này thì tại chế độ tương tác trực tiếp gõ lệnh
dir(__builtins__)

Introduction to Computer Science 12 FIT – HNUE 2023


HÀM ĐƯỢC XÂY DỰNG TRONG CÁC THƯ VIỆN

§ Python có hơn 230 thư viện, mỗi thư viện là một tập hợp các hàm
xây dựng cho một lĩnh vực hoặc một mục đích nào đó.
§ Trong chương trình muốn sử dụng hàm của module nào đó, cần
khai báo theo một trong hai cách như sau:

Introduction to Computer Science 13 FIT – HNUE 2023


VÍ DỤ 6-2

Introduction to Computer Science 14 FIT – HNUE 2023


MỘT SỐ THƯ VIỆN THÔNG DỤNG

• Thư viện math • Thư viện pandas


• Tập hợp các hàm toán học
• Các hàm sử dụng AI và ML
• Thư viện random
• Thư viện os
• Các hàm liên quan đến số ngẫu nhiên
• Thư viện numpy • Các hàm liên quan đến hệ
• Các hàm tính toán khoa học thống
• Thư viện collections • Thư viện matplotlib
• Các kiểu dữ liệu có cấu trúc • Hàm đồ họa hai chiều
…..

Introduction to Computer Science 15 FIT – HNUE 2023


BÀI TẬP THỰC HÀNH
Bài 6-1. Tạo một số nguyên ngẫu nhiên x trong [1, 10], tính và đưa ra các
giá trị:
§ ex
§ x giai thừa
§ Logarit cơ số 10 của x
§ Căn bậc hai của x

Gợi ý: Sử dụng hàm randint(1, 10) trong thư viện random để tạo số x ngẫu nhiên.
XÂY DỰNG VÀ SỬ DỤNG HÀM
KHAI BÁO HÀM
o def: là từ khóa để khai báo bắt đầu một hàm.
§ Cú pháp:
o tên_hàm: được đặt theo quy tắc đặt tên biến,
tên hàm thường đặt gợi nhớ, thể hiện nội
dung của hàm.
o <danh sách tham số>: là các tham số cần
truyền vào và sử dụng trong hàm, hai tham số
cách nhau bởi một dấu phẩy.
• Chú ý: sau khi khai báo và triển o <khối lệnh>: đây là nội dung của hàm. Nếu là
hàm có trả về giá trị thì trong nội dung của
khai nội dung của hàm, các lệnh
hàm có ít nhất một lệnh return để trả về giá
trong hàm chỉ hoạt động khi hàm trị.
được gọi từ một nơi nào đó trong o Trong Python, hàm có thể trả về nhiều hơn
một giá trị sau mỗi lần thực hiện.
chương trình.

Introduction to Computer Science 18 FIT – HNUE 2023


VÍ DỤ 6-3

Introduction to Computer Science 19 FIT – HNUE 2023


VÍ DỤ 6-4
o Giả sử cần tính giá trị của hàm f(x, y) phụ thuộc vào giá trị của x và y như sau:

- Nếu x > y thì 𝑓 = 𝑥! − 𝑦!

- Nếu x < y thì 𝑓 = 𝑦! − 𝑥!

- Nếu x = y thi 𝑓 = 2 ∗ 𝑥 !

Introduction to Computer Science 20 FIT – HNUE 2023


CÁCH GỌI ĐỂ THỰC THI CÁC HÀM
§ Khi một hàm được định nghĩa và triển khai, sẽ chưa thực hiện nếu chưa
được gọi
• Khi nào cần hàm thực thi nội dung, chúng ta cần viết lời gọi hàm
§ Một hàm có thể được gọi nhiều lần trong chương trình, mỗi lần được
gọi, hàm sẽ được thực hiện
§ Hàm được gọi thông qua tên hàm và danh sách các đối số truyền vào
cho hàm
• Mỗi tham số của hàm sẽ nhận giá trị đối số tương ứng từ trái qua phải (trong cách
truyền theo vị trí)
• Đối với cách truyền theo keyword (thì tham số nhận giá trị thông qua keyword)
§ Lời gọi hàm
• Đối với hàm có giá trị trả về tên hàm xuất hiện trong một biểu thức hoặc phía bên
phải của phép gán
• Đối với hàm không có giá trị trả về chỉ cần viết tên hàm như một lệnh bình thường
Introduction to Computer Science 21 FIT – HNUE 2023
VÍ DỤ 6-5

- Dòng 19, lời gọi hàm có 1 giá trị trả về


- Dòng 23 lời gọi hàm xuất hiện trong biểu thức
- Dòng 25 lời gọi hàm xuất hiện trong lệnh
print()

- Dòng 35, lời gọi hàm có 3 giá trị trả về


- Dòng 37 lời gọi hàm có 1 giá trị trả về
- Dòng 41, 45, 48 lời gọi hàm không có giá trị
trả về
Introduction to Computer Science 22 FIT – HNUE 2023
VÍ DỤ 6-6

Hãy viết một chương trình bao gồm các hàm thực hiện các nhiệm vụ
dưới đây:
• Hàm nhập ba số.
• Hàm tính trung bình cộng của ba số.
• Hàm trả về số lớn nhất trong ba số.
• Hàm trả về số nhỏ nhất trong ba số.

Introduction to Computer Science 23 FIT – HNUE 2023


BÀI TẬP THỰC HÀNH

Bài 6-2. Nhập vào số nguyên dương n và số thực 𝑥, hãy tính và đưa ra
màn hình các tổng sau đây:
! !! !"
• 𝑠1 = "∗$
+ $∗% + ⋯ + &∗(&(")
• 𝑠2 = 𝑥 + 𝑥 % + ⋯ + 𝑥 $∗&("
• 𝑠3 = 𝑠1 + 2 ∗ 𝑠2

Introduction to Computer Science 24 FIT – HNUE 2023


TRUYỀN GIÁ TRỊ CHO THAM SỐ CỦA HÀM
THAM SỐ VÀ ĐỐI SỐ CỦA HÀM
§ Khi khai báo một hàm, cần xác định được dữ liệu vào và dữ liệu ra của
hàm, dữ liệu vào chính là giá trị của các tham số của hàm, dữ liệu ra là
các giá trị trả về của hàm
§ Các biến xuất hiện trong định nghĩa hàm được gọi là các tham số
(parameter), còn các giá trị tương ứng với từng tham số trong lời gọi hàm
được gọi là đối số (argument).
§ Trong Python, có hai cách truyền giá trị đối số cho tham số
• Truyền theo vị trí: Sự tương ứng giữa tham số và đối số trong lời gọi hàm là 1 – 1,
tính từ trái qua phải
• Truyền theo keyword: giá trị của tham số được xác định thông qua keyword
§ Trong Python, ngoại trừ các biến có cấu trúc như list, dictonary,… sẽ
được truyền vào hàm theo địa chỉ, còn các biến rời rạc chỉ có truyền theo
giá trị.

Introduction to Computer Science 26 FIT – HNUE 2023


THAM SỐ VÀ ĐỐI SỐ CỦA HÀM

§ Dòng 3: x, y là các tham số


của ham_f
§ Dòng 19, 23, 25: minh họa các
cách gọi hàm với các đối số
khác nhau
§ Với mỗi lời gọi hàm, các tham
số sẽ nhận được các giá trị
của đối số tương ứng tính từ
trái qua phải

Introduction to Computer Science 27 FIT – HNUE 2023


VÍ DỤ 6-7

Introduction to Computer Science 28 FIT – HNUE 2023


CÁCH TRUYỀN GIÁ TRỊ RA NGOÀI HÀM

§ Vậy làm thế nào để truyền được giá trị của tham biến (hoặc biến) ra
bên ngoài?
§ Khi cần truyền giá trị của 1 tham biến (hoặc một biến) của hàm ra
ngoài, hãy coi như đó là một giá trị trả về của hàm.
§ Ví dụ:

Introduction to Computer Science 29 FIT – HNUE 2023


VÍ DỤ 6-8

Introduction to Computer Science 30 FIT – HNUE 2023


THAM SỐ CÓ GIÁ TRỊ MẶC ĐỊNH

§ Python cho phép gán giá trị mặc định cho một số tham số, khi gọi
hàm, nếu các tham số này có đối số tương ứng truyền vào, thì
chúng sẽ nhận giá trị là các đối số này, trong trường hợp ngược lại
thì sẽ nhận giá trị mặc định đã được gán khi định nghĩa hàm

§ Trong cùng một hàm, các tham số có giá trị mặc định phải được khai
báo bên phải của tất cả các tham số không có giá trị mặc định.

Introduction to Computer Science 31 FIT – HNUE 2023


THAM SỐ CÓ GIÁ TRỊ MẶC ĐỊNH

a, b là các tham số bình thường


c, d là các tham số có giá trị mặc
định lần lượt là 10 và 20; khi lời
gọi hàm không truyền giá trị cho
các tham số này thì giá trị mặc
định sẽ được sử dụng

Introduction to Computer Science 32 FIT – HNUE 2023


BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘ
KHÁI NIỆM BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘ

§ Khi sử dụng hàm, xuất hiện hai loại biến


• Biến toàn cục (global variables) là các biến mà giá trị của nó có
thể được truy cập và chỉnh sửa trong suốt chương trình.
• Biến cục bộ (local variables) là các biến được phát sinh trong một
hàm và chỉ có thể sử dụng trong phạm vi của hàm đó, khi hàm kết
thúc thì các biến cục bộ của nó cũng được giải phóng và không
còn tồn tại
§ Chú ý: Tham biến cũng là một loại biến cục bộ, tuy nhiên
tham biến có thể nhận giá trị từ bên ngoài hàm thông qua
lời gọi hàm

Introduction to Computer Science 34 FIT – HNUE 2023


MINH HỌA BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘ

Hàm B() được khai báo và sử


dụng trong hàm A().
- Biến x ở dòng 1 là biến toàn
cục
- Biến x ở dòng 4 là biến cục
bộ của hàm A()
- Biến x ở dòng 7 là biến cục
bộ của hàm B()

Introduction to Computer Science 35 FIT – HNUE 2023


TỪ KHÓA GLOBAL

§ Chương trình dưới đây cho kết quả là gì?

Khi cần sử dụng một biến toàn cục trong một hàm
thì trong hàm cần khai báo biến đó là biến toàn cục
bằng từ khóa global, giống như dòng 3 ở ví dụ
trên.
Introduction to Computer Science 36 FIT – HNUE 2023
MỘT SỐ ĐIỂM CẦN LƯU Ý

§ Sử dụng hàm có nhiều lợi ích trong lập trình, nhất là đối với các chương trình
giải các bài toán lớn, phức tạp
§ Hàm có giá trị trả về cần có lệnh return trong thân hàm, hàm không có giá trị trả
về không cần lệnh return
§ Hàm có thể trả về nhiều giá trị thông qua tên hàm (khác với các ngôn ngữ lập
trình khác)
§ Ngoại trừ các biến có cấu trúc như list, dictionary,… chỉ có một cách truyền
tham biến cho hàm là truyền theo giá trị; khi cần truyền giá trị của tham biến
(hoặc của biến) trong hàm ra ngoài cần coi đó là một giá trị trả về của hàm
§ Muốn sử dụng một biến toàn cục trong một hàm nào đó, cần sử dụng từ khóa
global để khai báo cho biến đó

Introduction to Computer Science 37 FIT – HNUE 2023


BÀI TẬP THỰC HÀNH

Bài 6-3. Cho hai số nguyên dương N và M, hãy thiết kế và


viết một chương trình thực hiện các việc sau đây:
§ Tìm ước số chung lớn nhất của hai số N, M.
§ So sánh tổng các chữ số của N và M.

Introduction to Computer Science 38 FIT – HNUE 2023


BÀI TẬP THỰC HÀNH

Bài 6-4. Viết chương trình thực hiện các việc sau:
• Nhập một số nguyên dương M từ bàn phím
• Tìm và hiển thị lên màn hình tất cả các số chính phương nhỏ hơn M. Số
chính phương là bình phương của một số nguyên.
• Tìm và hiển thị lên màn hình tất cả các số nguyên tố nhỏ hơn M. Số nguyên
tố là số chỉ có ước là 1 và chính nó.

Introduction to Computer Science 39 FIT – HNUE 2023


BÀI TẬP THỰC HÀNH

Bài 6-6. Số Mersenne là một số nguyên tố có dạng 2P – 1, trong đó P


cũng là một số nguyên tố. Hãy lập trình tìm các số Mersen nhỏ hơn
một số M cho trước.
Ví dụ: 31 là một số Mersenne (31 = 55 – 1)

Introduction to Computer Science 40 FIT – HNUE 2023

You might also like