You are on page 1of 352

BÀI GIẢNG

CƠ SỞ LẬP TRÌNH
CHƯƠNG 0.

GIỚI THIỆU MÔN HỌC


BỘ MÔN TIN HỌC QUẢN LÝ
TRƯỜNG ĐẠI HỌC KINH TẾ, ĐẠI HỌC ĐÀ NẴNG
THUYNT@DUE.EDU.VN
TÀI LIỆU THAM KHẢO
• “Thinking in C#”, by Larry O’Brien and Bruce Eckel
• “Programming in C#”, by Kurt Nørmark
• “Beginning C# “Object-oriented Programming” by
Dan Clark

2
TÀI LIỆU THAM KHẢO
 FaceGroup của môn học:
https://www.facebook.com/groups/oopmisdue
 Link video tham khảo:
1. HowKteam:
https://www.youtube.com/playlist?list=PL33l
vabfss1zRgaWBcC__Bnt5AOSRfU71
2. s

3
PHẦN MỀM HỖ TRỢ HỌC TẬP

4
HÌNH THỨC ĐÁNH GIÁ

• 10% Thành phần 1: Bài thi giữa kỳ


• 30% Thành phần 2: Bài tập tại lớp + Bài tập về nhà
• 60% Bài thi cuối kỳ
Hình thức thi Giữa kỳ và Cuối kỳ: lập trình trên máy

5
YÊU CẦU CHUNG ĐỐI VỚI SINH VIÊN
• Để môn học đạt hiệu quả cao nhất, sinh
viên nên mang theo laptop lên lớp để học;
• Tham gia đầy đủ các buổi học;
• Đọc bài giảng và tài liệu tham khảo trước
khi lên lớp;
• Tham gia làm bài tập cá nhân và nộp bài
chấm nhanh trên lớp;
• Làm đầy đủ các bài tập kết thúc chương
sau mỗi buỗi học.

6
BÀI GIẢNG
CƠ SỞ LẬP TRÌNH
CHƯƠNG 1.

TỔNG QUAN VỀ LẬP TRÌNH


VÀ NGÔN NGỮ PYTHON
TRẦN THỊ THU THẢO
BỘ MÔN TIN HỌC QUẢN LÝ
TRƯỜNG ĐẠI HỌC KINH TẾ, ĐẠI HỌC ĐÀ NẴNG
THAOTRAN@DUE.EDU.VN
NỘI DUNG
 Các khái niệm
 Các bước xây dựng chương trình
 Ngôn ngữ lập trình Python
 Môi trường làm việc VSCode

2/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC KHÁI NIỆM
 Vì sao máy tính có năng lực mạnh mẽ …?

PHẦN
CỨNG

+
PHẦN
MỀM

3/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC KHÁI NIỆM
 Các ứng dụng minh họa trí thông minh của máy tính:
 Robot di chuyển hàng hóa trong kho hàng của
Amazon
 Robot đánh bóng bàn
 Cuộc thi MicroMouse
 …

4/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC KHÁI NIỆM

Lập trình PHẦN Điều PHẦN


(Viết chương trình) MỀM khiển CỨNG

Ngôn ngữ
Thuật toán
lập trình

5/25
CÁC KHÁI NIỆM
 Thuật toán (Giải thuật)
 Là một dãy hữu hạn các thao tác được sắp
xếp theo một trình tự xác định, sao cho từ
dữ liệu đầu vào (Input) của bài toán, ta
nhận được kết quả đầu ra (Output) cần tìm.

6/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC KHÁI NIỆM
 Thuật toán (Giải thuật)
 Ví dụ 1: xây dựng thuật toán giải và biện
luận phương trình bậc nhất ax + b=0
Input: a và b
Output: nghiệm của phương trình
Thuật toán:
o Nếu a ≠ 0: pt có nghiệm x = -b/a
o Ngược lại, a = 0:
- Nếu b = 0: pt có vô số nghiệm
- Nếu b ≠ 0: pt vô nghiệm

7/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC KHÁI NIỆM
 Thuật toán (Giải thuật)
 Ví dụ 2: xây dựng thuật toán tìm số có giá
trị lớn nhất trong 3 số a, b, c bất kỳ
Input: a, b và c
Output: giá trị lớn nhất
Thuật toán: tìm số lớn nhất
o Bước 1: max=a
o Bước 2: nếu max<b thì đặt max=b
o Bước 3: nếu max<c thì đặt max=c
o Bước 4: kết luận max là giá trị lớn nhất

8/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC KHÁI NIỆM
 Ngôn ngữ lập trình
 Là một tập các chỉ thị được sắp xếp theo
một trật tự nhất định, nhằm hướng dẫn
máy tính thực hiện các hành động cần thiết
để đáp ứng một mục tiêu đã định trước của
con người như truy xuất dữ liệu, tìm kiếm,
giải bài toán,...

9/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
Theo PCWorldVN
Các ngôn ngữ lập trình

10/25
Phổ biến nhất 2019 (video)
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC KHÁI NIỆM
 Lập trình
 Là việc cài đặt một hoặc nhiều thuật toán
có liên quan với nhau bằng một ngôn ngữ
lập trình để tạo ra một chương trình trên
máy tính

11/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC KHÁI NIỆM
 Lập trình
 Ví dụ 1.1: Chương trình tìm số lớn nhất trong 3 số

Kết quả khi chạy


chương trình

12/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC KHÁI NIỆM
 Các kỹ thuật lập trình
 Lập trình hướng cấu trúc (thủ tục/chức năng)
- Là phương pháp chia một chương trình lớn
thành các khối chức năng (Hàm/Thủ tục) nhỏ,
để dễ lập trình và kiểm tra.

13/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC KHÁI NIỆM
 Các kỹ thuật lập trình
 Lập trình hướng đối tượng
- Chương trình được chia thành các Đối tượng
(Object) độc lập;
- Mỗi Đối tượng sẽ quản lý riêng Phương thức
(Chức năng) và Thuộc tính (Dữ liệu) của riêng nó;
- Các Đối tượng sẽ trao đổi thông tin với nhau
thông qua các Phương thức

14/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC KHÁI NIỆM

15/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC KHÁI NIỆM
 Bài toán quản lý giao dịch Ngân hàng
 Khách hàng có các giao dịch với Ngân hàng
- Nạp tiền vào Tài khoản
- Rút tiền từ Tài khoản
- Chuyển khoản giữa các Tài khoản

16/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC KHÁI NIỆM
Lập trình hướng CHỨC NĂNG Lập trình hướng ĐỐI TƯỢNG

17/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC BƯỚC XÂY DỰNG CHƯƠNG TRÌNH
Biểu diễn bằng:
Xác định bài toán • Ngôn ngữ tự nhiên
• Lưu đồ - Sơ đồ khối
Lựa chọn • Ngôn ngữ lập trình
phương pháp giải
Xây dựng
thuật toán/ thuật giải
Viết
chương trình
Lỗi cú pháp Hiệu chỉnh
Lỗi ngữ nghĩa chương trình
Thực hiện
chương trình

18/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
NGÔN NGỮ LẬP TRÌNH PYTHON
 Các bước để xây dựng chương trình

Viết chương trình Sử dụng các trình biên


tập mã nguồn để viết:
- Pycharm
- Visual Studio Code
- Notepad++
Dịch chương trình - Sublime Text
- Atom IDE
- PyDev
- …
Chạy chương trình

19/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
NGÔN NGỮ LẬP TRÌNH PYTHON
 Tổng quan về Python
 Là một ngôn ngữ lập trình bậc cao,
do Guido van Rossum sang lập
năm 1991;
 Có hình thức sáng sủa, cấu trúc rõ
ràng, dễ đọc, dễ học và dễ nhớ,
thuận tiện cho người mới học lập
trình;
 Cho phép người sử dụng viết mã
lệnh với số lần gõ phím tối thiểu;
 Thư viện phong phú, có cộng đồng
lớn. Guido van Rossum,
nhà sáng lập ngôn
ngữ Python.
(Theo Wikipedia)

20/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
NGÔN NGỮ LẬP TRÌNH PYTHON
 Vì sao nên học Python?
 Là ngôn ngữ lập trình phổ biến nhất (2019)
 Hỗ trợ nhiều môi trường ứng dụng:
‐ Ứng dụng Web
‐ Ứng dụng Desktop
‐ Ứng dụng Game
‐ AI và Machine Learning
‐ DataScience
‐ …

21/25
Hình: nguồn Coding Bytes
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
NGÔN NGỮ LẬP TRÌNH PYTHON
 Danh mục từ khóa

and del from nonlocal try

as elif global not while

assert else if or with

break except import pass yield

class finally in print

continue finally is raise

def for lambda return

22/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BIÊN TẬP MÃ NGUỒN PYTHON
 Trình biên tập mã nguồn Python
 Visual Studio Code
 Pycharm
 Jupyter Notebooks
 Notepad++
 Sublime Text
 Python Shell Python Shell

23/25
Jupyter Notebooks
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BIÊN TẬP MÃ NGUỒN PYTHON
 VSCode
Visual Studio Code
Tải phần mềm:
https://code.visualstudio.com/Download
Python
Tải bộ cài:
https://www.python.org/downloads

24/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP KẾT THÚC CHƯƠNG
Bài 1.1. Cài đặt trên máy tính phần mềm VSCode
Bài 1.2. Tìm hiểu môi trường làm việc của VSCode
Bài 1.3. Tạo project, nhập code thử chạy và kiểm tra kết quả hai
ví dụ tại:
- Bài 1: Ví dụ1.1, Slide 12 Chương 1
- Bài 2: Slide 23 Chương 2
Bài 1.4. Đọc tài liệu đọc them và xem video tham khảo

25/25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI GIẢNG
CƠ SỞ LẬP TRÌNH
CHƯƠNG 2.

BIẾN VÀ BIỂU THỨC

TRẦN THỊ THU THẢO


BỘ MÔN TIN HỌC QUẢN LÝ
TRƯỜNG ĐẠI HỌC KINH TẾ, ĐẠI HỌC ĐÀ NẴNG
THAOTRAN@DUE.EDU.VN
NỘI DUNG
 Biểu thức
 Giá trị và kiểu dữ liệu
 Biến
 Định danh
 Các hàm nhập, xuất dữ liệu cơ bản

2
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BIỂU THỨC
 Toán tử toán học
 Độ ưu tiên từ cao đến thấp
Toán tử Ý nghĩa Ví dụ Kết quả
** Bình phương 2 ** 3 8
% Chia lấy dư 5%2 1
// Chia lấy nguyên 5 // 2 2
/ Chia 5/2 2.5
* Nhân 5*3 15
- Trừ 5-2 3
+ Cộng 2+2 4

3
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BIỂU THỨC
 Độ ưu tiên toán tử toán học trong biểu thức
 Là trình tự xử lý của máy tính khi có đồng thời
nhiều toán tử trong một biểu thức.

Nguồn: Automate the Boring Stuff with Python

4
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
GIÁ TRỊ VÀ KIỂU DỮ LIỆU
 Giá trị (value): là những dữ liệu cơ bản mà máy tính
có thể tiếp nhận để xử lý như: một số, một chuỗi
ký tự,…;
 Kiểu dữ liệu (type): là kiểu của dữ liệu được đưa
vào máy tính, hoặc kiểu (phương pháp) tổ chức các
tập dữ liệu trên máy tính;

Nguồn: Automate the Boring Stuff with Python

 Chuỗi được đặt trong cặp dấu “ “ hoặc ‘ ‘

5
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
GIÁ TRỊ VÀ KIỂU DỮ LIỆU
 Các kiểu dữ liệu trong Python

Hình: nguồn javatpoint.com

6
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
GIÁ TRỊ VÀ KIỂU DỮ LIỆU
 Kiểu dữ liệu (type):
 Chuỗi được đặt trong cặp dấu “ “ hoặc ‘ ‘
 Phép nối chuỗi: + (dấu cộng)
 Phép nhân bản chuỗi: * (dấu nhân)

Sai: chuỗi không cộng được với số

Sai: phải là số nguyên

Sai: phải là số nguyên

7
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BIẾN (VARIABLE)
 Khái niệm về biến:
 Biến là một đại lượng mang giá trị và có thể thay
đổi trong quá trình xử lý của chương trình;
 Một biến được sử dụng để lưu trữ dữ liệu trong
một chương trình, và được khai báo với một kiểu
dữ liệu nhất định;

 Ví dụ:
- Tuoi (tuổi) của một sinh viên
- DiaChi (địa chỉ) của một khách hàng
- TienLuong (tiền lương) của một nhân viên, …

8
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BIẾN (VARIABLE)
 Khái niệm về biến:
 Một biến sẽ có một tên và có thể chứa một giá trị;
 Phép gán: = (dấu bằng)

Nguồn: Automate the Boring Stuff with Python

9
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BIẾN (VARIABLE)
 Khái niệm về biến:

10
Nguồn: Automate the Boring Stuff with Python
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BIẾN (VARIABLE)
 Khái niệm về biến:

11
Nguồn: Automate the Boring Stuff with Python
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BIẾN (VARIABLE)
 Khái niệm về biến:
 Ví dụ: sử dụng biến trong bài toán hoán vị.
- Trình bày phương pháp hoán vị nước giữa hai ly A và B,
sử dụng ly trung gian C

ĐỎ XANH

A B C

12
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BIẾN (VARIABLE)
 Khái niệm về biến:
 Ví dụ: sử dụng biến trong bài toán hoán vị 3 số
nguyên.

Đã hoán vị được
giá trị của a và b

13
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
ĐỊNH DANH
 Quy tắc đặt tên các định danh (identifier)
 Tên của một định danh (biến, hàm, lớp,…) là chuỗi
gồm các ký tự: chữ cái (chữ hoa hoặc chữ
thường), chữ số và dấu gạch chân (_);
 Tên không được bắt đầu bằng chữ số;
 Tên trong python có phân biệt chữ HOA và chữ
thường
- spam, SPAM, Spam, sPaM: là những tên khác nhau;
 Không được sử dụng từ khóa của python để đặt
tên;
 Trong Python, thường bắt đầu với ký tự thường và
dùng những tên có ý nghĩa và dễ phân biệt;

14
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
ĐỊNH DANH
 Quy tắc đặt tên các định danh (identifier)

15
Nguồn: Automate the Boring Stuff with Python
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
ĐỊNH DANH
 Quy tắc đặt tên cho các định danh
 Ví dụ: xác định tên đúng/ sai trong các trường hợp
TT Tên biến Đúng/Sai ?
1 Employee
2 Else
3 _Name
4 Emp_Name
5 @goto
6 def
7 4myclass
8 Student&Class

16
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC HÀM NHẬP, XUẤT DỮ LIỆU CƠ BẢN
 Hàm print()
 Cú pháp: print(<chuỗi/ biến / biểu thức>)
 Ý nghĩa: in lên màn hình giá trị một chuỗi, biến
hoặc biểu thức;

17
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC HÀM NHẬP, XUẤT DỮ LIỆU CƠ BẢN
 Hàm print()
 Viết không xuống dòng
print( <chuỗi/ biến / biểu thức>, end=<string> )
a=10
b=20
a=a+b
print(a) 30
print(b) 20

a=10
b=20
a=a+b
print(a, end=“ ")
30 20
print(b)

18
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC HÀM NHẬP, XUẤT DỮ LIỆU CƠ BẢN
 Hàm print()
 Viết không xuống dòng
print( <chuỗi/ biến / biểu thức>, sep=<string> )

a=10
print(“a=“,a) a= 10

a=10
print(“a=“,a,sep=“”) a=10

a=10
b=15
print(“a=“,a,”b=“,b,sep=“|”) a=10|b=15

19
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC HÀM NHẬP, XUẤT DỮ LIỆU CƠ BẢN
 Hàm input()
 Cú pháp: <Biến> = input([<Chuỗi thông báo>])
 Ý nghĩa: chờ nhập từ bàn phím một chuỗi ký tự,
kết thúc nhập bằng phím enter. Giá trị được nhập
sẽ được gán vào <Biến>;

Biến Name có giá trị được nhập từ bàn phím


Chuỗi thông báo

Hai cách viết tương đương

20
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC HÀM NHẬP, XUẤT DỮ LIỆU CƠ BẢN
 Hàm len()
 Cú pháp: len(<chuỗi>)
 Ý nghĩa: tính và trả về chiều dài của <chuỗi>;

21
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC HÀM NHẬP, XUẤT DỮ LIỆU CƠ BẢN
 Các hàm chuyển kiểu dữ liệu
 str(<value>): chuyển <value> thành chuỗi;
 int(< value >): chuyển <value> thành số nguyên;
 float(< value >): chuyển <value> thành số thực;

Nguồn: Automate the Boring Stuff with Python

Không thể cộng chuỗi với số được

22
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC HÀM NHẬP, XUẤT DỮ LIỆU CƠ BẢN
 Các hàm chuyển kiểu dữ liệu

Hàm int() còn dùng để lấy phần nguyên của một số thực

23
Nguồn: Automate the Boring Stuff with Python
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC HÀM NHẬP, XUẤT DỮ LIỆU CƠ BẢN

24
Nguồn: Automate the Boring Stuff with Python
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC HÀM NHẬP, XUẤT DỮ LIỆU CƠ BẢN
 Ví dụ: viết chương trình python cho phép nhập
vào 2 số nguyên a và b, in lên màn hình tổng của 2
số đó.

25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC HÀM NHẬP, XUẤT DỮ LIỆU CƠ BẢN
 Lời chú thích
- Cú pháp: #<văn bản>
- Ý nghĩa: chuyển nội dung <văn bản> thành lời chú
thích/ ghi chú.

Lời chú thích/ ghi chú

26
Nguồn: Automate the Boring Stuff with Python
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP ÔN TẬP
Câu 2.1. Viết chương trình thực hiện yêu cầu sau:
Nhập từ bàn phím Họ tên và Tuổi của bạn
In lên màn hình câu thông báo theo mẫu:

27
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP ÔN TẬP
Câu 2.2. Viết chương trình tính và in lên màn hình giá bán của
các mặt hàng với công thức sau:
Giá bán = Giá niêm yết - Chiết khấu + VAT
Trong đó:
- Nhập từ bàn phím Giá niêm yết, Chiết khấu
- VAT= (Giá niêm yết – Chiết khấu)*0.01

28
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP ÔN TẬP
Câu 2.3. Viết chương trình để tính và in lên màn hình Tiền lãnh
cuối kỳ tiết kiệm tại ngân hàng, như sau:
- Tiền vốn đầu tư ban đầu là P đồng;
- Lãi suất tiền gửi mỗi tháng là r, được lãnh vào cuối kỳ;
- Sau n tháng, số tiền thu về cả vốn và lãi là:
Tiền lãnh cuối kỳ = P*(1+ r*n)

Trong đó:
- P, r và n được nhập từ bàn phím

29
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP ÔN TẬP
Câu 2.4. Viết chương trình tính và in lên màn hình diện tích của
một tam giác theo độ dài của các cạnh, theo công thức:

Diện tích =

Trong đó:
- a, b và c là độ dài của 3 cạnh tam giác, được nhập từ bàn
phím;
- S=(a+b+c)/2

Gợi ý: Sử dụng lệnh import math để khai báo thư viện math.
Lệnh math.sqrt(X) để tính căn bậc hai của một số X bất kỳ.

30
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI GIẢNG
CƠ SỞ LẬP TRÌNH
CHƯƠNG 3.

CẤU TRÚC ĐIỀU KHIỂN

TRẦN THỊ THU THẢO


BỘ MÔN TIN HỌC QUẢN LÝ
TRƯỜNG ĐẠI HỌC KINH TẾ, ĐẠI HỌC ĐÀ NẴNG
THAOTRAN@DUE.EDU.VN
NỘI DUNG
 Cấu trúc điều kiện if
 Cấu trúc lặp while
 Cấu trúc lặp for
 Câu lệnh nhảy break, continue, return

2
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
Nguồn: Automate the Boring Stuff with Python

3
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
GIÁ TRỊ KIỂU BOOLEAN
 Giá trị Boolean (Logic):
 True: giá trị đúng
 False: giá trị sai

true khác True

Không được sử dụng từ khóa của


Python đặt tên cho biến

Nguồn: Automate the Boring Stuff with Python

4
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
TOÁN TỬ SO SÁNH
 Toán tử so sánh cho phép so sánh hai giá trị/
biến/ biểu thức. Kết quả trả về True hoặc False.

Nguồn: Automate the Boring Stuff with Python

5
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
TOÁN TỬ SO SÁNH
 Ví dụ 3.1-1:

Nguồn: Automate the Boring Stuff with Python

6
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
TOÁN TỬ LOGIC
 and, or, not
 Được dụng để kết hợp các giá trị/biến/biểu thức
kiểu logic.
and True False or True False
True True False True True True
False False False False True False

not True False


False True

7
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
TOÁN TỬ LOGIC
 AND, OR, NOT
Ví dụ 3.1-2:

8
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
TOÁN TỬ LOGIC
 Kết hợp giữa toán tử logic với toán tử so sánh
Ví dụ 3.1-3:

Nguồn: Automate the Boring Stuff with Python

9
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – DẠNG 1
 Cú pháp
if <Biểu thức Logic>:
//Lệnh hoặc khối lệnh

<Biểu thức true


<Lệnh/Khối lệnh>
Logic>?

false

10
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – DẠNG 1
Ví dụ 3.1-4:

11
Nguồn: Automate the Boring Stuff with Python
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – DẠNG 1
 Ví dụ 3.1-5: viết chương trình giải bài toán theo sơ
đồ khối sau

12
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – DẠNG 2
 Cú pháp
if <Biểu thức Logic>:
//Lệnh hoặc khối lệnh 1
else:
//Lệnh hoặc khối lệnh 2

false <Biểu thức true


Logic>?

<Lệnh/Khối lệnh 2> <Lệnh/Khối lệnh 1>

13
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – DẠNG 2
 Ví dụ 3.1-6: viết chương trình giải bài toán theo sơ
đồ khối sau

14
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – DẠNG 2
 Ví dụ 3.1-7: viết chương trình giải bài toán theo sơ
đồ khối sau

15
Nguồn: Automate the Boring Stuff with Python
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – DẠNG 3
 Cú pháp
if <Biểu thức Logic 1>:
//Lệnh hoặc khối lệnh 1
elif <Biểu thức Logic 2>:
//Lệnh hoặc khối lệnh 2
...
elif <Biểu thức Logic n-1>:
//Lệnh hoặc khối lệnh n-1
[else:
//Lệnh hoặc khối lệnh n
]

16
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – DẠNG 3
 Cú pháp

<Biểu thức true


<Lệnh/Khối lệnh 1>
Logic 1>?
false
<Biểu thức true
<Lệnh/Khối lệnh 2>
Logic 2>?

false

<Biểu thức true


<Lệnh/Khối lệnh n-1>
Logic n-1>?
false
<Lệnh/Khối lệnh n>

17
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – DẠNG 3
 Ví dụ 3.1-8: viết chương trình giải bài toán theo sơ
đồ khối sau

18
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – DẠNG 3
 Ví dụ 3.1-9: viết chương trình giải bài toán theo sơ
đồ khối sau

0:

The number is odd

19
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – DẠNG 3
 Ví dụ 3.1-10: viết chương trình giải bài toán theo sơ
đồ khối sau

20
Nguồn: Automate the Boring Stuff with Python
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
 Ví dụ 3.1-11:

21
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – DẠNG 3
 Ví dụ 3. 1-11: viết chương trình giải bài toán theo
sơ đồ khối sau

22
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
SỰ LỒNG NHAU CỦA CÁC CẤU TRÚC ĐIỀU KIỆN
 Cú pháp
if <Biểu thức Logic 1>:

if <Biểu thức Logic 2>:

if (<Biểu thức Logic 3>):

elif:

else:


23
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
SỰ LỒNG NHAU CỦA CÁC CẤU TRÚC ĐIỀU KIỆN
 Cú pháp

false <Biểu thức true


Logic 1>?

false <Biểu thức true


Logic 2>?

false <Biểu thức


Logic 3>?

true
<Lệnh/Khối lệnh>

24
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
SỰ LỒNG NHAU CỦA CÁC CẤU TRÚC ĐIỀU KIỆN
 Ví dụ 3.1-12: viết chương trình giải bài toán
theo sơ đồ khối sau

25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
SỰ LỒNG NHAU CỦA CÁC CẤU TRÚC ĐIỀU KIỆN
 Ví dụ 3.1-12:

26
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – BÀI TẬP VÍ DỤ
 Ví dụ 3.1-13: Tìm số lớn nhất giữa hai số a và b
 Cách 1:

27
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – BÀI TẬP VÍ DỤ
 Ví dụ 3.1-13: Tìm số lớn nhất giữa hai số a và b
 Cách 2:

28
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – BÀI TẬP VÍ DỤ
 Ví dụ 3.1-13: Tìm số lớn nhất giữa hai số a và b
 Cách 3:

29
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – BÀI TẬP VÍ DỤ
 Ví dụ 3.1-14: Giải phương trình bật nhất: ax + b =0

30
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – BÀI TẬP VÍ DỤ
 Ví dụ 3.1-15: Giải và biện luận phương trình bậc
hai: ax2 + bx + c = 0

31
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – BÀI TẬP ÔN TẬP
Viết chương trình sử dụng cấu trúc IF:
 Câu 3.1. Nhập 3 số thực từ bàn phím, in lên màn
hình số lớn nhất và bé nhất trong 3 số trên.

Ví dụ:
a=5
b=4.5
c=7
SLN=7
SBN=4.5

32
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – BÀI TẬP ÔN TẬP
Viết chương trình sử dụng cấu trúc IF:
 Câu 3.2. Một hãng máy tính có chính sách khuyến
mại, cứ mua từ 5 máy trở lên thì giá một máy sẽ là
450$ còn không thì giá một máy sẽ là 500$. Viết
chương trình yêu cầu người dùng nhập vào số máy
muốn mua, sau đó in ra màn hình số tiền người đó
phải trả cho hãng.

Ví dụ:
So may=10 So may=4 So may=0
So tien=4500 So tien=2000 So tien=0

33
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC ĐIỀU KIỆN IF – BÀI TẬP ÔN TẬP
Viết chương trình sử dụng cấu trúc IF:
 Câu 3.3. Nhập vào số KW điện tiêu thụ của một hộ
gia đình, sau đó in lên màn hình số tiền mà hộ gia
đình đó phải trả biết rằng cách tính tiền điện như
sau:
- Từ KW 1 đến KW thứ 100: giá 550 đ/1KW
- Từ KW 101 đến KW thứ 150: giá 750 đ/1KW
- Từ KW 151 đến KW thứ 200: giá 950 đ/1KW
- Từ KW 201 trở đi: giá 1350 đ/1KW
- Thuế VAT là 10%.
Thành tiền = Số KW tiêu thụ * Đơn giá + VAT
Ví dụ:
Tieu thu=110 Tieu thu=170
Phai tra=68750 Phai tra=122650

34
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI GIẢNG
CƠ SỞ LẬP TRÌNH
CHƯƠNG 3.

CẤU TRÚC ĐIỀU KHIỂN

TRẦN THỊ THU THẢO


BỘ MÔN TIN HỌC QUẢN LÝ
TRƯỜNG ĐẠI HỌC KINH TẾ, ĐẠI HỌC ĐÀ NẴNG
THAOTRAN@DUE.EDU.VN
NỘI DUNG
 Cấu trúc điều kiện if
 Cấu trúc lặp while
 Cấu trúc lặp for
 Câu lệnh nhảy break, continue

2
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC LẶP
 Đặc điểm chung
 Được sử dụng để giải các bài toán có tính chất lặp
lại nhiều lần một hoặc một khối công việc nào đó;
 Số lần lặp có thể biết trước hoặc cho đến khi thỏa
mãn một biểu thức Logic nào đó;
 Trong Python, có 2 loại cấu trúc lặp:
- while
- for

3
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC WHILE
 Cú pháp
<Biểu thức
while <Biểu thức Logic>: Logic>?
<Lệnh/Khối lệnh> false
true

<Lệnh/Khối lệnh>

 Hoạt động của toán tử while


 Bước 1: tính giá trị của <Biểu thức Logic>
 Bước 2:
- Nếu có giá trị True thì thực hiện <Lệnh/Khối
lệnh> rồi quay lại Bước 1;
- Nếu có giá trị False thì kết thúc;

4
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC WHILE
 Ví dụ 3.2-1:
Nguồn: Automate the Boring Stuff with Python

5
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC WHILE

Ví dụ 3.2-2:
Nguồn: Automate the Boring Stuff with Python

6
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC WHILE
 Ví dụ 3.2-3: in các số từ 1 đến 10, mỗi số nằm trên một
dòng. Yêu cầu sử dụng cấu trúc while.

1
i=1 2
while i<=10: 3
print(i) 4
i=i+1 5
6
7
8
9
10

7
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC WHILE
 Ví dụ 3.2-4: in các số chẵn trong dãy các số từ 1 đến 10, mỗi
số nằm trên một dòng. Yêu cầu sử dụng cấu trúc while.

num=1
while num<=11:
if num%2==0:
print(num)
num=num+1

2
4
6
8
10

8
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC WHILE
 Ví dụ 3.2-5: Nhập từ bàn phím một số nguyên n (n>=1); in
lên màn hình tổng của n số nguyên dương đầu tiên (các số
liên tục từ 1 đến n): S=1+2+3+ … + n
Yêu cầu sử dụng cấu trúc while.

n=int(input("Nhap so nguyen: (n>=1)"))


i=1
S=0
while i<=n:
S=S+i
i=i+1

print("Tong S=",S)

Nhap so nguyen: (n>=1)5


Tong S= 15

9
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC WHILE
 Ví dụ 3.2-6: in lên màn hình 6 dòng, có nội dung như sau.
Yêu cầu sử dụng cấu trúc while.

i=1
while i<=6: *
j=1 **
while j<=i: ***
print("*", end="") ****
j=j+1 *****
******
print("\n")
i=i+1

10
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC WHILE
 Ví dụ 3.2-7: Nhập từ bàn phím một số nguyên n. Nếu n<=0
thì thông báo lỗi và yêu cầu nhập lại, còn lại thì dừng. Yêu
cầu sử dụng cấu trúc while.
 Cách 1:
n=int(input("n="))
while n<=0:
print("Khong hop le!!!\nMoi nhap lai")
n=int(input("n="))

11
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC WHILE
 Ví dụ 3.2-8:
 Cách 2:
while True:
n=int(input("n="))
if n<=0:
print("Khong hop le!!!\nMoi nhap lai")
else:
break

12
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC WHILE – BÀI TẬP ÔN TẬP
Sử dụng cấu trúc while để thực hiện các yêu cầu sau:
Câu 3.1. Nhập từ bàn phím một số nguyên n, trong đó
n>=1 và n<=50. Nếu n không thuộc miền trên thì yêu
cầu nhập lại.

Câu 3.2. Nhập số nguyên n (1<=n<=50) từ bàn phím. In


lên màn hình bảng chữ số theo cấu trúc sau.
Ví dụ, nếu n=45, kết quả màn hình như sau:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30

41 42 43 44 45

13
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC WHILE – BÀI TẬP ÔN TẬP
Câu 3.3. In lên màn hình bảng cửu chương 9x9

14
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC WHILE – BÀI TẬP ÔN TẬP
Câu 3.4. In lên màn hình theo cấu trúc sau:

a. b.

15
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC FOR
 Cú pháp
for item in sequence:
<Process>

16
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC FOR
 Cấu trúc for với hàm range()
for item in range([<start>,] <end>[, <step>]):
<Process>

<start> : giá trị đầu, mặc định là 0


<end> : giá trị cận cuối
<step> bước nhảy, mặc định là 1

17
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC FOR
 Cấu trúc for với hàm range()
for item in range([<start>,] <end>[, <step>]):
<Process>
Ví dụ 3.2-9:
for i in range(5,10,2):
print(i)

Output: Bước nhảy: 2


5 Giá trị cuối là: 9 (cận dưới của 10)
7
9 Giá trị đầu là: 5

18
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC FOR
 Cấu trúc for với hàm range()
for item in range([<start>,] <end>[, <step>]):
<Process>
Ví dụ 3.2-10:
for i in range(5,-1,-1):
print(i)

Output: Bước nhảy: -1


5 Giá trị cuối là: 0 (cận dưới của -1)
4
3 Giá trị đầu là: 5
2
1
0

19
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC FOR
 Cấu trúc for với hàm range()
for item in range([<start>,] <end>[, <step>]):
<Process>
Ví dụ 3.2-11:
for i in range(5,10):
print(i)

Output: Bước nhảy: 1


5 Giá trị cuối là: 9 (cận dưới của 10)
6
7 Giá trị đầu là: 5
8
9

20
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC FOR
 Cấu trúc for với hàm range()
for item in range([<start>,] <end>[, <step>]):
<Process>
Ví dụ 3.2-12:
for i in range(6):
print(i)

Output: Bước nhảy: 1


0 Giá trị cuối là: 5 (cận dưới của 6)
1
2 Giá trị đầu là: 0
3
4
5

21
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC FOR
 Cấu trúc for với hàm range()
Ví dụ 3.2-13:

22
Nguồn: Automate the Boring Stuff with Python
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC FOR
 Cấu trúc for với hàm range()
 Ví dụ 3.2-14:

 Ví dụ 3.2-15:

 Ví dụ 3.2-16:

23
Nguồn: Automate the Boring Stuff with Python
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC FOR
 Ví dụ 3.2-17: in các số từ 1 đến 10, mỗi số nằm trên một
dòng. Yêu cầu sử dụng cấu trúc for.
 Thuật toán:
- Với mỗi giá trị của i= [1..10], thực hiện:
• In i lên màn hình
• Xuống dòng
#Cau truc for 1
for i in range(1,11): 2
print(i) 3
4
5
#Cau truc while
6
i=1 7
while i<=10: 8
print(i) 9
i=i+1 10

24
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC FOR
 Ví dụ 3.2-18: in các số chẵn trong dãy các số từ 1 đến 10,
mỗi số nằm trên một dòng. Yêu cầu sử dụng cấu trúc for.
 Thuật toán:
- Với mỗi giá trị của i= [1..10], thực hiện:
• Nếu i%2=0 thì: In i lên màn hình
• Xuống dòng
#Cau truc for 2
for i in range(1,11): 4
if i%2==0:
6
print(i)
8
#Cau truc while 10
i=1
while i<=10:
if i%2==0:
print(i)
i=i+1

25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC FOR
 Ví dụ 3.2-19: Nhập từ bàn phím một số nguyên n (n>=1); in
lên màn hình tổng của n số nguyên dương đầu tiên (các số
liên tục từ 1 đến n): S=1+2+3+ … + n. Yêu cầu sử dụng cấu
trúc for.

 Thuật toán:
- Nhập n
- S=0
- Với mỗi giá trị của i= [1..n], thực hiện:
• S=S+i
- In S lên màn hình.

26
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC FOR
 Ví dụ 3.2-20: Nhập từ bàn phím một số nguyên n (n>=1); in
lên màn hình tổng của n số nguyên dương đầu tiên (các số
liên tục từ 1 đến n): S=1+2+3+ … + n. Yêu cầu sử dụng cấu
trúc for.

n=int(input("Nhap so nguyen: (n>=1) "))


S=0
for i in range(1,n+1):
S=S+i

print(“Tong=”,S)

Nhap so nguyen: (n>=1) 5


Tong= 15

27
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC FOR
 Ví dụ 3.2-21: in lên màn hình 6 dòng, có nội dung như sau.
Yêu cầu sử dụng cấu trúc for.
 Thuật toán:
- Với mỗi giá trị của i = [1..6], thực hiện:
• Với mỗi giá trị của j = [1..i], thực hiện:
In lên màn hình dấu “*”
• Xuống dòng

*
**
***
****
*****
******

28
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC FOR
 Ví dụ 3.2-22: in lên màn hình 6 dòng, có nội dung như sau.
Yêu cầu sử dụng cấu trúc for.

for i in range(1,7):
for j in range(1, i+1):
print("* ", end="")

print("")

*
**
***
****
*****
******

29
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC FOR – BÀI TẬP ÔN TẬP

Giải lại các bài tập: Câu 2, Câu 3, Câu 4 ở slide


13-15 (Chương 3-Part2), bằng cấu trúc for.

30
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
SO SÁNH GIỮA CÁC CẤU TRÚC LẶP
Đặc trưng while for
Được dùng để giải các bài toán có
tính chất lặp X X

Biết trước số lần lặp lại? Không Có

31
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
LỆNH NHẢY BREAK, CONTINUES

Ví dụ 3.2-3:

32
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÂU LỆNH NHẢY BREAK, CONTINUE
 Lệnh break
 Được sử dụng để thoát khỏi cấu trúc lặp gần nhất

while <Điều kiện lặp>:


...
if <Biểu thức logic>:
break;
... Thoát khỏi vòng lặp

33
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÂU LỆNH NHẢY BREAK, CONTINUE
 Lệnh break

for item in sequence:


...
if <Biểu thức logic>:
break;
... Thoát khỏi vòng lặp

34
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÂU LỆNH NHẢY BREAK, CONTINUE
 Lệnh continue
 Được sử dụng để bỏ qua các lệnh còn lại của vòng
lặp và bắt đầu chu trình lặp tiếp theo.

while <Điều kiện lặp>:


... Bắt đầu chu kỳ lặp mới
if <Biểu thức logic>:
continue
...

35
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÂU LỆNH NHẢY BREAK, CONTINUE
 Lệnh continue
 Được sử dụng để bỏ qua các lệnh còn lại của vòng
lặp và bắt đầu chu trình lặp tiếp theo.

for item in sequence:

...
if <Biểu thức logic>:
continue
...
Bắt đầu chu kỳ lặp mới

36
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÂU LỆNH NHẢY BREAK, CONTINUE
 Ví dụ 1: In lên màn hình một dãy các số chẵn liên tục từ 1
đến 10.

for i in range(1,11):
if i%2!=0: continue
print(i)

2
4
5
6
8
10

37
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÂU LỆNH NHẢY BREAK, CONTINUE
 Ví dụ 2: Nhập từ bàn phím một số nguyên n và n số nguyên;
Việc nhập sẽ dừng lại cho đến khi đủ n số nguyên hoặc số 0
được nhập vào. In lên màn hình tổng của các số nguyên
dương đã được nhập.
i=n=x=S=0
n=int(input("Nhap n="))

for i in range(1,n+1):
print("So thu ",i,": ",sep="",end="")
x=int(input())
Nhap n=10
if x<0:
So thu 1: 1
continue
So thu 2: 2
elif x==0:
So thu 3: 3
break
So thu 4: -4
else:
So thu 5: 5
S=S+x
So thu 6: 0
print("S=",S,sep="")
S=11

38
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP ÔN TẬP - CHƯƠNG 3
Bài 1. Viết chương trình nhập từ bàn phím một số
nguyên n (0<= n <=100).
In lên màn hình n!

Ví dụ:
n=5
5!=120

39
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP ÔN TẬP - CHƯƠNG 3
Bài 2. Viết chương trình nhập từ bàn phím một số
nguyên n (1<= n <=100). Cho biết n có phải là số
nguyên tố hay không. Biết rằng, n là số nguyên tố nếu
n chỉ chia hết cho 1 và chính nó.

Ví dụ 1:
n=10
10 khong la SNT

Ví dụ 2:

n=7
7 la SNT

40
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP ÔN TẬP - CHƯƠNG 3
Bài 3. Viết chương trình nhập từ bàn phím một số
nguyên dương n (n>=0). Cho biết n có bao nhiêu chữ
số. (yêu cầu sử dụng cấu trúc lặp)

Ví dụ 1:

n=123
123 co 3 chu so

Ví dụ 2:

n=4500
4500 co 4 chu so

41
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP ÔN TẬP - CHƯƠNG 3
Bài 4.
- Nhập từ bàn phím hai số thực: a và b;
- Nhập từ bàn phím một toán tử (+, -, *, /);
- In lên màn hình kết quả của biểu thức tương ứng;
- Chương trình sẽ lặp lại việc tính trên cho đến khi
bấm phím T hoặc t thì kết thúc.
a=2.5 a=2.5
Ví dụ: b=10 b=10
Toan tu:+ Toan tu:+
2.5+10=12.5 2.5+10=12.5
Tiep tuc:t Tiep tuc:x
a=2.5
b=10
Toan tu:*
2.5*10=25
Tiep tuc:t

42
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI GIẢNG
CƠ SỞ LẬP TRÌNH
CHƯƠNG 4. HÀM

TRẦN THỊ THU THẢO


BỘ MÔN TIN HỌC QUẢN LÝ
TRƯỜNG ĐẠI HỌC KINH TẾ, ĐẠI HỌC ĐÀ NẴNG
THAOTRAN@DUE.EDU.VN
NỘI DUNG
 Khái niệm về Hàm
 Khai báo Hàm
 Tham số của Hàm
 Nhận giá trị từ Hàm
 Lời gọi Hàm
 Phạm vi của biến
 Hàm rỗng
 Xử lý ngoại lệ

2
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
KHÁI NIỆM VỀ HÀM
 Ví dụ 4.1:
Tính tổng của n số nguyên dương đầu tiên:
- Nhập từ bàn phím một số nguyên n
- Tính tổng S của n số nguyên đầu tiên
S=1+2+…+n
- In lên màn hình tổng S

3
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
KHÁI NIỆM VỀ HÀM
 Lời giải không sử dụng hàm

Nhap(n)

Tinh(n)

InKQ(S)

4
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
KHÁI NIỆM VỀ HÀM
 Phân tích bài toán để chuyển vào hàm
 Hàm Nhap(n):
- Input: không có
- Output: số nguyên n
- Process: cho phép người dùng nhập từ bàn phím
một số nguyên và lưu vào biến n;
 Hàm Tinh(n):
- Input: số nguyên n
- Output: trả kết quả về qua tên hàm
- Process: thực hiện tính tổng của n số nguyên
dương đầu tiên;
 Hàm InKQ(S):
- Input: số nguyên S
- Output: kết quả được in lên màn hình
- Process: In lên màn hình giá trị của biến S;

5
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
KHÁI NIỆM VỀ HÀM
 Chương trình hoàn chỉnh sử dụng hàm

Trong đó:
 Hàm nhập dữ liệu

 Hàm tính tổng
 Hàm in kết quả
 Lời gọi hàm

6
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
KHÁI NIỆM VỀ HÀM
 Ví dụ 4.2:
Howdy!
Howdy!!!
Hello there.
Howdy!
Howdy!!!
Hello there.
Howdy!
Howdy!!!
Hello there.

Trong đó:
 Phần Header
 Phần thân
 Lời gọi hàm

7
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 61
KHÁI NIỆM VỀ HÀM
 Ngoài các hàm chuẩn (do Python định nghĩa
sẵn), hệ thống còn cho phép người dùng tự
thiết kế ra những hàm theo mục đích riêng;
 Hàm chia các bài toán lớn thành các công
việc nhỏ hơn, giúp thực hiện những công
việc lặp lại nào đó một cách nhanh chóng mà
không phải viết lại đoạn chương trình;
 Hàm phải được định nghĩa trước khi sử
dụng;

8
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
KHÁI NIỆM VỀ HÀM
 Ví dụ 4.3: hàm math.sqrt(n), thực hiện tính căn
bậc hai của số nguyên n. Trong đó n là tham số của
hàm.
Nhiệm vụ của lập trình viên là
thiết kế chức năng cho hộp đen
𝑛𝑛
n=25 return  5
Input Output
Process

Hàm được ví như một cái hộp đen (Black Box) đối với người sử dụng:
- Có hoặc không có dữ liệu đầu vào (input)
- Thực hiện (process) một yêu cầu cụ thể gì đó khi được gọi (Call)
- Kết quả xử lý được trả về gọi là đầu ra (output)

9
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
KHAI BÁO HÀM
 Cú pháp khai báo hàm:
def <Tên_Hàm>([<DS/Tham số>]):
Lệnh/Khối lệnh

 Trong đó:
- def: là từ khóa bắt buộc khi khai báo hàm
- <Tên_Hàm>: do người lập trình tự đặt, theo quy
tắc đặt tên cho các đối tượng
- <DS/Tham số>: các tham số (nếu có)

10
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
KHAI BÁO HÀM
 Ví dụ 4.4

Trong đó:
 Định nghĩa tên hàm, hàm có tên hello, tham số name
 Phần thân của hàm
 Lời gọi hàm, với tham số được gán giá trị ‘Alice’

11
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 63
THAM SỐ
 Khái niệm
 Tham số (Parameter/ Argument - Đối số), là công cụ của
hàm, cho phép đưa dữ liệu từ ngoài vào trong hàm;
 Có loại hàm không có tham số và loại hàm có tham số;

 Có 2 loại tham số
 Tham số vị trí
- Là sự ánh xạ tương ứng giữa vị trí khai báo tham số và
lời gọi hàm;
 Tham số từ khóa
- Sử dụng tên tham số để truyền giá trị cho hàm;

SV tham khảo thêm: https://www.geeksforgeeks.org/default-arguments-in-python/

12
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
THAM SỐ – HÀM KHÔNG CÓ THAM SỐ
 Ví dụ 4.5a: Hàm KHÔNG có tham số
def hello():
print('Hello Alice')

hello() Hello Alice

 Ví dụ 4.5b: Hàm KHÔNG có tham số


def show_number():
for i in range(1,5): 1
print(i) 2
3
show_number() 4

13
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
THAM SỐ – HÀM CÓ THAM SỐ
 Ví dụ 4.6a: Hàm CÓ tham số

def hello(name):
print('Hello ' + name)

hello('Alice') Hello Alice


hello('Bod') Hello Bod

14
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
THAM SỐ – HÀM CÓ THAM SỐ
 Ví dụ 4.6b: Hàm CÓ tham số

def show_number(n):
for i in range(1,n+1): 1
print(i) 2
3
show_number(4) 4

show_number(10)

15
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
THAM SỐ – HÀM CÓ THAM SỐ
 Ví dụ 4.6c: Hàm CÓ tham số
def show_number(m,n):
for i in range(m,n+1): 1
print(i) 2
3
show_number(1,4) 4

show_number(5,10)

16
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
THAM SỐ - GIÁ TRỊ MẶC ĐỊNH CỦA THAM SỐ
 Giá trị mặc định của tham số
 Cú pháp:
def <Tên_Hàm>(<para1>=<value1>, <para2>=<value2>,…):
Lệnh/Khối lệnh

 Ví dụ 4.7a
def show_number(n=10):
for i in range(1,n+1):
print(i)

 show_number(5)  n=5
 show_number()  n=10

SV tham khảo thêm: https://www.geeksforgeeks.org/default-arguments-in-python/

17
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
THAM SỐ - GIÁ TRỊ MẶC ĐỊNH CỦA THAM SỐ
 Giá trị mặc định của tham số
 Ví dụ 4.7b:
def show_number(m=1,n=10):
for i in range(m,n+1):
print(i)

 show_number(3,7)  m=3, n=7


 show_number(3,)  m=3, n=10
 show_number()  m=1, n=10

SV tham khảo thêm: https://www.geeksforgeeks.org/default-arguments-in-python/

18
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
THAM SỐ - GIÁ TRỊ NONE
 Giá trị None
 None là một giá trị trong Python thuộc kiểu
NoneType;
 Biểu diễn giá-trị-không-có-giá-trị (value-without-
a-value);
 Trong các ngôn ngữ lập trình khác được gọi là null,
nil hoặc undefined;
 None thường được sử dụng để kết thúc hàm(với
cú pháp return None) hoặc để khai báo giá trị mặc
định cho tham số trong hàm;

19
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 65
THAM SỐ - GIÁ TRỊ NONE
 Nếu đặt giá trị None cho tham số, thì nó trở thành
tham số không bắt buộc:
 Ví dụ 4.8a
def PhepCong(x,y=None):
if y==None:
return x
else:
return x+y

kq1=PhepCong(5)
kq2=PhepCong(5,2)
print(kq1, kq2) 57

20
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
THAM SỐ - GIÁ TRỊ NONE
 Nếu tất cả các tham số được đặt giá trị None, thì
có thể sử dụng tên tham số để truyền giá trị:
 Ví dụ 4.8b
def PhepCong(x=None,y=None):
return x+y

kq1=PhepCong(5,2)
kq2=PhepCong(x=5,y=2)
kq3=PhepCong(y=2,x=5)
print(kq1, kq2, kq3) 777

21
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
THAM SỐ
 Phân biệt giữa 2 loại tham số
Tham số vị trí Tham số từ khóa
Khai báo hàm: Khai báo hàm:
def PhepCong(x,y): def PhepCong(x=None,y=None):
return x+y return x+y

Gọi hàm: Gọi hàm:


kq=PhepCong(5,2) kq=PhepCong(5,2)

Hoặc:
kq=PhepCong(x=5,y=2)

Hoặc:
kq=PhepCong(y=2,x=5)

22
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
NHẬN GIÁ TRỊ TỪ HÀM – TỪ KHÓA RETURN
 Từ khóa return sẽ kết thúc và trả giá trị về cho hàm
 Ví dụ 4.9:

def Nhap():
n=int(input('Nhap mot so nguyen='))
return n

n=Nhap()
print('So nguyen da nhap=',n)

Nhap mot so nguyen=5


So nguyen da nhap= 5

23
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
NHẬN GIÁ TRỊ TỪ HÀM – TỪ KHÓA RETURN
 Từ khóa return có thể trả về 1 hoặc nhiều giá trị
 Ví dụ 4.10:

def Nhap():
x=int(input('x='))
y=int(input('y='))
return x, y

a, b=Nhap()
print(‘Hai so nguyen da nhap=',a,b)

x=5
y=10
Hai so nguyen da nhap= 5 10

24
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
NHẬN GIÁ TRỊ TỪ HÀM – TỪ KHÓA RETURN
 Từ khóa return có thể trả về giá trị của một biểu thức
 Ví dụ 4.11:

def Tong_HieuHaiSo(x,y):
return x+y,x-y

x=10
y=7
a,b=Tong_HieuHaiSo(x,y)
print('Tong va hieu=',a,b)

Tong va hieu= 17 3

25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
NHẬN GIÁ TRỊ TỪ HÀM – TỪ KHÓA RETURN
 Có thể sử dụng nhiều từ khóa return trong hàm
 Ví dụ 4.12a:

26
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 64
NHẬN GIÁ TRỊ TỪ HÀM
 Ví dụ 4.12b: một cách viết tối ưu hóa code

27
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 65
NHẬN GIÁ TRỊ TỪ HÀM
 Có thể sử dụng cú pháp sau để kết thúc chu kỳ
vòng lặp hoặc kết thúc hoạt động của hàm nhưng
không trả về giá trị:

return None

28
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
NHẬN GIÁ TRỊ TỪ HÀM
 Giá trị None
 Ví dụ 4.13:

def PhepChia(x,y):
if y==0:
return None
else:
return x/y

kq1=PhepChia(5,0)
kq2=PhepChia(5,2)
print(kq1, kq2) None 2.5

29
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
LỜI GỌI HÀM
 Ý nghĩa:
 Khi cần sử dụng một hàm đã định nghĩa, ta cần
thực hiện lời gọi hàm;
 Hàm được gọi thông qua tên hàm, theo sau là
danh sách tham số (nếu có);
 Sử dụng cú pháp hai ngôi (có phép gán =) khi hàm
trả kết quả qua tên hàm;
 Một hàm có thể được gọi trong một hàm khác (gọi
là phép đệ quy);

30
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP
 Sử dụng hàm để thực hiện các yêu cầu sau:
 Nhập từ bàn phím một số nguyên n;
- Hàm Nhap()
 Nhập liên tục từ bàn phím n số nguyên;
 Đếm và in lên màn hình có bao nhiêu chữ số chẵn
đã được nhập vào.
- Hàm NhapVaDem(n) Chương trình mẫu:
n=7
- Hàm InKQ(kq) Nhap 7 so nguyen:
6
5
8
7
0
2
3
So chu so chan la: 3

31
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
PHẠM VI CỦA BIẾN
 Các loại biến
 Biến cục bộ
- Là biến được khai báo trong một HÀM và chỉ ảnh
hưởng trong phạm vi của HÀM đó;
- Khi ra khỏi HÀM, biến sẽ không còn giá trị sử dụng;

 Biến toàn cục


- Biến toàn cục được khai báo ngoài tất cả các hàm;
- Biến toàn cục có giá trị sử dụng trong toàn bộ chương
trình;

32
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
PHẠM VI CỦA BIẾN
Phạm vi TOÀN CỤC

def NhapBanKinh():
x=int(input("Ban kinh="))
return x
Phạm vi CỤC BỘ

def TinhChuVi(y):
PI = 3.14 Vị trí khai báo BIẾN CỤC BỘ
ChuVi=y*PI trong chương trình con
return ChuVi
Vị trí khai báo BIẾN TOÀN CỤC
BanKinh=NhapBanKinh()
ChuVi=TinhChuVi(BanKinh)
print(ChuVi)

33
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
PHẠM VI CỦA BIẾN
 Cú pháp global
 Sử dụng từ khóa global để khai báo 1 biến cục bộ
thành toàn cục
 Ví dụ 4.14a
def Nhap():
x=int(input("x=")) #x: Bien cuc bo
global y #Khai bao: y la bien TOAN CUC
y=5
return x+y

kq=Nhap() #kq: Bien toan cuc


print(“y=“,y)
print("kq=",kq)
x=1
y=5
kq= 6

34
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 70
PHẠM VI CỦA BIẾN
 Cú pháp global
 Ví dụ 4.14b

35
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 70
HÀM RỖNG – TỪ KHÓA PASS
 Có thể định nghĩa một hàm rỗng với từ khóa pass
Sai
def myfunc1():

myfunc1() IndentationError: expected an indented block

Đúng
def myfunc2():
pass

myfunc2()

36
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
XỬ LÝ NGOẠI LỆ
 Khi thực hiện chương trình, người lập trình có thể chủ động
kiểm soát lỗi và bỏ qua khi phát sinh;
 Ví dụ 4.15

37
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
XỬ LÝ NGOẠI LỆ
 Cú pháp:

38
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: https://realpython.com/python-exceptions/
XỬ LÝ NGOẠI LỆ
 Ví dụ 4.16:
def spam(divideby):
try:
result = 42 / divideby
except:
print("Sorry ! You are dividing by zero ")
else:
print("Yeah ! Your answer is :", result)

spam(1)
spam(0)

39
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: https://realpython.com/python-exceptions/
BÀI GIẢNG
CƠ SỞ LẬP TRÌNH
CHƯƠNG 5.

DỮ LIỆU KIỂU LIST

TRẦN THỊ THU THẢO


BỘ MÔN TIN HỌC QUẢN LÝ
TRƯỜNG ĐẠI HỌC KINH TẾ, ĐẠI HỌC ĐÀ NẴNG
THAOTRAN@DUE.EDU.VN
NỘI DUNG
 Cấu trúc dữ liệu kiểu danh sách – List
 Khởi tạo List
 Truy xuất các phần tử trong List
 Cập nhật giá trị cho phần tử trong List
 Thao tác trên List
 Các phương thức của List
 Sao chép List

2
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẤU TRÚC DỮ LIỆU KIỂU LIST - DANH SÁCH
 List là một giá trị có thể chứa nhiều kiểu giá
trị trong một tập hợp có thứ tự.
 Một biến kiểu List có thể lưu trữ được đồng
thời nhiều giá trị (có thể khác nhau)
spam = ["cat", "bat", "rat", "elephant"]
Phần tử
Mỗi phần tử cách nhau bởi dấu ,

Đặt trong cặp dấu [ ]

Tên biến

3
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 80
CẤU TRÚC DỮ LIỆU KIỂU LIST - DANH SÁCH
 Ví dụ

  biến spam được gán cho một giá trị kiểu List, trong list
chứa nhiều giá trị khác nhau;
 List rỗng là list không có phần tử nào
 Ví dụ: spam = [ ]

4
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 80
KHỞI TẠO LIST
 Sử dụng phép gán
 Ví dụ:
numbers = [1, 2, 3, 4, 5]

 Sử dụng cấu trúc for


 Ví dụ:
numbers = [item for item in range(1,6)]
print(numbers)

[1, 2, 3, 4, 5]

5
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
KHỞI TẠO LIST
 Sử dụng cấu trúc for
 Ví dụ:
matrix = [ [x,x+1,x+2] for x in range(1,10,3) ]
print(matrix)

[ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]

6
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
KHỞI TẠO LIST
 Phương pháp constructor List
 Ví dụ:
char=list("Python")
print(char)

['P', 'y', 't', 'h', 'o', 'n']

7
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
TRUY XUẤT CÁC PHẦN TỬ TRONG LIST
 Số chỉ mục (index):
 Có thể truy xuất đến các phần tử trong List thông
qua số chỉ mục (index);
 Index bắt đầu từ số 0 (zero), phần tử thứ n trong
List sẽ có index là (n-1);
 Sử dụng tên biến và số index để truy xuất;

8
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
TRUY XUẤT CÁC PHẦN TỬ TRONG LIST
 Số chỉ mục (index):
 Ví dụ:

9
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 81
TRUY XUẤT CÁC PHẦN TỬ TRONG LIST
 Số chỉ mục (index):
 Ví dụ: số index vượt quá giới hạn số phần tử

10
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 81
TRUY XUẤT CÁC PHẦN TỬ TRONG LIST
 Số chỉ mục (index):
 Ví dụ: số index phải là số nguyên

11
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 81
TRUY XUẤT CÁC PHẦN TỬ TRONG LIST
 Số chỉ mục (index):
 Ví dụ: List trong List

12
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 81
TRUY XUẤT CÁC PHẦN TỬ TRONG LIST
 Số chỉ mục (index):
 Ví dụ: List trong List

(1) ???

(2) ???

(3) ???

(4) ???

(5) ???

(6) ???

13
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
TRUY XUẤT CÁC PHẦN TỬ TRONG LIST
 Số chỉ mục âm (Negative indexes):
 Index=-1 sẽ tham chiếu đến phần tử cuối trong
List, Index=-2 là phần tử áp cuối, …

14
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 82
TRUY XUẤT CÁC PHẦN TỬ TRONG LIST
 Số chỉ mục âm (Negative indexes):
 Ví dụ:

(1) ???

(2) ???

(3) ???

15
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
TRUY XUẤT CÁC PHẦN TỬ TRONG LIST
 Truy xuất tập con trong List
 Slice: khung trượt (cửa sổ trượt) cho phép truy
xuất được đồng thời nhiều phần tử trong list

Phần tử cuối trong tập con có index=3

Phần tử đầu trong tập con có index=1

16
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 82
TRUY XUẤT CÁC PHẦN TỬ TRONG LIST
 Truy xuất tập con trong List
 Ví dụ:

Tập con từ index=0  index=3

Tập con từ index=1  index=2

Tập con từ index=0  phần tử áp cuối

17
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 82
TRUY XUẤT CÁC PHẦN TỬ TRONG LIST
 Truy xuất tập con trong List
 Ví dụ:

Tập con từ index=0  index=1

Tập con từ index=1  cuối List spam

Tập con là toàn bộ List spam

18
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 82
TRUY XUẤT CÁC PHẦN TỬ TRONG LIST
 Truy xuất tập con trong List
 Ví dụ:

(1) ???

(2) ???
(3)?

(4)?

19
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CẬP NHẬT GIÁ TRỊ CHO PHẦN TỬ TRONG LIST
 Sử dụng phép gán và số Index

20
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 82
THAO TÁC TRÊN LIST
 Hàm len()
 Trả về chiều dài của List

21
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
THAO TÁC TRÊN LIST
 Hàm max()
 Trả về phần tử có giá trị lớn nhất trong List
 Hàm min()
 Trả về phần tử có giá trị bé nhất trong List

Ví dụ:
numbers = [5, 3, 8, 2, 9]
print(max(numbers))
print(min(numbers))

9
2

22
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
THAO TÁC TRÊN LIST
 Toán tử +
numbers = [1, 2]
print(numbers)

numbers = numbers + [3, 4]


print(numbers)

numbers = numbers + numbers


print(numbers)

[1, 2]
[1, 2, 3, 4]
[1, 2, 3, 4, 1, 2, 3, 4]

23
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
THAO TÁC TRÊN LIST
 Toán tử *
numbers = [1, 2]
print(numbers)

numbers = numbers*2
print(numbers)

numbers = numbers + numbers


print(numbers)

[1, 2]
[1, 2, 1, 2]
[1, 2, 1, 2, 1, 2, 1, 2]

24
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
THAO TÁC TRÊN LIST
 Toán tử in và not
 Toán tử in và not giúp xác định một giá trị có tồn
tại trong một List hay không;
 Biểu thức trả về True (có) hoặc False (không);

25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 87
THAO TÁC TRÊN LIST
 Toán tử in và not
 Ví dụ: Nhập vào tên của một thú cưng và kiểm tra
tên đó có trong danh sách hay không
myPets = ['Zophie', 'Pooka', 'Fat-tail']
print('Enter a pet name:')
name = input()
if name not in myPets:
print('I do not have a pet named ' + name)
else:
print(name + ' is my pet.')

Enter a pet name: Enter a pet name:


Pooka Gau iu
Pooka is my pet. I do not have a pet named Gau iu

26
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 87
THAO TÁC TRÊN LIST
 Xóa phần tử trong List với hàm del()
 Ví dụ:
spam=[1,2,3,4,5]
del(spam[2])
print(spam)

del(spam[1]) [1, 2, 4, 5]
print(spam) [1, 4, 5]

27
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
THAO TÁC TRÊN LIST
 Xóa phần tử trong List với hàm del()
 Ví dụ:
students=["An","Binh","Lan","Thanh","Minh"]
del(students[2])
print(students)

del(students[1])
del(students[2]) ??? (1)
print(students) ??? (2)

28
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
THAO TÁC TRÊN LIST
 Bổ sung phần tử cho List
 Ví dụ:
catNames = [ ]
while True: Khởi tạo List rỗng
print('Enter the name of cat ' + str(len(catNames) + 1)
+ ' (Or enter nothing to stop.):')
name = input()
if name == '': Biến name đặt trong [ ]
break
catNames = catNames + [name] # list concatenation

print('The cat names are:')


Phương pháp thêm phần tử
for name in catNames: bằng toán tử cộng ( + )
print(' ' + name)

29
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 85
THAO TÁC TRÊN LIST
 Duyệt các phần tử trong List
 Ví dụ:
students=["An","Binh","Lan","Thanh","Minh"]
#Cach 1
for x in students:
print(x ,end=", ")

#Cach 2
for x in range(len(students)):
print(students[x] ,end=", ")

An, Binh, Lan, Thanh, Minh,

30
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 85
CÁC PHƯƠNG THỨC CỦA LIST
 Phương thức (method)
 Một phương thức có chức năng như một hàm được định
nghĩa sẵn;
 Cho phép xử lý dữ liệu trên đối tượng tương ứng;
 Mỗi kiểu dữ liệu sẽ có tập phương thức riêng;

31
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC PHƯƠNG THỨC CỦA LIST
 index() method
 Trả về index của một phần tử được tìm thấy
trong List;
 Nếu không tìm thấy phần tử trong danh sách sẽ
báo lỗi ValueError;
 Ví dụ:
myPets = ['Zophie', 'Pooka', 'Fat-tail']
namePet="Pooka"
if namePet in myPets:
print("Index is", myPets.index(namePet))
else:
print("Not Found!")
Index is 1

32
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC PHƯƠNG THỨC CỦA LIST
 append(), insert() method
 append(x) thêm phần tử x vào cuối List;

 insert(i,x) chèn x vào vị trí i hiện có trong List;

33
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 89
CÁC PHƯƠNG THỨC CỦA LIST
 append(), insert() method
names = [1, 2, 3, 4, 5]
names.append(6)
print(names)
names.insert(0,7)
print(names)
names.insert(-1,8)
print(names)

??? (1)
??? (2)
??? (3)

34
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC PHƯƠNG THỨC CỦA LIST
 remove() method
 remove(x): xóa phần tử x đầu tiên tìm thấy trong
List;
 Ví dụ:

 Ví dụ:

35
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 90
CÁC PHƯƠNG THỨC CỦA LIST
 remove() method
 Phân biệt giữa hàm del() và phương thức remove()
- Hàm del() xóa một phần tử khi biết index
- Hàm remove() xóa một phần tử khi biết giá trị

 Ví dụ: xóa phần tử thứ 2 trong danh sách spam


spam = ['cat', 'bat', 'rat', 'elephant']
#Cach 1
del(spam[1])

#Cach 2
spam.remove('bat')

['cat', 'rat', 'elephant']

36
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC PHƯƠNG THỨC CỦA LIST
 sort() method
 Cho phép sắp xếp các phần tử trong List có thứ tự;
 Ví dụ:

37
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 91
CÁC PHƯƠNG THỨC CỦA LIST
 sort() method
 Mặc định sắp xếp tăng dần, thêm tham số
reverse=True để sắp xếp giảm dần;
 Ví dụ:
numbers = [1, 2, 3, 4, 5]

numbers.sort() # or: numbers.sort(reverse=False)


print(numbers)

numbers.sort(reverse=True)
print(numbers)
[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]

38
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC PHƯƠNG THỨC CỦA LIST
 sort() method
 Lưu ý:
- Hàm sort() chỉ thực hiện được khi các phần tử có cùng
kiểu dữ liệu;

- Dữ liệu kiểu chuỗi sẽ được sắp xếp theo thứ tự alphabet

39
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 91
CÁC PHƯƠNG THỨC CỦA LIST
 sort() method
 Lưu ý:
- Hàm sort() chỉ thực hiện được khi các phần tử có cùng
kiểu dữ liệu;

40
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 92
CÁC PHƯƠNG THỨC CỦA LIST
 reverse() method
 Thực hiện đảo ngược thứ tự các phần tử trong List
 Ví dụ:
numbers = [1, 2, 3, 4, 5]
print(numbers)

numbers.reverse()
print(numbers)
[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]

41
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC PHƯƠNG THỨC CỦA LIST
 clear() method
 Thực hiện xóa tất cả các phần tử trong List
 Ví dụ:
numbers = [1, 2, 3, 4, 5]
print(numbers)

numbers.clear()
print(numbers)

[1, 2, 3, 4, 5]
[]

42
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC PHƯƠNG THỨC CỦA LIST
 count(x) method
 Thực hiện đếm số phần tử x xuất hiện trong List
 Ví dụ:
numbers = [1, 2, 3, 2, 5]
print(numbers.count(2))
print(numbers.count(5))
print(numbers.count(10))

2
1
0

43
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC PHƯƠNG THỨC CỦA LIST
 copy() method
 Thực hiện tạo ra một bản sao mới của List
 Ví dụ:
numbers1 = [1, 2, 3, 4, 5]
numbers2=numbers1.copy()
print(numbers1)
print(numbers2)
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

44
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC PHƯƠNG THỨC CỦA LIST
 copy() method
names = [“An”, ”Nam”, “Binh”, “Ngoc”]
x=names.copy()
print(x)
print(x.count(“Nam”))

??? (1)
??? (2)

45
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC PHƯƠNG THỨC CỦA LIST
 pop(i) method
 Thực hiện xóa và lấy ra giá trị của phần tử có số chỉ
mục i trong List.
 Nếu tham số i để trống thì mặc định là lấy phần tử
cuối trong List.
 Ví dụ:
numbers = [1, 2, 3, 4, 5] numbers = [1, 2, 3, 4, 5]
x=numbers.pop(2) x=numbers.pop()
print(numbers) print(numbers)
print(x) print(x)
[1, 2, 4, 5] [1, 2, 3, 4]
3 5

46
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC PHƯƠNG THỨC CỦA LIST
 pop(i) method
names = [“An”, ”Nam”, “Binh”, “Ngoc”]
x1=names.pop(0)
x2=names.pop(-1)
print(x1)
print(x2)
print(names)

??? (1)
??? (2)
??? (3)

47
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
CÁC PHƯƠNG THỨC CỦA LIST
 pop(i) method
names = [“An”, ”Nam”, “Binh”, “Ngoc”]
names.remove(“An”)
del(names[0])
x=names.pop(-2)
print(x)
print(names)

??? (1)
??? (2)

48
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
SAO CHÉP LIST
 Phép tham chiếu (References)
 Ví dụ: phép gán trong biến đơn

 Ví dụ: phép gán trong list

49
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 91
SAO CHÉP LIST
 Phép tham chiếu (References)

50
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 99
SAO CHÉP LIST
 Phép tham chiếu (References)

51
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 99
SAO CHÉP LIST
 Phép tham biến (variables refer)
 Không sử dụng phép gán để tạo bản sao cho List
 Sử dụng hàm copy trong thư viện copy để tạo bản sao List
 Ví dụ:

52
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 100
SAO CHÉP LIST
 Phép tham biến (variables refer)

53
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 101
SAO CHÉP LIST
 Phép tham biến (variables refer)
 Ví dụ:
import copy
numbers1 = [1, 2, 3, 4, 5]
numbers2 = copy.copy(numbers1)
print(numbers2)

numbers3 = numbers1
numbers3[2] = 6
print(numbers3)

??? (1)
??? (2)

54
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP ÔN TẬP
Xây dựng hàm, thực hiện các yêu cầu sau:
Lưu ý: không sử dụng các hàm có chức năng tương tự có sẵn
trong python

Bài 1. Hàm add(L, x, k) thêm phần tử x vào List L tại vị trí k,


nếu k lớn hơn số phần tử của L thì thêm x vào cuối L;
Bài 2. Hàm search(L, x) tìm x trong List L, nếu tìm thấy thì trả
về index của x trong L, còn lại trả về None;
Bài 3. Hàm delete(L, x) xóa tất cả phần tử có giá trị bằng x
trong List L;
Bài 4. Hàm count(L) trả về số lượng phần tử trong List L;
(tương tự hàm len())
Bài 5. Hàm update(L, x, y) tìm x trong List L và thay thế bằng y;

55
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP ÔN TẬP
Tạo danh sách quản lý văn phòng phẩm:
VPP=[‘but bi’, ‘but chi’, ‘vo’, ‘sach GK’, ‘but chi’, ‘vo’]
Tạo menu công việc:
Nhập số công việc cần làm?
1. Thêm danh sách sản phẩm
2. Tìm kiếm sản phẩm
3. Xóa tất cả các sản phẩm cần xóa
4. Đếm số lượng sản phẩm
5. Cập nhật sản phẩm
0. Exit

56
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP ÔN TẬP
 1.
Nhập tên sản phẩm cần thêm: ghim
Nhập vị trí sản phẩm: 3
Danh sách sản phẩm là:
VPP=[but bi’, ‘but chi’, ‘vo’, ‘ghim’, ‘sach GK’,
‘but chi’, ‘vo’]
Nhập tên sản phẩm cần thêm: ghim
Nhập vị trí sản phẩm: 20
Danh sách sản phẩm là:
VPP=[but bi’, ‘but chi’, ‘vo’, ‘ghim’, ‘sach GK’,
‘but chi’, ‘vo’,’ghim’]

57
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP ÔN TẬP
 2.
Nhập tên sản phẩm cần tìm: ghim
Sản phẩm ghim có trong danh sách ở vị trí 3, 7

Nhập tên sản phẩm cần tìm: cặp


Sản phẩm cặp không có trong danh sách

58
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP ÔN TẬP
 3.
Nhập tên sản phẩm cần xóa: ghim
VPP=[but bi’, ‘but chi’, ‘vo’, ‘sach GK’, ‘but chi’,
‘vo’]

 4.
Tổng số lượng sản phẩm hiện tại có 6 sp
But bi: 1
But chi: 2
Vo: 2
Sach GK:1

59
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP ÔN TẬP
 5.
Bạn muốn cập nhật sản phẩm nào: vo
Bạn muốn cập nhật thành: ghim

VPP=[but bi’, ‘but chi’, ‘ghim’, ‘sach GK’, ‘but


chi’, ‘ghim’]
Bạn muốn cập nhật sản phẩm nào: cap
Khong co san pham cap trong danh sach

60
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI GIẢNG
CƠ SỞ LẬP TRÌNH
CHƯƠNG 6.

CẤU TRÚC DỮ LIỆU


DICTIONARY
NGUYỄN THÀNH THỦY
BỘ MÔN TIN HỌC QUẢN LÝ
TRƯỜNG ĐẠI HỌC KINH TẾ, ĐẠI HỌC ĐÀ NẴNG
THUYNT@DUE.EDU.VN
NỘI DUNG
 Cấu trúc dữ liệu Dictionary
 So sánh Dictionary với List
 CÁC PHƯƠNG THỨC VÀ TOÁN TỬ CỦA dictionary
 Một số ứng dụng của Dictionary trong thực tiễn

2
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
CẤU TRÚC DỮ LIỆU DICTIONARY
 Cách tổ chức dữ liệu
 Một Dictionary (Dict) có thể lưu trữ một tập hợp các giá trị có kiểu
khác nhau;
 Dữ liệu trong Dict được tổ chức theo cặp thông tin gồm: key và
value;
 Key và Value: có kiểu chuỗi hoặc số;
 Key: được xem là khóa của Dict, và có giá trị là duy nhất.

 Cú pháp:
{<key1: value1>, <key2: value2>, .., <keyn: valuen>}

3
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
CẤU TRÚC DỮ LIỆU DICTIONARY
 Khởi tạo giá trị
Phần tử key: value

myCat = {'size': 'fat', 'color': 'gray', 'disposition': 'loud'}

Mỗi phần tử cách nhau bởi dấu ,

Đặt trong cặp dấu { }


Tên biến

4
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 106
CẤU TRÚC DỮ LIỆU DICTIONARY
 Khởi tạo giá trị
 Ví dụ:
Students={} #Khởi tạo Dict rỗng
Names = {1: 'An', 3: 'Nam', 2: 'Minh', 5: 'Lan'}
Words = {'Game': 5, 'Python': 11, 'Book': 2, 'Game': 3 }
print(Students)
print(Names)
print(Words)

{}
{1: 'An', 3: 'Nam', 2: 'Minh', 5: 'Lan'}
{'Game': 3, 'Python': 11, 'Book': 2}

5
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
CẤU TRÚC DỮ LIỆU DICTIONARY
 Thêm phần tử
 Ví dụ:
Students={} #Khởi tạo Dict rỗng
Students['age']=18
Students['name']="Nam"
print(Students)

{'age': 18, 'name': 'Nam'}

6
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
CẤU TRÚC DỮ LIỆU DICTIONARY
 Truy xuất value thông qua key
 Cú pháp: Dict_Name[key]
- Ví dụ:
Dict_Name
Key
Value

7
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 106
CẤU TRÚC DỮ LIỆU DICTIONARY
 Thay đổi value thông qua key
 Cú pháp: Dict_Name[key] = value
- Ví dụ:
myCat = {'size': 'fat', 'color': 'gray', 'disposition': 'loud'}
myCat['color']='black'
print(myCat)

{'size': 'fat', 'color': 'black', 'disposition': 'loud'}

8
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
CẤU TRÚC DỮ LIỆU DICTIONARY
 Dict chứa trong Dict
 Dạng 1:
myStudent={
1: {"name" : "An", "age" : 18, "course" : "Basic Programming"},
2: {"name" : "Nam", "age" : 19, "course" : "DataBase"},
3: {"name" : "Binh", "age" : 17, "course" : "Machine Learning"}
}
 Dạng 2:
student1 = {"name" : "An", "age" : 18, "course" : "Basic Programming"}
student2 = {"name" : "Nam", "age" : 19, "course" : "DataBase"}
student3 = {"name" : "Binh", "age" : 17, "course" : "Machine Learning"}

myStudent={
1: student1,
2: student2,
3: student3
}

9
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
CẤU TRÚC DỮ LIỆU DICTIONARY
 Dict chứa trong Dict
 Truy xuất phần tử con trong Dict
myStudent={
1: {"name" : "An", "age" : 18, "course" : "Basic Programming"},
2: {"name" : "Nam", "age" : 19, "course" : "DataBase"},
3: {"name" : "Binh", "age" : 17, "course" : "Machine Learning"}
}

print(myStudent[1])
print(myStudent[1]["name"])

{'name': 'An', 'age': 18, 'course': 'Basic Programming'}


An

10
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
SO SÁNH DICTIONARY VỚI LIST
 Truy xuất các phần tử
 List: sử dụng index để xác định các phần tử
>>> myPets = ['cats', 'dogs', 'mouse']
>>> myPets[0]
'cats'

 Dict: cặp key-value để xác định các phần tử


>>> eggs = {'name': 'Zophie', 'species': 'cat', 'age': '8'}
>>> eggs['name']
'Zophie'

11
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 106
SO SÁNH DICTIONARY VỚI LIST
 Cách tổ chức dữ liệu
 List: tập hợp có thứ tự;
 Dist: tập hợp không có thứ tự;
>>> spam = ['cats', 'dogs', 'mouse']
>>> bacon = ['dogs', 'mouse', 'cats']
>>> spam == bacon
False

>>> eggs = {'name': 'Zophie', 'species': 'cat', 'age': '8'}


>>> ham = {'species': 'cat', 'age': '8', 'name': 'Zophie'}
>>> eggs == ham
True

12
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 106
CÁC HÀM XỬ LÝ DICTIONARY
 dict()
 Chuyển một tập hợp thành Dict;
myDict = dict(name = "An", age = 18, country = "Viet Nam")
print(myDict)
{'name': 'An', 'age': 18, 'country': 'Viet Nam'}

 Chỉ sử dụng được hàm dict khi key có giá trị kiểu string;
myDict = dict(1 = "An", 2 = 18, 3 = "Viet Nam")
print(myDict)
myDict = dict(1 = "An", 2 = 18, 3 = "Viet Nam")
^
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

13
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 108
CÁC HÀM XỬ LÝ DICTIONARY
 len()
 Trả về số phần tử của Dict;
myDict = {name = "An", age = 18, country = "Viet Nam"}
print(len(Names))

 del(dictName[<key>])
 Xóa phần tử <key> trong dictName;
myDict = {"name" : "An", "age" : 18, "country" : "Viet Nam"}
del(myDict["age"])
print(myDict)
{'name': 'An', 'country': 'Viet Nam'}

14
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 108
CÁC PHƯƠNG THỨC VÀ TOÁN TỬ CỦA DICTIONARY
 values() method
 Trả về tập các value của các phần tử trong Dict;
>>> spam = {'color': 'red', 'age': 42}
>>> for x in spam.values():
print(x)
red
42

 Sử dụng hàm list() để chuyển kiểu Dist sang List;


>>> L1=list(spam.values()) >>> L=list(spam)
>>> L1 >>> print(L)
['red', 42] ['color', 'age']

>>> L1[0]
‘red'

15
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 108
CÁC PHƯƠNG THỨC VÀ TOÁN TỬ CỦA DICTIONARY
 keys() method
 Trả về tập các key của các phần tử trong Dict
>>> spam = {'color': 'red', 'age': 42} >>> for x in spam:
>>> for x in spam.keys(): print(x)
print(x) color
color age
age

>>> L2=list(spam.keys())
>>> L2
['color', 'age']

>>> L2[0]
'color'

16
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 108
CÁC PHƯƠNG THỨC VÀ TOÁN TỬ CỦA DICTIONARY
 items() method
 Trả về tập các phần tử trong Dict
>>> spam = {'color': 'red', 'age': 42}
>>> for x in spam.items():
print(x)

('color', 'red') #Dữ liệu kiểu tuple


('age', 42)

>>> L3=list(spam.items())
>>> L3
[('color', 'red'), ('age', 42)]

>>> L3[0]
('color', 'red')

17
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 108
CÁC PHƯƠNG THỨC VÀ TOÁN TỬ CỦA DICTIONARY
 items() method
 Truy xuất đồng thời key và value:
>>> spam = {'color': 'red', 'age': 42}
>>> for k, v in spam.items():
print('Key: ' + k + ' Value: ' + str(v))

Key: age Value: 42


Key: color Value: red

18
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 108
CÁC PHƯƠNG THỨC VÀ TOÁN TỬ CỦA DICTIONARY
 Toán tử in và not in
>>> spam = {'name': 'Zophie', 'age': 7}
>>> 'name' in spam.keys()
True
>>> 'Zophie' in spam.values()
True
>>> 'color' in spam.keys()
False
>>> 'color' not in spam.keys()
True
>>> 'color' in spam
False

19
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 109
CÁC PHƯƠNG THỨC VÀ TOÁN TỬ CỦA DICTIONARY
 Ví dụ:

20
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 107
CÁC PHƯƠNG THỨC VÀ TOÁN TỬ CỦA DICTIONARY
 get(<key>,<default_value>) method
 Trả về value của <key> trong Dict, nếu không tồn tại sẽ trả về giá trị
<default_value>
>>> picnicItems = {'apples': 5, 'cups': 2}

>>> 'I am bringing ' + str(picnicItems.get('cups', 0)) + ' cups.'


'I am bringing 2 cups.‘

>>> 'I am bringing ' + str(picnicItems.get('eggs', 0)) + ' eggs.'


'I am bringing 0 eggs.'

21
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 109
CÁC PHƯƠNG THỨC VÀ TOÁN TỬ CỦA DICTIONARY
 update(<dict>) method
 Cập nhật giá trị Dict, nếu giá trị cập nhật không tồn tại thì thêm mới.
- Ví dụ:
myDict = {"name": "An", "age": 18, "country": "Viet Nam"}
myDict.update(name="Nam")
print(myDict)
myDict.update(course="Basic Programming")
print(myDict)

{'name': 'Nam', 'age': 18, 'country': 'Viet Nam'}


{'name': 'Nam', 'age': 18, 'country': 'Viet Nam', 'course': 'Basic Programming'}

22
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 109
CÁC PHƯƠNG THỨC VÀ TOÁN TỬ CỦA DICTIONARY
 pop(<key>) method
 Xóa một phần tử có <key> khỏi Dict, và lấy <value> được xóa;
- Ví dụ:
Students = {
"name": "An",
"age": 18,
"class": "Basic Programming"}

x = Students.pop("class")
print(x)
print(Students)

Basic Programming
{'name': 'An', 'age': 18}

23
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 109
CÁC PHƯƠNG THỨC VÀ TOÁN TỬ CỦA DICTIONARY
 popitem() method
 Xóa phần tử ở cuối Dict (phần tử được thêm vào sau cùng);
- Ví dụ:
myDict = dict(name = "An", age = 15, country = "Viet Nam")
myDict.popitem()
print(myDict)

{'name': 'An', 'age': 15}

24
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 109
CÁC PHƯƠNG THỨC VÀ TOÁN TỬ CỦA DICTIONARY
 fromkeys() method
 Chuyển Tuple thành Dict, phần tử của Tuple trở thành key của Dict
- Ví dụ:
keys=("age","name","class")
d=dict.fromkeys(keys)
print(d)

{'age': None, 'name': None, 'class': None}

25
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 109
CÁC PHƯƠNG THỨC VÀ TOÁN TỬ CỦA DICTIONARY
 clear() method
 Xóa tất cả các phần tử trong Dict
- Ví dụ:
d={1:10, 2:20, 3:30}
print(d)
d.clear() # d={}
print(d)

{1: 10, 2: 20, 3: 30}


{}

26
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 109
CÁC PHƯƠNG THỨC VÀ TOÁN TỬ CỦA DICTIONARY
 copy() method hoặc dict() function
 Tạo bản sao Dict (tương tự trong list)
- Ví dụ:
myDict = {"name" : "An", "age" : 18, "country" : "Viet Nam"}
d1={1:10, 2:20, 3:30}
d2=d1 # Ánh xạ
d3=d1.copy() # Tạo bản sao
d4=dict(d1) # Tạo bản sao
print("d1:", d1)
print("d2:", d2) d1: {1: 10, 2: 20, 3: 30}
print("d3:", d3) d2: {1: 10, 2: 20, 3: 30}
print("d4:", d4)
d3: {1: 10, 2: 20, 3: 30}
d1[1]=100 d4: {1: 10, 2: 20, 3: 30}
print("d1:", d1) d1: {1: 100, 2: 20, 3: 30}
print("d2:", d2) d2: {1: 100, 2: 20, 3: 30}
print("d3:", d3) d3: {1: 10, 2: 20, 3: 30}
print("d4:", d4) d4: {1: 10, 2: 20, 3: 30}

27
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
XỬ LÝ DỮ LIỆU TRÊN DICTIONARY
 Duyệt Dict
 Truy xuất tất cả trường key trên Dict.
myDict = {"name" : "An", "age" : 18, "country" : "Viet Nam"}
#Cách 1
for x in myDict:
print(x)

#Cách 2
for x in myDict.keys():
print(x)

name
age
country

28
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
XỬ LÝ DỮ LIỆU TRÊN DICTIONARY
 Duyệt Dict
 Truy xuất tất cả trường value trên Dict.
myDict = {"name" : "An", "age" : 18, "country" : "Viet Nam"}
#Cách 1
for x in myDict:
print(myDict[x])

#Cách 2
for x in myDict.values():
print(x)

An
18
Viet Nam

29
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
XỬ LÝ DỮ LIỆU TRÊN DICTIONARY
 Duyệt Dict
 Truy xuất đồng thời tất cả các trường key và value trên Dict.
myDict = {"name" : "An", "age" : 18, "country" : "Viet Nam"}
for k,v in myDict.items():
print(k,v)

name An
age 18
country Viet Nam

30
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
XỬ LÝ DỮ LIỆU TRÊN DICTIONARY
 Sắp xếp Dict theo key
myDict = {'e': 10, 'a': 9, 'c': 15, 'b': 2, 'd': 32}
myKeys = list(myDict.keys())
myKeys.sort()

sorted_dict = {x: myDict[x] for x in myKeys}


print(sorted_dict)

{'a': 9, 'b': 2, 'c': 15, 'd': 32, 'e': 10}

31
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
XỬ LÝ DỮ LIỆU TRÊN DICTIONARY
 Sắp xếp Dict theo value
myDict = {'e': 10, 'a': 9, 'c': 15, 'b': 2, 'd': 32}
myValues=list(myDict.values())
myValues.sort()

sorted_dict={}
for x in myValues:
for k,v in myDict.items():
if x==v:
sorted_dict[k]=v

print(sorted_dict)

{'b': 2, 'a': 9, 'e': 10, 'c': 15, 'd': 32}

32
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
MỘT SỐ ỨNG DỤNG DICT TRONG THỰC TIỄN
 Lưu trữ trạng thái bàn cờ vua
K for King (vua)
Q for Queen (hậu)
R for Rook (xe)
B for Bishop (tượng)
N for Knight (mã)
P for Pawn (tốt)

Quân trắng viết hoa


Quân đen viết thường

chess_board = {'a1': 'R', 'b1': 'N', 'c1': 'B', 'd1': 'Q',


'e1': 'K', 'f1': 'B', 'g1': 'N', 'h1': 'R', 'a2': 'P', 'b2': 'P',
'c2': 'P', 'd2': 'P', 'e2': 'P', 'f2': 'P', 'g2': 'P', 'h2': 'P'}

33
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 112
MỘT SỐ ỨNG DỤNG DICT TRONG THỰC TIỄN
 Lưu trữ trạng thái bàn cờ Caro

theBoard = {'top-L': 'O', 'top-M': 'O', 'top-R': 'O',


'mid-L': 'X', 'mid-M': 'X', 'mid-R': ' ',
'low-L': ' ', 'low-M': ' ', 'low-R': 'X'}

34
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 113
MỘT SỐ ỨNG DỤNG DICT TRONG THỰC TIỄN
 Bài toán quản lý danh mục
 Có 3 người đi picnic, mỗi người mang theo một số món ăn (các món ăn có thể trùng
nhau ở mỗi người). Sử dụng cấu trúc dữ liệu Dictionary để quản lý danh mục các món ăn
của từng người và thống kê các món của toàn đoàn.
# Cấu trúc Dict-in-Dict
allGuests = { 'Alice': {'apples': 5},
'Bob': {'ham sandwiches': 3, 'apples': 2},
'Carol': {'cups': 3, 'apple pies': 1}}

def totalBrought(guests, item): Number of things being brought:


numBrought = 0 - Apples: 7
for v in guests.values(): - Cups: 3
- Cakes:0
numBrought = numBrought + v.get(item, 0)
- Ham Sandwiches: 3
return numBrought - Apple Pies: 1

print('Number of things being brought:')


print(' - Apples: ' + str(totalBrought(allGuests, 'apples')))
print(' - Cups: ' + str(totalBrought(allGuests, 'cups')))
print(' - Cakes:' + str(totalBrought(allGuests, 'cakes')))
print(' - Ham Sandwiches: ' + str(totalBrought(allGuests, 'ham sandwiches')))
print(' - Apple Pies: ' + str(totalBrought(allGuests, 'apple pies')))

35
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 118
BÀI TẬP ÔN TẬP
Bài 6.1. Viết chương trình nhập lần lượt vào 3 Dict (dict1, dict2, dict3), cho đến khi nhập key bằng rỗng thì dừng nhập.
Thực hiện nối 3 Dict vào 1 Dict kết quả, không được sử dụng phương thức update().
Ví dụ:
Nhap dict1:
1
10
2
20
3
30
Nhap dict2:
4
40
5
50
Nhap dict3:
6
60
7
70
8
80
dict1={1:10, 2:20, 3:30}
dict2={4:40, 5:50}
dict3={6:60, 7:70, 8:80}
dict_result={1:10, 2:20, 3:30, 4:40, 5:50, 6:60, 7:70, 8:80}

36
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
BÀI TẬP ÔN TẬP
Bài 6.2. Viết chương trình nhập lần lượt 2 Dict(dict1, dict2), cho đến khi nhập key bằng rỗng thì dừng
nhập. Thực hiện tính tổng giá trị trường value của 2 Dict.
Ví dụ:
Nhap dict1:
data1
5
data2
10
Data3
15
Nhap dict2:
data4
20
data5
25
dict1={'data1': 5, 'data2': 10, 'data3': 15}
dict2={'data4': 20, 'data5': 25}
Sum of the values: 75

37
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
BÀI TẬP
Bài tập trắc nghiệm
https://www.w3schools.com/python/exercise.asp?filename=exercise_dictionaries1

38
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
BÀI GIẢNG
CƠ SỞ LẬP TRÌNH
CHƯƠNG 7.

XỬ LÝ DỮ LIỆU KIỂU CHUỖI

NGUYỄN THÀNH THỦY


BỘ MÔN TIN HỌC QUẢN LÝ
TRƯỜNG ĐẠI HỌC KINH TẾ, ĐẠI HỌC ĐÀ NẴNG
THUYNT@DUE.EDU.VN
NỘI DUNG
 Làm việc với chuỗi
 Cấu trúc dữ liệu chuỗi
 Toán tử và phương thức xử lý chuỗi

2
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
LÀM VIỆC VỚI CHUỖI
 Biểu diễn chuỗi ký tự
 Xử dụng cặp dấu nháy đơn ‘’ hoặc nháy kép “” để biểu diễn một
chuỗi ký tự
 Ví dụ:

Chuỗi chứa dấu ‘ thì


được bao bởi cặp dấu
nháy kép “”

3
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
LÀM VIỆC VỚI CHUỖI
 Hiển thị ký tự đặc biệt với dấu \

4
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 124
LÀM VIỆC VỚI CHUỖI
 Hiển thị ký tự đặc biệt với dấu \
 Ví dụ:

5
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
LÀM VIỆC VỚI CHUỖI
 Hiển thị ký tự đặc biệt với dấu \
 Ví dụ: sử dụng 1 lệnh print để hiển thị lên màn hình câu thông báo
sau:

"Đen Vâu" is a rap singer


He’s 32 years old
I want to become a rapper

6
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
LÀM VIỆC VỚI CHUỖI
 Định nghĩa chuỗi dữ liệu thô (raw string)
 Đặt ký tự r trước dấu “ hoặc ‘ bắt đầu chuỗi, để giữ lại các ký tự đặc
biệt trong chuỗi.
 Ví dụ:

7
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
LÀM VIỆC VỚI CHUỖI
 Biểu diễn chuỗi gồm nhiều dòng văn bản
 Sử dụng 3 dấu nháy đơn ‘’’ bắt đầu và kết thúc khối văn bản để biểu
diễn chuỗi gồm nhiều dòng.
 Ví dụ:
st='''Đường về nhà là vào tim ta
Dẫu nắng mưa gần xa
Thất bát, vang danh
Nhà vẫn luôn chờ ta'''
print(st)
Đường về nhà là vào tim ta
Dẫu nắng mưa gần xa
Thất bát, vang danh
Nhà vẫn luôn chờ ta

8
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
CẤU TRÚC DỮ LIỆU CHUỖI
 Số chỉ mục Indexing
 Chuỗi được tổ chức tương tự cấu trúc dữ liệu kiểu danh sách (List);
 Mỗi phần tử của list là một ký tự trong chuỗi, được biểu diễn bằng
một số chỉ mục bắt đầu bằng số 0 (zero);
 Ví dụ:

Element P y t h o n
Index 0 1 2 3 4 5

9
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
CẤU TRÚC DỮ LIỆU CHUỖI
 Truy cập phần tử bằng cửa sổ trượt (Slicing)
 Ví dụ:

10
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 126
CẤU TRÚC DỮ LIỆU CHUỖI
 Truy cập phần tử bằng cửa sổ trượt (Slicing)
 Ví dụ:


 



11
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
CẤU TRÚC DỮ LIỆU CHUỖI
 Truy cập phần tử bằng cấu trúc lặp
 Cấu trúc while

b
 Cấu trúc for a
n
a
n
a

12
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Python for Everybody Book – Page 74, 75
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Toán tử in và not in
 Kiểm tra một chuỗi nằm trong một chuỗi khác hay không, kết quả trả
về true hoặc false;
 Ví dụ:

13
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 127
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Toán tử in và not in
 Ví dụ:

 
 

14
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Toán tử in và not in
 Bài tập: Viết chương trình:
- Nhập vào một xâu ký tự st1;
- Nhập vào 1 xâu st2, kiểm tra nếu st2 xuất hiện trong st1 thì yêu cầu
nhập lại xâu khác, còn lại thì dừng.

Ví dụ:
Python Programming
Python
Pro
thon
abc

15
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Toán tử so sánh ==, < , >
 Ví dụ: so sánh bằng ==

 Ví dụ: so sánh < và >

 Lưu ý: chuỗi được so sánh dựa trên thứ tự các ký tự trong chuỗi tính từ trái sang
phải. Chữ hoa thứ tự đứng trước chữ thường.

16
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Python for Everybody Book – Page 77
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức upper(), lower()
 Trả về một chuỗi được viết hoa hoặc viết thường;
 Ví dụ:

17
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 128
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức upper(), lower()
 Ví dụ:

???

18
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 128
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức isupper(), islower()
 Trả về true hoặc false nếu một chuỗi (chữ cái) có được viết hoa hay viết
thường toàn bộ xâu;
 Ví dụ:

19
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 129
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức isupper(), islower()
 Bài tập: Viết chương trình nhập vào một xâu str và một ký tự ch, in lên màn
hình số lượng ký tự ch xuất hiện trong xâu str (không phân biệt chữ hoa và
chữ thường).

Ví dụ:
str=Learn PYTHON Programming
ch=n
Number of character n is: 3

20
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức isalpha()
 isalpha(): trả về True nếu chuỗi chỉ chứa các ký tự chữ cái và không có ký tự
trắng, còn lại trả về False;
 Ví dụ:

21
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức isnumeric(), isdecimal()
 Trả về True nếu chuỗi chỉ chứa các ký tự chữ số và không có ký tự trắng, còn
lại trả về False;
 Ví dụ:

22
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Ví dụ: Chương trình nhập vào một số nguyên là tuổi một sinh viên,
chương trình kiểm tra và yêu cầu nhập lại nếu dữ liệu không phải là
số.

23
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 130
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Bài tập: Viết chương trình nhập từ bàn phím 2 số nguyên a và b.
- Yêu cầu kiểm tra tính đúng của dữ liệu khi nhập vào. Nếu dữ liệu không
hợp lệ thì yêu cầu nhập lại.
- In lên màn hình kết quả của biểu thức (a+b).

24
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 130
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức isalnum()
 isalnum(): trả về True nếu chuỗi chỉ chứa các ký tự chữ cái hoặc chữ số và
không có ký tự trắng, còn lại trả về False;
 Ví dụ:

25
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Ví dụ: Chương trình nhập vào mật khẩu là một chuỗi ký tự chỉ bao gồm chữ
cái và chữ số, chương trình kiểm tra và yêu cầu nhập lại cho đến khi hợp lệ.

26
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 130
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức isspace()
 isspace(): trả về True nếu chuỗi chỉ chứa các ký tự trắng, hoặc dấu tab, hoặc
dấu ngắt dòng, còn lại trả về False;
 Ví dụ:

27
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức istitle()
 istitle(): trả về True nếu chuỗi chỉ chứa các từ, mỗi từ được viết thường và
viết hoa chữ cái đầu, còn lại trả về False;
 Ví dụ:

28
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức istitle()
Bài tập: Viết chương trình nhập vào họ tên của một sinh viên. Kiểm tra
tính hợp lệ của chuỗi nhập vào. Biết rằng họ tên hợp lệ nếu tất cả được
viết thường, chỉ viết hoa chữ cái đầu của từ.

Ví dụ 1:
Ho ten: NGUYEN VAN AN
Khong hop le!!!

Ví dụ 2:
Ho ten: Nguyen Van An
Hop le!!!

29
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
Bài tập: Nhập vào một chuỗi ký tự làm mật khẩu cho chương trình.
Yêu cầu:
- Mật khẩu có tối thiểu 8 ký tự;
- Bao gồm: chữ cái, chữ số, chữ viết hoa và viết thường.
Nếu chuỗi mật khẩu không hợp lệ thì yêu cầu nhập lại.

Ví dụ:
abc123 ---> Không hợp lệ
aaaaa111111 ---> Không hợp lệ
aaaaBBBBBB ---> Không hợp lệ
1111111111 ---> Không hợp lệ
AAAAA111111 ---> Không hợp lệ
aaaAA111111 ---> Hợp lệ

30
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 130
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức startswith(str), endswith(str)
 startswith(str): Trả về True nếu chuỗi bắt đầu bởi chuỗi str;
 endswith(str): Trả về True nếu chuỗi kết thúc bởi chuỗi str, còn lại trả về False;
Có phân biệt chữ hoa và chữ thường
 Ví dụ:

31
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 131
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức startswith(str), endswith(str)
 Ví dụ: Viết hàm checkstring(st1,st2,st3) kiểm tra chuỗi st1 là hợp lệ nếu bắt đầu
bằng st2 hoặc kết thúc bằng st3. Hợp lệ thì hàm trả về True, còn lại trả về False.

TEST 1:
st1="Python Programming"
st2="Py"
st3="ming"
--> True

TEST 2:
st1="Python Programming"
st2="PY"
st3="MING"
--> False

32
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 131
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức join(ListOfString)
 join(ListOfString): ListOfString là một List gồm các chuỗi ký tự. join() dùng để
nối các phần tử trong ListOfString bằng một chuỗi tương ứng của phương thức;
 Ví dụ:

33
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 132
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức split()
 split(str): dùng để tách mỗi từ nằm trong chuỗi tương ứng thành một list, mỗi
phần tử nằm trong list là một chuỗi con;
 Ví dụ:
Không có tham số str

Có tham số str

34
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 132
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Ví dụ: sử dụng phương thức split() để tách mỗi dòng trong một đoạn văn bản
thành các phần tử của một List.

Sử dụng ký tự ngắt dòng

35
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 132
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Ví dụ: Nhập một dãy các số nguyên, mỗi số nguyên cách nhau đúng 1 dấu cách.
In lên màn hình tổng của các số nguyên đã nhập.

st=input("Nhap day so: ")


L=[int(x) for x in st.split()]

S=0
for x in L:
S+= x
print("Tong=",S)

Nhap day so: 1 2 3 4


Tong = 10

36
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 132
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Bài tập: Cho đoạn văn bản như sau:
“--Người---đâu-gặp---gỡ-làm-chi---
Trăm----năm-biết-có---duyên---gì--hay--không.
Ngổn-ngang---trăm-mối---bên---lòng----
----Nên-câu---tuyệt--diệu-ngụ-trong-tính-tình.”

Yêu cầu tiền xử lý để thành đoạn văn bản có ý nghĩa.

“Người đâu gặp gỡ làm chi


Trăm năm biết có duyên gì hay không.
Ngổn ngang trăm mối bên lòng
Nên câu tuyệt diệu ngụ trong tính tình.”

37
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 132
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức rjust(n,ch), ljust(n,ch), center(n,ch)
 Trả về một chuỗi mới khi thêm vào chuỗi gốc các ký tự ch, sao cho chiều dài của
chuỗi đúng bằng n ký tự và chuỗi gốc được đặt nằm bên phải (rjust()), bên trái
(ljust()) hoặc ở giữa (center());
 Ví dụ: trường hợp không có tham số ch

Thêm 5 ký tự trắng vào bên trái chuỗi gốc

Thêm 5 ký tự trắng vào bên phải chuỗi gốc


 Lưu ý: không làm thay đổi giá trị trên chuỗi gốc

38
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 133
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức rjust(n,ch), ljust(n,ch), center(n,ch)
 Trả về một chuỗi mới khi thêm vào chuỗi gốc các ký tự ch, sao cho chiều dài của
chuỗi đúng bằng n ký tự và chuỗi gốc được đặt nằm bên phải (rjust()), bên trái
(ljust()) hoặc ở giữa (center());

 Ví dụ: trường hợp có tham số ch

Thêm 15 dấu * vào bên


trái chuỗi gốc

39
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 133
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức rjust(n,ch), ljust(n,ch), center(n,ch)
 Trả về một chuỗi mới khi thêm vào chuỗi gốc các ký tự ch, sao cho chiều dài của
chuỗi đúng bằng n ký tự và chuỗi gốc được đặt nằm bên phải (rjust()), bên trái
(ljust()) hoặc ở giữa (center());

 Ví dụ:

40
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 133
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức rjust(n,ch), ljust(n,ch), center(n,ch)
 Ví dụ: Viết chương trình nhập vào tên và số lượng của 4 một mặt hàng bất kỳ, in lên màn
hình bảng thực đơn theo mẫu sau.

41
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức strip(str), rstrip(str), and lstrip(str)
 Trả về một chuỗi mới trong đó đã xóa các ký tự có trong chuỗi str ở 2 đầu
(strip()), bên phải (rstrip()) hoặc bên trái (lstrip()) chuỗi gốc.
 Ví dụ: trường hợp không có tham số str

Xóa các ký tự trắng ở 2 đầu chuỗi spam

Xóa các ký tự trắng ở nên trái chuỗi spam

Xóa các ký tự trắng ở nên phải chuỗi spam

42
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 135
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức strip(str), rstrip(str), and lstrip(str)
 Trả về một chuỗi mới trong đó đã xóa các ký tự có trong chuỗi str ở 2 đầu
(strip()), bên phải (rstrip()) hoặc bên trái (lstrip()) chuỗi gốc.
 Ví dụ: trường hợp có tham số str

Xóa các ký tự ‘a’, ‘m’, ‘p’, ‘S’ ở 2


đầu chuỗi spam

 Lưu ý:
- Có phân biệt chữ hoa và thường
- Không làm thay đổi giá trị của chuỗi gốc

43
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 135
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức strip(str), rstrip(str), and lstrip(str)
 Ví dụ:

(1) ???

(2) ???

(3) ???

(1) ???
(2) ???
(3) ???

44
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 135
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức find(str,n)
 Thực hiện tìm chuỗi str trong chuỗi gốc, bắt đầu từ ký tự có số chỉ mục n, n
để trống thì mặc định bằng 0.
 Trả về vị trí (index) lần đầu được tìm thấy (từ trái sang phải). Nếu không tìm
thấy thì trả về -1.
 Ví dụ:

45
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Python for Everybody Book – Page 79
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức find(str,n)
 Ví dụ: tách domain xuất hiện trong một chuỗi văn bản.

Đọc thêm: https://docs.python.org/3/library/stdtypes.html#string-methods

46
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Python for Everybody Book – Page 80
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức replace(oldvalue, newvalue, n)
 Tìm và thay thế các chuỗi oldvalue xuất hiện trong chuỗi gốc bằng newvalue, với
n lần tìm và thay thế;
 Nếu không có n: thì mặc định là tất cả các lần xuất hiện.
 Ví dụ:
string = "geeks for geeks geeks geeks geeks"
print(string.replace("geeks", "Geeks"))
print(string.replace("geeks", "GeeksforGeeks", 3))

Geeks for Geeks Geeks Geeks Geeks


GeeksforGeeks for GeeksforGeeks GeeksforGeeks geeks geeks

47
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Python for Everybody Book – Page 79
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Phương thức replace(oldvalue, newvalue, n)
Bài tập:
- Nhập vào 3 xâu st1, st2, st3;
- In lên màn hình vị trí (index) đầu tiên st2 xuất hiện trong st1;
- Thay thế tất cả các xâu st2 bằng st3;
- In lên màn hình xâu kết quả.

Ví dụ:
st1=Toi hoc python, python la NNLT manh
st2=python
st3=Python
Vi tri xuat hien st2: 8
Xau ket qua: Toi hoc Python, Python la NNLT manh

48
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept. Nguồn: Python for Everybody Book – Page 79
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI
 Định dạng %
 Dùng để nối chuỗi theo phương pháp tham số.
 Các loại định dạng:
- %d: dữ liệu kiểu số nguyên (decimal);
- %g: dữ liệu kiểu số thực;
- %s: dữ liệu kiểu chuỗi (string);
 Ví dụ:
n_decimal=3
n_float=2.5
st="Python"
print("Toi da hoc " + st + " lan thu " + str(n_decimal) + ", trong " + str(n_float) + " nam")
print("Toi da hoc %s lan thu %d, trong %g nam" % (st,n_decimal,n_float))

Toi da hoc Python lan thu 3, trong 2.5 nam


Toi da hoc Python lan thu 3, trong 2.5 nam
Đọc thêm: https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting

49
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
TOÁN TỬ VÀ PHƯƠNG THỨC XỬ LÝ CHUỖI

50
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
ÔN TẬP
Bài 7.1 Cho biết kết quả khi thực hiện các đoạn code sau:
a.
b.
c.
d.
Bài 7.2 Cho biết kết quả khi thực hiện các đoạn code sau:
a.
b.
c.
Bài 7.3 Cho biết kết quả khi thực hiện các đoạn code sau:
a.
b.

51
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
ÔN TẬP
Bài 7.4 Xây dựng một hàm có đầu vào là một chuỗi bất kỳ, đầu ra là 2 chuỗi, trong đó chuỗi 1
được viết thường toàn xâu, chuỗi 2 được viết hoa toàn xâu.
Input:
Learning Python
Output:
learning python
LEARNING PYTHON

Bài 7.5 Viết chương trình cho phép nhập vào một chuỗi bất kỳ, đếm số chữ cái và chữ số trong
câu đó và in kết quả ra màn hình.
Input:
Python $ Programming Class 2021
Output:
Chu cai: 22
Chu so: 4

52
Bài giảng CƠ SỞ LẬP TRÌNH - Nguyễn Thành Thủy, MIS Dept.
BÀI GIẢNG
CƠ SỞ LẬP TRÌNH
CHƯƠNG 8.

LÀM VIỆC VỚI TẬP TIN

TRẦN THỊ THU THẢO


BỘ MÔN TIN HỌC QUẢN LÝ
TRƯỜNG ĐẠI HỌC KINH TẾ, ĐẠI HỌC ĐÀ NẴNG
THAOTRAN@DUE.EDU.VN
NỘI DUNG
 Mở file
 Đóng file
 Ghi file
 Đọc file
 Xóa file
 Một số phương thức xử lý file
 Làm việc với thư viện os
 Bài tập

2
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
MỞ FILE
 Cú pháp:
file_object = open(filename, mode)
 file_object: tên biến
 filename: tên file cần mở (bao gồm đường dẫn)
 mode: chế độ mở file

3
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
MỞ FILE
 Cú pháp:
 mode:
Mode Description
Read - Default value. Opens a file for reading, error if the
r
file does not exist
Write - Opens a file for writing, creates the file if it does
w
not exist
Create - Creates the specified file, returns an error if the
x
file exists
Append - Opens a file for appending, creates the file if it
a
does not exist
t Text - Default value. Text mode
b Binary - Binary mode (e.g. images)
r+ Opens a file for updating (reading and writing)

4
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
MỞ FILE
 Ví dụ:
f1 = open("test.txt") # equivalent to 'r' or 'rt'
f2 = open("test.txt",'w') # Write in Text mode
f3 = open("img.bmp",'r+b') # Read and Write in Binary mode
# Hoặc
f = open("test.txt", mode=‘w')

# Read unicode file


f = open("test.txt", 'r', encoding='utf-8')

5
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
MỞ FILE
 Mở file với cấu trúc with … as
 Không cần sử dụng lệnh đóng file
 Ví dụ:
with open("test.txt", encoding = 'utf-8') as f:
# perform file operations here …

6
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
MỞ FILE
 Ví dụ: ghép cột A và B
A. Lệnh B. Mô tả

1. Mở file để đọc, bị lỗi nếu không có


a. f=open("test.txt",'x')
file.
2. Mở file để ghi đè vào file cũ, tạo
b. f=open("test.txt",'a')
mới nếu file không tồn tại.
3. Tạo mới file, bị lỗi nếu file đã tồn
c. f=open("test.txt")
tại.
4. Mở một file để ghi dữ liệu vào cuối
d. f=open("test.txt",‘r+')
file, tạo mới file nếu không tồn tại.
5. Mở một file để đọc và ghi vào cuối
e. f=open("test.txt",'w')
file, bị lỗi nếu file không tồn tại.

7
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
ĐÓNG FILE
 Cú pháp: file_object.close()
 Ví dụ: đóng file được mở bởi thẻ file f
f.close()

 Mở đóng file với cấu trúc try … finally


 Ví dụ:
try:
f = open("test.txt", encoding = 'utf-8')
# perform file operations
finally:
f.close() # close file

8
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
GHI FILE
 Cú pháp: file_object.write(string)
 Ví dụ: mở và ghi đè nội dung vào file test.txt
f=open("test.txt",'w')
f.write("my first file\n")
f.write("This file\n\n")
f.write("contains three lines\n")
f.close()

test.txt
my first file
This file

contains three lines

9
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
GHI FILE
 Cú pháp: file_object.writelines(List)
 Ví dụ: ghi các phần tử trong List vào file test.txt
L=["Đường về nhà là vào tim ta\n","Dẫu nắng mưa gần
xa\n","Thất bát, vang danh\n","Nhà vẫn luôn chờ ta\n"]
f=open("test.txt","w",encoding="utf-8")
f.writelines(L)

test.txt

Đường về nhà là vào tim ta


Dẫu nắng mưa gần xa
Thất bát, vang danh
Nhà vẫn luôn chờ ta

10
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
GHI FILE
 Ghi file sử dụng cấu trúc with … as
 Ví dụ: mở và ghi đè nội dung vào file test.txt
with open("test.txt",'w',encoding = 'utf-8') as f:
f.write("my first file\n")
f.write("This file\n\n")
f.write("contains three lines\n")

11
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
ĐỌC FILE
 Cú pháp: file_object.read([size])
 size: số bytes/ký tự cần đọc. Mặc định size=0 đọc
toàn bộ file.

 Ví dụ: đọc 12 ký tự đầu tiên trong file test.txt


f=open("test.txt","r", encoding="utf-8")
st=f.read(12)
print(st)
f.close()

Đường về nhà

12
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
ĐỌC FILE
 Ví dụ: Đọc toàn bộ nội dung file test.txt
f=open("test.txt","r", encoding="utf-8")
st=f.read()
print(st)
f.close()
Đường về nhà là vào tim ta
Dẫu nắng mưa gần xa
Thất bát, vang danh
Nhà vẫn luôn chờ ta
Đường về nhà là vào tim ta
Dẫu có muôn trùng qua
Vật đổi, sao dời
Nhà vẫn luôn là nhà

13
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
ĐỌC FILE
 Ví dụ: Sử dụng cấu trúc lặp để duyệt nội dung file,
đếm số dòng trong file.
f=open("test.txt",'r',encoding = 'utf-8')
dem=0
for row in f:
dem=dem+1
print(dem)
f.close()

14
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
ĐỌC FILE
 Cú pháp: file_object.readline([size])
 size: số bytes/ký tự cần đọc. Mặc định size=0 đọc
1 dòng.
 Nội dung bao gồm mã xuống dòng \n.

 Ví dụ: đọc 2 dòng đầu tiên trong file test.txt

f=open("test.txt",'r',encoding = 'utf-8')
st=f.readline()
print("Dòng 1:",st)
st=f.readline() Dòng 1: Đường về nhà là vào tim ta
print("Dòng 2:",st)
Dòng 2: Dẫu nắng mưa gần xa
f.close()

15
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
ĐỌC FILE
 Cú pháp: file_object.readlines()
 size: số bytes/ký tự cần đọc. Mặc định size=0 đọc
toàn bộ file.
 Nội dung bao gồm mã xuống dòng \n.

 Ví dụ: đọc toàn bộ file test.txt


f=open("test.txt",'r',encoding = 'utf-8')
st=f.readlines()
print(st)
f.close()

['Đường về nhà là vào tim ta\n', 'Dẫu nắng mưa gần xa\n', 'Thất bát, vang
danh\n', 'Nhà vẫn luôn chờ ta\n', 'Đường về nhà là vào tim ta\n', 'Dẫu có
muôn trùng qua\n', 'Vật đổi, sao dời\n', 'Nhà vẫn luôn là nhà']

16
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
XÓA FILE
 Ví dụ: xóa file test.txt
import os # Khai báo thư viện
os.remove("test.txt") # xóa file

17
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
MỘT SỐ PHƯƠNG THỨC XỬ LÝ FILE
 file_object.readable()
 Trả về True nếu file cho phép đọc, còn lại trả về
False.
f=open("test.txt","w",encoding="utf-8")
if f.readable():
print("First line:",f.readline())
else:
print("Can not read!")

Can not read!

18
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
MỘT SỐ PHƯƠNG THỨC XỬ LÝ FILE
 file_object.writable()
 Trả về True nếu file cho phép ghi, còn lại trả về
False.
f=open("test.txt","r",encoding="utf-8")
if f.writable():
f.write("OK!")
else:
print("Can not write!")

Can not write!

19
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
LÀM VIỆC VỚI THƯ VIỆN OS
 os.getcwd()
 Trả về đường dẫn thư mục hiện hành
 os.chdir(strPath)
 Chuyển đến thư mục strPath
 os.makedirs(strPath)
 Tạo thư mục có đường dẫn strPath

20
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
LÀM VIỆC VỚI THƯ VIỆN OS
 os.path.exists(strPath)
 Trả về True nếu đường dẫn tồn tại
 os.path.isdir(strPath)
 Trả về True nếu strPath là một đường dẫn
 os.path.isfile(strPath)
 Trả về True nếu strPath là một file

21
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 180
LÀM VIỆC VỚI THƯ VIỆN OS
 Đường dẫn tương đối và tuyệt đối

22
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept. Nguồn: Automate the Boring Stuff with Python Book – Page 176
LÀM VIỆC VỚI THƯ VIỆN OS
 Đường dẫn tương đối và tuyệt đối
 Ví dụ: viết lệnh thực hiện
Giả sử thư mục hiện hành là C:\
1. Xem thư mục hiện hành
2. Chuyển đến Part2
3. Chuyển đến Chapter3
4. Sử dụng đường dẫn tương đối
để mở file test1.txt
5. Sử dụng đường dẫn tuyệt đối
để mở file test1.txt

23
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP
Thư mục hiện hành là C:\Chapter1.

Bài 1. Mở file test1.txt, in toàn bộ


nội dung lên màn hình.
Bài 2. Mở file test2.txt, kiểm tra
nếu nhiều hơn 5 dòng thì xóa hết
và ghi vào 5 dòng có nội dung sau:
File 2 - Row 1
File 2 - Row 2
File 2 - Row 3
File 2 - Row 4
File 2 - Row 5

24
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP
Thư mục hiện hành là C:\Chapter1.

Bài 3. Mở và copy toàn bộ nội


dung các file test1.txt và test2.txt
vào file test3.txt.

Bài 4. Đọc file test2.txt, đếm có


bao nhiêu chữ số, bao nhiêu chữ
cái xuất hiện trong file.

25
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.
BÀI TẬP NHÓM
Project 1. Generating random Quiz files
Tài liệu “Automate the Boring Stuff with Python Book”
– Trang 186

Project 2. Multiclipboard
Tài liệu “Automate the Boring Stuff with Python Book”
– Trang 191

26
Bài giảng CƠ SỞ LẬP TRÌNH - Trần Thị Thu Thảo, MIS Dept.

You might also like