Professional Documents
Culture Documents
GT Python Final
GT Python Final
MỤC LỤC
MỤC LỤC ............................................................................ ERROR! BOOKMARK NOT DEFINED.
HƯỚNG DẪN ....................................................................... ERROR! BOOKMARK NOT DEFINED.
BÀI 1: PYTHON LÀ GÌ? ................................................ ERROR! BOOKMARK NOT DEFINED.
1.1 GIỚI THIỆU ..................................................................... ERROR! BOOKMARK NOT DEFINED.
1.1.1 Trình biên dịch và trình thông dịch ............................... Error! Bookmark not defined.
1.1.2 Ví dụ về biên dịch và thông dịch .................................. Error! Bookmark not defined.
1.2 ANACONDA VÀ TRÌNH SOẠN THẢO PYTHON ................................. ERROR! BOOKMARK NOT DEFINED.
1.2.1 Python IDLE .............................................................. Error! Bookmark not defined.
1.2.2 Visual Studio Code ..................................................... Error! Bookmark not defined.
1.2.3 Spyder ..................................................................... Error! Bookmark not defined.
1.2.4 Visual Studio ............................................................. Error! Bookmark not defined.
1.2.5 PyCharm .................................................................. Error! Bookmark not defined.
1.2.6 Wing Python IDE ....................................................... Error! Bookmark not defined.
1.2.7 Jupyter Notebook ...................................................... Error! Bookmark not defined.
1.3 CÀI ĐẶT PYTHON VÀ THIẾT LẬP MÔI TRƯỜNG ............................... ERROR! BOOKMARK NOT DEFINED.
1.3.1 Cài đặt Anaconda trên Windows .................................. Error! Bookmark not defined.
1.3.2 Thiết lập môi trường ảo cho Python bằng Anaconda ....... Error! Bookmark not defined.
1.4 CÀI ĐẶT GÓI PYTHON TRONG ANACONDA ................................... ERROR! BOOKMARK NOT DEFINED.
1.4.1 Các gói Python .......................................................... Error! Bookmark not defined.
1.4.2 Anaconda Navigator ................................................... Error! Bookmark not defined.
1.4.3 Lệnh conda ............................................................... Error! Bookmark not defined.
1.4.4 Lệnh pip ................................................................... Error! Bookmark not defined.
1.4.5 Cài đặt Python Spyder IDE và chạy tập lệnh ................. Error! Bookmark not defined.
TÓM TẮT ............................................................................ ERROR! BOOKMARK NOT DEFINED.
CÂU HỎI ÔN TẬP ................................................................. ERROR! BOOKMARK NOT DEFINED.
BÀI 2: KIỂU DỮ LIỆU ................................................... ERROR! BOOKMARK NOT DEFINED.
2.1 PYTHON – BIẾN................................................................. ERROR! BOOKMARK NOT DEFINED.
2.1.1 Tạo biến Python ........................................................ Error! Bookmark not defined.
2.1.2 Print biến Python ....................................................... Error! Bookmark not defined.
2.1.3 Xoá biến ................................................................... Error! Bookmark not defined.
2.1.4 Gán nhiều biến .......................................................... Error! Bookmark not defined.
2.1.5 Tên biến Python ........................................................ Error! Bookmark not defined.
2.1.6 Biến cục bộ - Local variable ........................................ Error! Bookmark not defined.
2.1.7 Biến toàn cục - Global variable .................................... Error! Bookmark not defined.
2.2 CÁC KIỂU DỮ LIỆU TIÊU CHUẨN............................................... ERROR! BOOKMARK NOT DEFINED.
2.2.1 Số - number ............................................................. Error! Bookmark not defined.
II MỤC LỤC
HƯỚNG DẪN
MÔ TẢ MÔN HỌC
Vi điều khiển nâng cao là một trong những môn học tiên quyết nhằm cung cấp kiến
thức cho những người học muốn nghiên cứu chuyên sâu về lập trình và áp dụng những
thuật toán điều khiển hiện đại cũng như cổ điển. Môn học trang bị những kiến thức từ
cơ bản đến nâng cao của dòng vi điều khiển mạnh nhất hiện nay đó là ARM .
− Bài 7: Truyền thông UART – I2C – SPI: Bài này giúp học viên nắm được các khái
niệm về truyền thông UART, I2C, SPI. Cách khởi tạo và cấu hình các giao thức truyền
thông. Giao tiếp giữa PC và MCU, MCU-MCU và viết 1 số chương trình ứng dụng.
▪ Trình bày được các trình soạn thảo phổ biến cho Python
▪ Thực hiện được cài đặt Anaconda, các gói cho Python và thiết lập được môi trường
ảo
ba tạo ra. Các gói này cần phải được tải xuống và cài đặt riêng (thông thường sử dụng
PIP) hoặc các gói phân phối từ Anaconda.
Python là ngôn ngữ lập trình hướng đối tượng (OOP - object-oriented programming),
nhưng Python có thể được sử dụng trong ứng dụng cơ bản mà không cần phải biết hoặc
sử dụng các tính năng hướng đối tượng trong Python. Python là ngôn ngữ lập trình được
thông dịch, code được viết trong file Python (.py) trong trình soạn thảo , sau đó đưa
file này vào trong trình thông dịch Python để thực thi. Tuỳ thuộc vàp trình soạn thảo
đang sử dụng, công việc này được thực hiện tự động hoặc thủ công.
Một trình biên dịch sẽ dịch đoạn code trên sang mã nhị phân, có thể thực thi như
trong hình 1.2. Tất cả các chỉ thị nhị phân đó là các lệnh dành cho máy tính. Chúng chỉ
thị máy tính thiết lập thanh ghi CPU thích hợp thành 1. Sau đó, chúng chọn một địa chỉ
trống trong RAM để ghi nội dung của thanh ghi. Đó là cách trình biên dịch dịch a = 1;
sang mã nhị phân. Các chỉ thị nhị phân khác là bản dịch phần còn lại của code sang
ngôn ngữ nhị phân của máy. Khi mã nhị phân được chạy, nó sẽ được tải vào RAM và
CPU sẽ thực thi nó.
Hình 1.2. Nguyên tắc hoạt động của trình biên dịch.
Mặt khác, trước tiên, một trình thông dịch sẽ đọc lệnh a = 1. Nó sẽ được tải vào
RAM của máy tính, dịch nó thành mã nhị phân và để (các) CPU thực thi nó. Sau đó,
4 BÀI 1: PYTHON LÀ GÌ?
trình thông dịch sẽ làm tương tự với lệnh b = 2. Sau lệnh thứ hai, nó sẽ chuyển sang
lệnh thứ ba và cho đến lệnh cuối cùng, như thể hiện trong hình 1.3.
Hình 1.3. Nguyên tắc hoạt động của trình thông dịch.
Tổng hợp sự khác biệt giữa trình biên dịch và trình thông dịch:
Lưu ý rằng hầu hết các ngôn ngữ lập trình có thể có cả triển khai được biên dịch và
thông dịch. Bản thân ngôn ngữ không nhất thiết phải được biên dịch hoặc thông dịch.
Tuy nhiên, để đơn giản, chúng thường được gọi như vậy. Ví dụ, Python có thể được
thực thi dưới dạng chương trình đã biên dịch hoặc dưới dạng ngôn ngữ được thông dịch
trong chế độ tương tác. Mặt khác, hầu hết các công cụ dòng lệnh (CLI - command line
tool) và Shell về mặt lý thuyết có thể được phân loại là ngôn ngữ được thông dịch.
BÀI 1: PYTHON LÀ GÌ? 5
1.2.3 Spyder
Spyder là một môi trường phát triển tích hợp (IDE - integrated development
environment) đa nền tảng nguồn mở dành cho lập trình khoa học bằng ngôn ngữ
Python.
Web: https://www.spyder-ide.org
Spyder được bao gồm trong Anaconda Distribution.
1.2.5 PyCharm
PyCharm đa nền tảng, có các phiên bản Windows, macOS và Linux. Community
Edition là phiên bản được sử dụng miễn phí, trong khi Professional Edition (phiên bản
trả phí) có một số tính năng bổ sung.
Web: https://www.jetbrains.com/pycharm/
Hình 1.4. Giao diện chính khi thực hiện tải Anaconda.
Bước 2: bắt đầu quá trình cài đặt
▪ Để bắt đầu cài đặt Anaconda trên hệ điều hành, click đúp vào file cài đặt trong thư
mục Download trên máy tính và click Next
Hình 1.5. Giao diện chính sau khi click đúp vào file cài đặt.
▪ Click I Agree với License Agreement
BÀI 1: PYTHON LÀ GÌ? 9
Hình 1.12. Giao diện của việc khuyến nghị cài đặt Pycharm.
▪ Kết thúc cài đặt
Hình 1.13. Giao diện của hoàn thành quá trình cài đặt.
Bước 3: làm việc với Anaconda
Khi quá trình cài đặt hoàn tất, Anaconda có thể được sử dụng để thực hiện nhiều
thao tác. Để bắt đầu sử dụng Anaconda, hãy tìm kiếm Anaconda Navigator từ Start
Menu trong Windows
BÀI 1: PYTHON LÀ GÌ? 13
▪ Để kích hoạt môi trường ảo, hãy nhập lệnh đã cho và thay thế tên môi trường đã
cho của người dùng bằng envname. Khi môi trường conda được kích hoạt, nó sẽ
sửa đổi PATH và các biến shell trỏ cụ thể đến thiết lập Python biệt lập mà người
dùng đã tạo
conda activate envname
Bước 5: cài đặt các gói cần thiết vào môi trường ảo
▪ Nhập lệnh sau để cài đặt các gói bổ sung vào môi trường và thay thế envname
bằng tên môi trường của người dùng
conda install -n envname package
Bước 6: vô hiệu hóa môi trường ảo
▪ Để thoát khỏi môi trường cụ thể, hãy gõ lệnh sau. Các cài đặt của môi trường sẽ
vẫn được giữ nguyên
conda deactivate
Bước 7: xóa môi trường ảo
▪ Nếu người dùng không còn muốn sử dụng một môi trường ảo nào đó. Xóa nó bằng
lệnh sau và thay thế tên môi trường của người dùng bằng envname
conda remove -n envname -all
Hình 1.17. Giao diện của Anaconda Navigator tại tab Environments.
▪ Click vào thẻ Not Installed. Thao tác này sẽ hiển thị danh sách tất cả các gói hiện
chưa được cài đặt trong môi trường đã chọn
Hình 1.18. Giao diện của Anaconda Navigator, kiểm tra các gói chưa cài đặt.
▪ Tìm kiếm (các) gói muốn cài đặt bằng cách nhập tên gói vào thanh tìm kiếm
BÀI 1: PYTHON LÀ GÌ? 19
Hình 1.19. Giao diện của Anaconda Navigator, tìm kiếm gói cài đặt.
▪ Chọn (các) gói muốn cài đặt bằng cách click vào checkbox bên cạnh tên gói
Hình 1.20. Giao diện của Anaconda Navigator, chọn gói cài đặt.
▪ Click nút Apply để bắt đầu cài đặt
20 BÀI 1: PYTHON LÀ GÌ?
Hình 1.21. Giao diện của Anaconda Navigator, đồng ý cài đặt sau khi chọn gói.
▪ Người dùng sẽ được nhắc xác nhận cài đặt. Click vào Apply một lần nữa để xác
nhận cài đặt
Hộp thoại file mới hiển thị. Nhập tên cho script, ở đây là MyFile.py như một ví dụ
minh hoạ và click Save. File sẽ xuất hiện trong thư mục project trong ngăn Project
explorer của IDE.
Hình 1.33. Code mẫu đầu tiên cho việc minh hoạ.
Sau đó, người dùng có thể lưu file bằng cách nhấn Ctrl+S hoặc chọn File › Save từ
menu
Hình 1.37. Thay đổi màu của tính năng Syntax Highlighting.
▪ Syntax Warnings và Auto-Completion: giả sử tạo file mới có tên là Editor.py và
thêm vào project. Nó hiện đang được mở trong trình soạn thảo như hình 1.38.
BÀI 1: PYTHON LÀ GÌ? 31
Hình 1.42. Hiện thị lỗi của code trong ngăn Console.
Hình 1.43. Thông báo lỗi việc sử dụng gói chưa được cài đặt trong chương trình.
Hình 1.44. Quá trình cài đặt gói trên Console và chạy chương trình.
Hình 1.45. Quan sát giá trị của các biến trên Variable explorer.
Variable explorer cho phép người dùng không chỉ xem các giá trị của biến mà còn
chỉnh sửa các giá trị đó. Ngoài ra, có thể chọn các biến từ ngăn explorer và chọn vẽ
hoặc Histogram từ menu để tạo biểu đồ từ tập hợp dữ liệu đó.
36 BÀI 1: PYTHON LÀ GÌ?
TÓM TẮT
Trong bài này, học viên tìm hiểu:
▪ Sự khác biệt về việc thực thi các chương trình sau khi biên dịch và thông dịch
▪ Các trình soạn thảo phổ biến dành cho việc lập trình Python
▪ Cài đặt các gói Python trong Anaconda dùng Anaconda Navigator, lệnh pip và lệnh
conda
▪ Lập trình được cho các biến với kiểu dữ liệu tiêu chuẩn bao gồm số, chuỗi, tuple và
dictionary
print (counter)
print (miles)
print (name)
Ở đây, 100, 1000.0 và "Zara Ali" lần lượt là các giá trị được gán cho các biến counter,
miles, và name. Khi chạy chương trình Python ở trên, điều này tạo ra kết quả trên
Console của Spyder như sau:
100
1000.0
Zara Ali
del counter
print (counter)
Điều này sẽ tạo ra kết quả trên Console:
40 BÀI 2: KIỂU DỮ LIỆU
100
Traceback (most recent call last):
File "main.py", line 7, in <module>
print (counter)
NameError: name 'counter' is not defined
print (a)
print (b)
print (c)
Điều này sẽ tạo ra kết quả trên Console:
100
100
100
Ví dụ:
a,b,c = 1,2,"Zara Ali"
print (a)
print (b)
print (c)
Điều này sẽ tạo ra kết quả trên Console:
1
2
Zara Ali
Ở đây, hai đối tượng số nguyên có giá trị 1 và 2 lần lượt được gán cho các biến a và
b và một đối tượng chuỗi có giá trị "Zara Ali" được gán cho biến c.
print (counter)
print (_count)
print (name1)
print (name2)
print (Age)
print (zara_salary)
Điều này sẽ tạo ra kết quả trên Console:
100
100
Zara
Nuha
20
100000
Ví dụ: Sau đây là tên biến Python không hợp lệ
1counter = 100
$_count = 100
zara-salary = 100000
42 BÀI 2: KIỂU DỮ LIỆU
print (1counter)
print ($count)
print (zara-salary)
Điều này sẽ tạo ra kết quả trên Console:
File "main.py", line 3
1counter = 100
^
SyntaxError: invalid syntax
▪ Python cho phép người dùng sử dụng chữ L viết thường với long, nhưng bạn chỉ nên
sử dụng chữ L viết hoa để tránh nhầm lẫn với số 1. Python hiển thị số nguyên long
với chữ L viết hoa
▪ Một số phức bao gồm một cặp số thực được biểu thị bằng a + bj, trong đó a là phần
thực và b là phần ảo của số phức
math.exp(100.72) : 5.52255713025e+43
math.exp(119L) : 4.7978133273e+51
math.exp(math.pi) : 23.1406926328
▪ fabs(x) - trả về giá trị tuyệt đối của x
Ví dụ:
import math # This will import math module
Các số ngẫu nhiên được sử dụng cho các ứng dụng trò chơi, mô phỏng, thử nghiệm,
bảo mật và quyền riêng tư. Python bao gồm các chức năng sau thường được sử dụng.
▪ choice(seq) - trả về một mục ngẫu nhiên từ một list, tuple hoặc string
Ví dụ:
import random
random.seed(10)
print("Random number with seed 10 : ", random.random())
# It will generate same random number
random.seed(10)
print("Random number with seed 10 : ", random.random())
# It will generate same random number
random.seed(10)
print("Random number with seed 10 : ", random.random())
Khi chạy chương trình trên, nó tạo ra kết quả sau:
Random number with seed 10 : 0.57140259469
Random number with seed 10 : 0.57140259469
Random number with seed 10 : 0.57140259469
▪ shuffle(lst) - ngẫu nhiên hóa các mục của một list
Ví dụ:
import random
import math
degrees(3) : 171.887338539
degrees(-3) : -171.887338539
degrees(0) : 0.0
degrees(math.pi) : 180.0
degrees(math.pi/2) : 90.0
degrees(math.pi/4) : 45.0
▪ radians(x) - chuyển đổi góc x từ độ sang radian
Ví dụ:
import math
2.2.2.3 Ký tự thoát
Bảng sau đây là danh sách các ký tự thoát hoặc không xuất bởi hàm print() được
có thể được biểu thị bằng ký hiệu dấu gạch chéo ngược (\). Một ký tự thoát được giải
thích; trong một chuỗi dấu nháy đơn cũng như ngoặc kép.
58 BÀI 2: KIỂU DỮ LIỆU
Ví dụ: Nếu một chữ cái được lấy làm ký tự điền, thì chuỗi output được căn giữa theo
chiều rộng đã cho và các ký tự phụ được đệm bằng cách sử dụng chữ cái được chỉ định
trong tham số trong hàm center().
str = "Welcome to Tutorialspoint."
output=str.center(40, 's')
print("The string after applying the center() function is:", output)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
The string after applying the center() function is: sssssssWelcome to
Tutorialspoint.sssssss
Ví dụ: Nếu fillchar không được chỉ định trong tham số của hàm center(), thì fillchar
mặc định là space ASCII được coi là giá trị đệm.
str = "Welcome to Tutorialspoint."
output=str.center(40)
print("The string after applying the center() function is:", output)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
The string after applying the center() function is: Welcome to
Tutorialspoint.
Ví dụ: Nếu độ rộng tham số được đề cập nhỏ hơn độ dài của chuỗi đầu vào ban đầu,
chuỗi sẽ không thay đổi.
str = "Welcome to Tutorialspoint."
output=str.center(5)
print("The string after applying the center() function is:", output)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
The string after applying the center() function is: Welcome to Tutorialspoint.
▪ count(str, beg= 0,end=len(string)) - sử dụng để đếm số lần xuất hiện không
trùng lặp của chuỗi con được chỉ định làm tham số của hàm. Số lượng chuỗi con
trong một phạm vi cụ thể của chuỗi đó cũng có thể thu được bằng cách chỉ định
điểm bắt đầu và điểm kết thúc của phạm vi trong các tham số của hàm. Nếu chuỗi
con trống, nó trả về số lượng chuỗi trống giữa các ký tự bằng độ dài của chuỗi cộng
với một.
Ví dụ: Một chuỗi "Hello! Welcome to Tutorialspoint." được tạo. Sau đó, chuỗi con được
đếm chỉ định là 'i'. Hàm count() được gọi trên chuỗi có giá trị bắt đầu là 3 và giá trị kết
thúc là 30 làm đối số của nó.
BÀI 2: KIỂU DỮ LIỆU 63
str = "Hello! Welcome to Tutorialspoint."
substr = "i"
print("The number of occurrences of the substring in the input string are: ",
str.count(substr, 3, 30))
Khi chạy chương trình trên, nó tạo ra kết quả sau:
The number of occurrences of the substring in the input string are: 2
Ví dụ: Nếu giá trị kết thúc không được chỉ định trong các tham số của hàm, thì chỉ mục
cuối cùng của chuỗi được coi là giá trị kết thúc mặc định.
str = "Hello! Welcome to Tutorialspoint.";
substr = "to";
print("The number of occurrences of the substring in the input string are: ",
str.count(substr, 21))
Khi chạy chương trình trên, nó tạo ra kết quả sau:
The number of occurrences of the substring in the input string are: 0
Ví dụ: Nếu giá trị bắt đầu và kết thúc không được chỉ định trong các tham số của hàm,
thì chỉ mục thứ 0 của chuỗi được coi là giá trị bắt đầu mặc định và chỉ mục cuối cùng
của chuỗi được coi là giá trị kết thúc mặc định.
str = "Hello! Welcome to Tutorialspoint."
substr = "t"
print("The number of occurrences of the substring in the input string are: ",
str.count(substr))
Khi chạy chương trình trên, nó tạo ra kết quả sau:
The number of occurrences of the substring in the input string are: 3
Ví dụ: Nếu giá trị bắt đầu và kết thúc không được chỉ định trong các tham số của hàm,
thì chỉ mục thứ 0 của chuỗi được coi là giá trị bắt đầu mặc định và chỉ mục cuối cùng
của chuỗi được coi là giá trị kết thúc mặc định. Nếu chuỗi phụ trống, nó trả về số lượng
chuỗi trống giữa các ký tự bằng độ dài của chuỗi cộng với một.
str = "Hello! Welcome to Tutorialspoint.";
substr = "";
print("The number of occurrences of the substring in the input string are: ",
str.count(substr))
Khi chạy chương trình trên, nó tạo ra kết quả sau:
The number of occurrences of the substring in the input string are: 34
64 BÀI 2: KIỂU DỮ LIỆU
▪ endswith(suffix, beg=0, end=len(string)) - Xác định xem chuỗi hoặc chuỗi con
của chuỗi (nếu chỉ mục bắt đầu beg và chỉ mục kết thúc end được đưa ra) kết thúc
bằng hậu tố. Hàm này trả về true nếu chuỗi kết thúc bằng hậu tố đã chỉ định, ngược
lại trả về false.
Ví dụ: Một chuỗi "Hello! Welcome to Tutorialspoint." được tạo. Sau đó hàm endwith()
được gọi trên chuỗi chỉ có hậu tố làm đối số của nó và kết quả được in dưới dạng ngõ
ra bằng hàm print().
str = "Hello!Welcome to Tutorialspoint.";
suffix = "oint.";
result=str.endswith(suffix)
print("The input string ends with the given suffix:", result)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
The input string ends with the given suffix: True
▪ find(str, beg=0 end=len(string)) - Xác định xem str xuất hiện trong chuỗi hay
trong chuỗi con của chuỗi nếu chỉ mục bắt đầu beg và chỉ mục kết thúc end được
đưa ra sẽ trả về chỉ mục nếu tìm thấy và -1 nếu không.
Ví dụ:
str1 = "Hello! Welcome to Tutorialspoint."
str2 = "to";
result= str1.find(str2)
print("The index where the substring is found:", result)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
The index where the substring is found: 15
▪ index(str, beg=0, end=len(string)) - Tương tự như find(), nhưng đưa ra một
ngoại lệ nếu không tìm thấy str
Ví dụ:
str1 = "Hello! Welcome to Tutorialspoint."
str2 = "to";
result= str1.index(str2)
print("The index where the substring is found:", result)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
The index where the substring is found: 15
BÀI 2: KIỂU DỮ LIỆU 65
Ví dụ: Các khoảng trắng cũng được tính là các chuỗi con. Nếu có nhiều hơn một khoảng
trắng trong chuỗi đầu vào, thì khoảng trắng đầu tiên gặp phải trong chuỗi đầu vào được
coi là chỉ số kết quả.
str1 = "Hello! Welcome to Tutorialspoint."
str2 = " ";
result= str1.index(str2)
print("The index where the substring is found:", result)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
The index where the substring is found: 6
Ví dụ: Phương thức python string index() trả về chỉ mục nơi chuỗi con được tìm thấy
trong phạm vi của chỉ số bắt đầu và kết thúc được chỉ định.
str1 = "Hello! Welcome to Tutorialspoint."
str2 = " ";
result= str1.index(str2, 12, 15)
print("The index where the substring is found:", result)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
The index where the substring is found: 14
Ví dụ: Nếu cùng một chuỗi con xuất hiện nhiều lần trong chuỗi đầu vào, thì dựa trên
chỉ số bắt đầu hoặc kết thúc được chỉ định làm tham số của hàm, sẽ thu được chỉ mục
kết quả.
str1 = "Hello! Welcome to Tutorialspoint."
str2 = "to";
result= str1.index(str2, 5)
print("The index where the substring is found:", result)
result= str1.index(str2, 18)
print("The index where the substring is found:", result)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
The index where the substring is found: 15
The index where the substring is found: 20
▪ isalnum() - trả về true nếu tất cả các ký tự trong chuỗi đầu vào là chữ và số, và
có ít nhất một ký tự. Nếu không, nó trả về false.
Ví dụ:
Str1 = "tutorial"
66 BÀI 2: KIỂU DỮ LIỆU
str2 = "Aa12"
result1=str1.isalnum()
result2=str2.isalnum()
print("Are all the characters of the string alphanumeric?", result1)
print("Are all the characters of the string alphanumeric?", result2)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
Are all the characters of the string alphanumeric? True
Are all the characters of the string alphanumeric? True
Ví dụ: Chỉ các chữ cái viết thường, viết hoa và các số được kiểm tra. Các ký tự khác
như '!', '.', '/', v.v.. không phải là ký tự chữ và số. Ngay cả khi chuỗi chứa bảng chữ cái
có các loại ký tự không phải chữ và số này, thì hàm isalnum() trả về false.
str = "Hello!Welcome."
result=str.isalnum()
print("Are all the characters of the string alphanumeric?", result)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
Are all the characters of the string alphanumeric? False
▪ isalpha() - Trả về true nếu chuỗi có ít nhất 1 ký tự và tất cả các ký tự là chữ cái,
ngược lại trả về false
str1 = "Hello!welcome"
str2 = "Welcome"
result1 = str1.isalpha()
result2 = str2.isalpha()
print("Are all the characters of the string alphabetic?", result1)
print("Are all the characters of the string alphabetic?", result2)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
Are all the characters of the string alphabetic? False
Are all the characters of the string alphabetic? True
▪ isdigit() - Trả về true nếu chuỗi chỉ chứa các chữ số và false nếu ngược lại
Ví dụ:
str = "1235"
result=str.isdigit()
print("Are all the characters of the string digits?", result)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
BÀI 2: KIỂU DỮ LIỆU 67
Are all the characters of the string digits? True
▪ islower() - trả về true nếu tất cả các ký tự trong chuỗi là chữ thường và có ít nhất
một ký tự và ngược lại là false
Ví dụ:
str1 = "Hello! Welcome to Tutorialspoint!";
str2 = "welcome to tutorialspoint";
result1 = str1.islower()
result2 = str2.islower()
print("Are all the cased characters in the string lowercases?", result1)
print("Are all the cased characters in the string lowercases?", result2)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
Are all the cased characters in the string lowercases? False
Are all the cased characters of the string lowercases? True
▪ isupper() - Trả về true nếu chuỗi có ít nhất một ký tự và tất cả các ký tự đều là
chữ hoa và nếu ngược lại là false
Ví dụ:
str1 = "PYTHON"
str2 = "this is string example....wow!!!";
# Checking whether the string is in uppercase
res1 = str1.isupper()
res2 = str2.isupper()
# Printing the result
print ("Is the given string in uppercase?: ", res1)
print ("Is the given string in uppercase?: ", res2)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
Is the given string in uppercase?: True
Is the given string in uppercase?: False
▪ len(string) - Trả về độ dài của chuỗi
Ví dụ:
str = "this is string example....wow!!!";
print "Length of the string: ", len(str)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
Length of the string: 32
68 BÀI 2: KIỂU DỮ LIỆU
Ví dụ: một danh sách các chuỗi được tạo ra. Sau đó, sử dụng phương thức len(),trả về
độ dài của danh sách:
li = ["Python","Java","CSS","Javascript"]
# Returning the length of the list
print("The length of the given list is:", len(li))
Khi chạy chương trình trên, nó tạo ra kết quả sau:
The length of the given list is: 4
▪ join(seq) - Hợp nhất (nối) các biểu diễn chuỗi của các phần tử trong chuỗi seq thành
một chuỗi, với chuỗi phân cách
Ví dụ:
s = "-"
seq = ("a", "b", "c"); # This is sequence of strings.
print s.join(seq)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
a-b-c
Ví dụ: tất cả các mục trong Dictionary đã cho được nối thành một chuỗi bằng cách sử
dụng từ “MATCH” làm dấu phân cách:
Dictionary = {"Player":"Sachin Tendulkar", "Sports":"Cricket"}
# Providing the separator
sep = "MATCH"
# Joining the items in the dictionary with the given string
res = sep.join(Dictionary)
print(res)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
PlayerMATCHSports
▪ lower() - Chuyển đổi tất cả các chữ hoa trong chuỗi thành chữ thường
Ví dụ:
str = "THIS IS STRING EXAMPLE";
print(str.lower())
Khi chạy chương trình trên, nó tạo ra kết quả sau:
this is a string
▪ upper() - Chuyển đổi chữ thường trong chuỗi thành chữ hoa
Ví dụ:
BÀI 2: KIỂU DỮ LIỆU 69
str = "this is string example"
print(str.upper())
Khi chạy chương trình trên, nó tạo ra kết quả sau:
THIS IS STRING EXAMPLE
2.2.3 List
list là kiểu dữ liệu linh hoạt nhất có sẵn trong Python, có thể được viết dưới dạng list
các giá trị (mục) được phân tách bằng dấu phẩy giữa các dấu ngoặc vuông. Điều quan
trọng về list là các mục trong list không nhất thiết phải cùng kiểu biến.
Việc tạo một list cũng đơn giản như đặt các giá trị khác nhau được phân tách bằng
dấu phẩy giữa các dấu ngoặc vuông. Ví dụ
list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"]
Tương tự như chỉ số chuỗi, chỉ số list bắt đầu từ 0 và danh sách có thể được trích
xuất, nối, v.v.
list[2] = 2001;
print("New value available at index 2 : ")
print list[2]
Khi chạy chương trình trên, nó tạo ra kết quả sau:
Value available at index 2 :
1997
New value available at index 2 :
2001
Lưu ý - append() được thảo luận trong phần tiếp theo.
B List : zara
▪ list.remove(obj) - Xóa đối tượng obj khỏi list
Ví dụ:
aList = [123, 'xyz', 'zara', 'abc', 'xyz']
aList.remove('xyz')
print("List : ", aList)
aList.remove('abc')
print("List : ", aList)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
List : [123, 'zara', 'abc', 'xyz']
List : [123, 'zara', 'xyz']
▪ list.reverse() - Đảo ngược các đối tượng của list tại chỗ
Ví dụ:
aList = [123, 'xyz', 'zara', 'abc', 'xyz']
aList.reverse()
print("List : ", aList)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
List : ['xyz', 'abc', 'zara', 'xyz', 123]
▪ list.sort([func]) - Sắp xếp các đối tượng của list, sử dụng hàm so sánh nếu được
cung cấp
Ví dụ:
aList = [123, 'xyz', 'zara', 'abc', 'xyz']
aList.sort()
print("List : ", aList)
Khi chạy chương trình trên, nó tạo ra kết quả sau:
List : [123, 'abc', 'xyz', 'xyz', 'zara']
2.2.4 Tuple
Một tuple là một tập hợp các đối tượng có thứ tự và không thay đổi. Tuples là dãy,
giống như list. Sự khác biệt giữa tuple và list là, tuple không thể thay đổi không giống
như list và tuple sử dụng dấu ngoặc đơn, trong khi list sử dụng dấu ngoặc vuông.
Tạo một tuple cũng đơn giản như đặt các giá trị khác nhau được phân tách bằng dấu
phẩy. Theo tùy chọn, cũng có thể đặt các giá trị được phân tách bằng dấu phẩy này
giữa các dấu ngoặc đơn. Ví dụ:
BÀI 2: KIỂU DỮ LIỆU 75
tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5 )
tup3 = "a", "b", "c", "d"
Tuple trống được viết dưới dạng hai dấu ngoặc đơn không chứa gì
tup1 = ()
Để viết một tuple chứa một giá trị duy nhất, người dùng phải bao gồm dấu phẩy,
mặc dù chỉ có một giá trị
tup1 = (50,)
Giống như chuỗi, chỉ số tuple bắt đầu từ 0 và chúng có thể được trích xuất, nối, v.v.
Không thể loại bỏ các phần tử tuple riêng lẻ. Tất nhiên, không có gì sai khi kết hợp
một tuple khác với các phần tử không mong muốn bị loại bỏ. Để loại bỏ một cách rõ
ràng toàn bộ tuple, chỉ cần sử dụng câu lệnh del. Ví dụ:
tup = ('physics', 'chemistry', 1997, 2000)
print(tup)
del tup
print("After deleting tup : ")
print(tup)
Điều này tạo ra kết quả sau đây. Lưu ý một ngoại lệ được nêu ra, điều này là do sau
khi dùng del tup, tuple không còn tồn tại nữa
('physics', 'chemistry', 1997, 2000)
After deleting tup :
Traceback (most recent call last):
File "test.py", line 9, in <module>
print tup;
NameError: name 'tup' is not defined
2.2.5 Dictionary
Mỗi key được phân tách khỏi giá trị của nó bằng dấu hai chấm (:), các phần tử được
phân tách bằng dấu phẩy và toàn bộ nội dung được đặt trong dấu ngoặc nhọn. Một
dictionary trống không có bất kỳ phần tử nào được viết chỉ bằng hai dấu ngoặc nhọn:
{}.
Các key là duy nhất trong một dictionary trong khi các giá trị có thể không. Các giá
trị của dictionary có thể thuộc bất kỳ loại nào, nhưng các key phải thuộc loại dữ liệu
bất biến, chẳng hạn như chuỗi, số hoặc tuple.
Ví dụ:
dict = {'Name': 'Zara', 'Age': 7}
print("Variable Type : %s" % type (dict))
Khi chạy chương trình trên, nó tạo ra kết quả sau:
Variable Type : <type 'dict'>
Python bao gồm các phương thức dictionary sau:
▪ dict.clear() - Loại bỏ tất cả các phần tử của dictionary dict
Ví dụ:
dict = {'Name': 'Zara', 'Age': 7}
print("Start Len : %d" % len(dict))
dict.clear()
print("End Len : %d" % len(dict))
Khi chạy chương trình trên, nó tạo ra kết quả sau:
Start Len : 2
End Len : 0
▪ dict.copy() - Trả về một bản sao của dictionary dict
Ví dụ:
dict1 = {'Name': 'Zara', 'Age': 7}
dict2 = dict1.copy()
print("New Dictionary : %s" % str(dict2))
Khi chạy chương trình trên, nó tạo ra kết quả sau:
New Dictionary : {'Age': 7, 'Name': 'Zara'}
▪ dict.fromkeys() - Tạo một dictionary mới với các khóa từ seq và các giá trị được đặt
thành giá trị
Ví dụ:
seq = ('name', 'age', 'sex')
dict = dict.fromkeys(seq)
print("New Dictionary : %s" % str(dict))
dict = dict.fromkeys(seq, 10)
print("New Dictionary : %s" % str(dict))
Khi chạy chương trình trên, nó tạo ra kết quả sau:
New Dictionary : {'age': None, 'name': None, 'sex': None}
New Dictionary : {'age': 10, 'name': 10, 'sex': 10}
BÀI 2: KIỂU DỮ LIỆU 83
▪ dict.get(key, default=None) - Trả về giá trị hoặc giá trị mặc định nếu key không
có trong dictionary
Ví dụ:
dict = {'Name': 'Zabra', 'Age': 7}
print("Value : %s" % dict.get('Age'))
print("Value : %s" % dict.get('Education', "Never"))
Khi chạy chương trình trên, nó tạo ra kết quả sau:
Value : 7
Value : Never
▪ dict.has_key(key) - Trả về true nếu key trong từ điển dict, ngược lại là false
Ví dụ:
dict = {'Name': 'Zara', 'Age': 7}
print("Value : %s" % dict.has_key('Age'))
print("Value : %s" % dict.has_key('Sex'))
Khi chạy chương trình trên, nó tạo ra kết quả sau:
Value : True
Value : False
▪ dict.items() - Trả về danh sách các cặp tuple (key, value) của dict
Ví dụ:
dict = {'Name': 'Zara', 'Age': 7}
print("Value : %s" % dict.items())
Khi chạy chương trình trên, nó tạo ra kết quả sau:
Value : [('Age', 7), ('Name', 'Zara')]
▪ dict.keys() - Trả về danh sách các key của từ điển dict
Ví dụ:
dict = {'Name': 'Zara', 'Age': 7}
print "Value : %s" % dict.keys()
Khi chạy chương trình trên, nó tạo ra kết quả sau:
Value : ['Age', 'Name']
▪ dict.setdefault(key, default=None) - Tương tự như get(), nhưng sẽ đặt dict[key]
= default nếu key chưa có trong dict
Ví dụ:
dict = {'Name': 'Zara', 'Age': 7}
84 BÀI 2: KIỂU DỮ LIỆU
TÓM TẮT
Trong bài này, học viên tìm hiểu:
▪ Cách sử dụng cơ bản với biến bao gồm tạo biến, sử dụng hàm print với biến, xoá
biến, gán biến và phân biến biến cục bộ - toàn cục
▪ Cách sử dụng các biến tiêu chuẩn của Python bao gồm số, chuỗi, list, tuple và
dictionary thông qua các ví dụ
86 BÀI 2: KIỂU DỮ LIỆU
▪ Nắm vững cách sử dụng các loại toán tử phổ biến trong Python bao gồm toán tử số
học, so sánh, gán, bitwise, logic, membership và nhận dạng
▪ Hiểu được mức độ ưu tiên giữa các toán tử khi chạy chương trình
Ví dụ:
a = 21
b = 10
# +
print ("a + b : ", a + b)
# -
print ("a - b : ", a - b)
# *
print ("a * b : ", a * b)
# /
print ("a / b : ", a / b)
# %
print ("a % b : ", a % b)
# số mũ (luỹ thừa)
print ("a ** b : ", a ** b)
# Chia làm tròn
print ("a // b : ", a // b)
Điều này tạo ra kết quả sau
a + b : 31
a - b : 11
a * b : 210
a / b : 2.1
a % b : 1
a ** b : 16679880978201
a // b : 2
90 BÀI 3: SỬ DỤNG TOÁN TỬ VÀ TOÁN HẠNG
Ví dụ:
a = 4
b = 5
# Bằng
print ("a == b : ", a == b)
# Không bằng
print ("a != b : ", a != b)
# Lớn hơn
print ("a > b : ", a > b)
# Nhỏ hơn
print ("a < b : ", a < b)
# Lớn hơn hoặc bằng
print ("a >= b : ", a >= b)
# Ít hơn hoặc bằng
print ("a <= b : ", a <= b)
Điều này tạo ra kết quả sau
a == b : False
a != b : True
a > b : False
a < b : True
a >= b : False
a <= b : True
BÀI 3: SỬ DỤNG TOÁN TỬ VÀ TOÁN HẠNG 91
Ví dụ:
# Gán
a = 10
# Gán cộng
a += 5
print ("a += 5 : ", a)
# Gán trừ
a -= 5
print ("a -= 5 : ", a)
# Gán nhân
a *= 5
print ("a *= 5 : ", a)
# Gán trừ
a /= 5
print ("a /= 5 : ",a)
# Gán chia lấy dư
a %= 3
print ("a %= 3 : ", a)
# Gán luỹ thừa
a **= 2
print ("a **= 2 : ", a)
# Gán chia làm tròn
92 BÀI 3: SỬ DỤNG TOÁN TỬ VÀ TOÁN HẠNG
a //= 3
print ("a //= 3 : ", a)
Điều này tạo ra kết quả sau
a += 5 : 105
a -= 5 : 100
a *= 5 : 500
a /= 5 : 100.0
a %= 3 : 1.0
a **= 2 : 1.0
a //= 3 : 0.0
Ví dụ:
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
# Binary AND
c = a & b # 12 = 0000 1100
print ("a & b : ", c)
# Binary OR
c = a | b # 61 = 0011 1101
print ("a | b : ", c)
# Binary XOR
c = a ^ b # 49 = 0011 0001
print ("a ^ b : ", c)
# Binary Ones Complement
c = ~a; # -61 = 1100 0011
print ("~a : ", c)
# Binary Left Shift
c = a << 2; # 240 = 1111 0000
print ("a << 2 : ", c)
# Binary Right Shift
c = a >> 2; # 15 = 0000 1111
94 BÀI 3: SỬ DỤNG TOÁN TỬ VÀ TOÁN HẠNG
Ví dụ:
a = 10
b = 20
list = [1, 2, 3, 4, 5 ];
if ( a in list ):
print("Line 1 - a is available in the given list")
else:
BÀI 3: SỬ DỤNG TOÁN TỬ VÀ TOÁN HẠNG 95
print("Line 1 - a is not available in the given list")
if ( b not in list ):
print("Line 2 - b is not available in the given list")
else:
print("Line 2 - b is available in the given list")
a = 2
if ( a in list ):
print("Line 3 - a is available in the given list")
else:
print("Line 3 - a is not available in the given list")
Khi thực hiện chương trình trên, nó tạo ra kết quả sau
Line 1 - a is not available in the given list
Line 2 - b is not available in the given list
Line 3 - a is available in the given list
Ví dụ:
a = 20
b = 20
if ( a is b ):
print("Line 1 - a and b have same identity")
else:
print("Line 1 - a and b do not have same identity")
if ( id(a) == id(b) ):
print("Line 2 - a and b have same identity")
else:
96 BÀI 3: SỬ DỤNG TOÁN TỬ VÀ TOÁN HẠNG
TÓM TẮT
▪ Trong bài này, học viên phải nắm vững cách sử dụng các loại toán tử phổ biến trong
Python bao gồm toán tử số học, so sánh, gán, bitwise, logic, membership và nhận
dạng
▪ Hiểu được mức độ ưu tiên giữa các toán tử khi chạy chương trình
BÀI 3: SỬ DỤNG TOÁN TỬ VÀ TOÁN HẠNG 99
e = y ** w
f = w * x
g = y / x
print(a,b,c,d,e,f,g)
b.
w = 20
x = 10
y = 15
z = 2
result_1 = (w+x)*y/z
result_2 = ((w+x)*x)/z
result_3 = ((w+x)*(y/z))**z
result_4 = w+(x*y)/z
print('The value of (w+x)* y/z is',result_1)
print('The value of ((w+x)*x)/z is',result_2)
print('The value of ((w+x)*(y/z))**z is',result_3)
print('The value of w+(x*y)/z is',result_4)
c.
a = False
b = False
x = not(a)
y = not(b)
print(a or b)
print(x or y)
print(a or x)
print(x or b)
print(a and b)
print(a and x)
print(y and b)
print(x and y)
d.
a = 1
b = 20
if a < 10:
BÀI 3: SỬ DỤNG TOÁN TỬ VÀ TOÁN HẠNG 101
print('Demo string 1')
else:
print('Demo string 2')
e.
a = 1
b = 20
if a < 10 or b == 20:
print('Demo string 1')
else:
print('Demo string 2')
f.
a = 1
b = 20
if a < 10 and not(b == 20):
print('Demo string 1')
else:
print('Demo string 2')
g.
x = 3
y = 6
z = 3
if x > 3:
print('Demo String 1')
else:
print('Demo String 2')
if x != z:
print('Demo String 3')
else:
print('Demo String 4')
if y < x:
print('Demo String 5')
else:
print('Demo String 6')
if y == x:
102 BÀI 3: SỬ DỤNG TOÁN TỬ VÀ TOÁN HẠNG
▪ Giải thích cách sử dụng câu lệnh điều kiện của if cũng như các biến thể của nó và
vòng lặp bao gồm for và while
▪ Mô tả cú pháp cho các câu lệnh có điều kiện và vòng lặp trong Python
▪ Xác định được khi nào sử dụng vòng lặp for và while
▪ Lập trình được các tác vụ bằng câu lệnh điều kiện và vòng lặp trong Python
if expression:
statement(s)
Nói cách khác, câu lệnh if-else bao gồm 2 khối trong đó một câu lệnh hoặc tập hợp các
câu lệnh đầu tiên chỉ thực thi khi điều kiện của câu lệnh if là đúng. Nếu điều kiện của
câu lệnh if là sai thì một câu lệnh hoặc tập hợp các câu lệnh trong phần else sẽ được
thực hiện.
Ví dụ:
history = 45
science = 57
if (history > science):
print('History marks greater than Science')
else:
print('Science marks greater than History')
Khi đoạn code trên được thực thi, nó tạo ra kết quả sau:
Science marks greater than History
Trong ví dụ trên, nếu điểm lịch sử lớn hơn điểm khoa học, điều kiện if sẽ được thỏa
mãn tức là TRUE và hàm print tương ứng sẽ được thực thi. Ngược lại, nếu điểm lịch sử
nhỏ hơn điểm khoa học, điều kiện if không thỏa tức là FALSE, thì hàm print của else
sẽ được thực thi.
if (marks<20):
print('Student Failed')
elif (marks>=20 and marks<40):
print('Student passed with B Grade')
else:
print('Student passed with A Grade')
Khi đoạn code trên được thực thi, nó tạo ra kết quả sau:
Enter marks from 0-50: 35
108 BÀI 4: CÂU LỆNH ĐIỀU KIỆN VÀ VÒNG LẶP
Welcome Tia
Welcome Jenny
Welcome David
Ví dụ:
a = 'Hello World'
i=0
while i <= len(a):
i+=1
pass
print("The value of i is: ", i)
Khi đoạn code trên được thực thi, nó tạo ra kết quả sau:
The value of i is : 12
Trong chương trình trên, chúng ta cần tạo một vòng lặp trống trong đó chúng ta lưu
trữ tất cả các giá trị của chuỗi 'Hello World'. Tiếp theo, một biến đếm i được bắt đầu.
Đối với điều này, sử dụng hàm len() để tính số lượng chữ cái trong chuỗi hiện tại. Vòng
lặp while được xác định sao cho nó hiển thị số lượng chữ cái chính xác trong chuỗi.
Biến đếm được tăng thêm một cho mỗi lần lặp miễn là tất cả các chữ cái trong chuỗi
được tính đến khi thực hiện chương trình.
BÀI 4: CÂU LỆNH ĐIỀU KIỆN VÀ VÒNG LẶP 121
TÓM TẮT
Trong bài này, học viên tìm hiểu:
▪ Cách sử dụng câu lệnh điều kiện của if và các biến thể của nó
▪ Viết chương trình Python cho các tác vụ dựa trên câu lệnh điều kiện và vòng lặp
122 BÀI 4: CÂU LỆNH ĐIỀU KIỆN VÀ VÒNG LẶP
BÀI TẬP
Câu 1: Làm thế nào để sử dụng lệnh if và các biến thể của nó trong Python? Cho ví
dụ.
Câu 2: Tại sao sử dụng lệnh if và các biến thể của nó?
Câu 3: Làm thế nào để viết một vòng lặp for, while trong Python? Cho ví dụ
Câu 4: Viết chương trình nhập vào 4 số nguyên. Tìm và xuất ra số lớn nhất
Hướng dẫn: Ta có 4 số nguyên a, b, c, d. Tìm 2 số nguyên lớn nhất x, y của 2 cặp (a,
b) và (c, d). Sau đó so sánh 2 số nguyên x, y để tìm ra số nguyên lớn nhất
Câu 5: Viết chương trình giải phương trình bậc 2: ax2 + bx + c = 0, với a, b, c nhập
vào từ bàn phím
Câu 6: Viết chương trình nhập tìm các số chia hết cho 5 và 7 trong khoảng 1500 –
2700
Câu 7: Viết chương trình để xuất dấu * như sau , sử dụng vòng lặp for lồng nhau
*
**
***
****
*****
****
***
**
*
Câu 8: Viết chương trình nhận một chuỗi ký tự từ người dùng và đảo ngược từ đó
Câu 9: Viết chương trình nhập một dãy số và đếm số chẵn và lẻ trong dãy số đó
Ví dụ: number = (1, 2, 3, 4, 5, 6, 7, 8, 9)
Câu 10: Viết chương trình xuất tất cả các số từ 0 đến 100 ngoại trừ số 10 và số 20
Câu 11: Viết chương trình chấp nhận một chuỗi ký tự bao gồm số và chữ, sau đó tính
tổng số chữ số và chữ cái
Câu 12: Viết chương trình kiểm tra xem một chuỗi có đại diện cho một số nguyên hay
không. Ví dụ: Input a string: Python
The string is not an integer
BÀI 5: LẬP TRÌNH PYTHON 123
▪ Hiểu cách định nghĩa hàm và phạm vi biến cho việc lập trình
▪ Hiểu cách các module được tải bằng câu lệnh import; kiểm tra các module được phát
hiện thông qua các vị trí tìm kiếm; và tổ chức thành package cho việc lập trình
▪ Hiểu cấu trúc của hệ thống file bao gồm cách mở, đóng và xoá file với các chế độ
khác nhau
▪ Mô tả được lỗi và ngoại lệ, xử lý được khi chúng xảy ra và định nghĩa, sử dụng ngoại
lệ tuỳ chỉnh
▪ Mô tả được các khái niệm liên quan đến lập trình hướng đối tượng; phân biệt được
lớp và đối tượng
▪ Tạo các lớp đóng vai trò là bản thiết kế cho mọi đối tượng trong Python; tìm hiểu
cách lập trình, gọn gàng và hiệu quả
5.1 Hàm
Hàm là một khối code có tổ chức, có thể tái sử dụng để thực hiện một hành động
đơn lẻ có liên quan. Cung cấp tính mô-đun tốt hơn cho ứng dụng và mức độ tái sử dụng
code cao.
Python cung cấp cho người dùng nhiều hàm sẵn như print(), v.v. nhưng người dùng
cũng có thể tạo các hàm của riêng mình. Các hàm này được gọi là hàm do người dùng
định nghĩa.
▪ Câu lệnh đầu tiên của một hàm có thể là một câu lệnh tùy chọn - docstring
▪ Khối code trong hàm bắt đầu bằng dấu hai chấm (:) và được thụt vào đầu dòng
▪ Câu lệnh return [biểu thức] thoát khỏi một hàm, tùy chọn trả lại một biểu thức khi
gọi hàm. Câu lệnh return không có đối số, None
5.1.2 Cú pháp
def functionname(parameters):
"function_docstring"
function_suite
return [expression]
Theo mặc định, các tham số có hành vi theo vị trí và người dùng cần thông báo
cho chúng theo cùng thứ tự mà chúng đã được xác định.
Ví dụ: Hàm sau lấy một chuỗi làm tham số đầu vào và xuất nó trên màn hình tiêu
chuẩn.
def printme(str):
"This prints a passed string into this function"
Print(str)
return
Để hiểu hơn về docstring, trong phần này sẽ được thảo luận. Chuỗi mô tả tài liệu
trong Python hay thường được gọi là docstring, là một chuỗi ký tự và nó được sử dụng
trong định nghĩa lớp, mô-đun, hàm hoặc phương thức.
docstring là rất hữu ích để hiểu về chức năng của phần lớn các đoạn code, cụ thể
là mục đích chung của bất kỳ class, module hoặc hàm nào, trong khi các chú thích
(comment) được sử dụng cho đoạn code, câu lệnh và biểu thức, có quy mô nhỏ hơn.
Chúng là một đoạn văn bản mô tả được viết bởi người lập trình để biết dòng code hoặc
biểu thức có chức năng là gì và cũng dành cho người lập trình khác muốn đóng góp cho
dự án đó.
5.1.2.3 Một số phương thức được tích hợp để truy cập docstring
Tất cả các hàm, class, phương thức được tích hợp sẵn đều có một đoạn văn bản
docstring mô tả chức năng của nó. Người dùng có thể truy cập bằng một trong hai
cách.
▪ Thuộc tính doc
▪ Hàm help
Ví dụ:
import math
Ở đây, đang duy trì tham chiếu của đối tượng đã chuyển và các giá trị nối thêm
trong cùng một đối tượng. Vì vậy, điều này sẽ tạo ra kết quả sau:
Values inside the function: [10, 20, 30, [1, 2, 3, 4]]
Values outside the function: [10, 20, 30, [1, 2, 3, 4]]
Có một ví dụ khác trong đó đối số được chuyển theo tham chiếu và tham chiếu đang
bị ghi đè bên trong hàm được gọi.
# Function definition is here
def changeme(mylist):
"This changes a passed list into this function"
mylist = [1,2,3,4] # This would assig new reference in mylist
print("Values inside the function: ", mylist)
return
# Now you can call changeme function
mylist = [10,20,30]
changeme( mylist )
print("Values outside the function: ", mylist)
Tham số mylist là cục bộ của hàm changeme. Thay đổi mylist trong hàm không
ảnh hưởng đến mylist. Điều này sẽ tạo ra kết quả sau:
Values inside the function: [1, 2, 3, 4]
Values outside the function: [10, 20, 30]
▪ Mặc dù có vẻ như lambda là phiên bản một dòng của hàm, nhưng chúng không
tương đương với các câu lệnh nội tuyến trong C hoặc C++, mục đích của chúng là
bằng cách chuyển phân bổ ngăn xếp hàm trong khi gọi vì lý do hiệu suất
Cú pháp của các hàm lambda chỉ chứa một câu lệnh duy nhất, như sau:
lambda [arg1 [,arg2,.....argn]]:expression
Sau đây là ví dụ cho thấy cách thức hoạt động của hàm lambda:
# Function definition is here
sum = lambda arg1, arg2: arg1 + arg2;
# Now you can call sum as a function
print("Value of total : ", sum( 10, 20 ))
print("Value of total : ", sum( 20, 20 ))
Khi đoạn code trên được thực thi, nó tạo ra kết quả sau:
Value of total : 30
Value of total : 40
5.2 Module
Một module cho phép sắp xếp hợp lý code Python. Nhóm code liên quan vào một
module làm cho mã dễ hiểu và dễ sử dụng hơn. Module là một đối tượng Python với
các thuộc tính được đặt tên tùy ý mà có thể liên kết và tham chiếu.
Đơn giản, một module là một file bao gồm code Python, có thể định nghĩa các hàm,
class và biến. Một module cũng có thể bao gồm code có thể chạy được.
134 BÀI 5: LẬP TRÌNH PYTHON
đệm được thực hiện với kích thước bộ đệm được chỉ định. Nếu giá trị âm, kích thước
bộ đệm là mặc định của hệ thống
Dưới đây là danh sách các chế độ mở file khác nhau:
▪ r: mở một file chỉ để đọc. Con trỏ tệp được đặt ở đầu file. Đây là chế độ mặc định
▪ rb: mở một file chỉ để đọc ở định dạng nhị phân. Con trỏ tệp được đặt ở đầu tệp.
Đây là chế độ mặc định
▪ r+: mở một file cho cả đọc và viết. Con trỏ tệp đặt ở đầu file
▪ rb+: mở một file cho cả đọc và viết ở định dạng nhị phân. Con trỏ tệp đặt ở đầu file
▪ w: mở một file chỉ để viết. Viết đè nếu file tồn tại. Nếu file không tồn tại, hãy tạo
một file mới để viết
▪ wb: mở một file chỉ để ghi ở định dạng nhị phân. Viết đè nếu file tồn tại. Nếu file
không tồn tại, hãy tạo một file mới để viết
▪ w+: mở một file cho cả viết và đọc. Viết đè nếu file tồn tại. Nếu file không tồn tại,
hãy tạo một file mới để đọc và viết
▪ wb+: mở một file để viết và đọc ở định dạng nhị phân. Viết đè nếu file tồn tại. Nếu
file không tồn tại, hãy tạo một file mới để đọc và viết
▪ a: mở một file để nối thêm. Con trỏ ở cuối nếu file tồn tại. Tức là file đang ở chế độ
nối thêm. Nếu file không tồn tại, nó sẽ tạo một file mới để viết
▪ ab: mở một file để nối thêm ở định dạng nhị phân. Con trỏ ở cuối nếu file tồn tại.
Tức là file đang ở chế độ nối thêm. Nếu file không tồn tại, nó sẽ tạo một file mới để
viết
▪ a+: mở một file cho cả việc nối thêm và đọc. Con trỏ ở cuối nếu file tồn tại. File mở
ở chế độ nối thêm. Nếu file không tồn tại, nó sẽ tạo một file mới để đọc và viết
▪ ab+: mở một file cho cả việc nối thêm và đọc ở định dạng nhị phân. Con trỏ ở cuối
nếu file tồn tại. File mở ở chế độ nối thêm. Nếu file không tồn tại, nó sẽ tạo một file
mới để đọc và viết
Phương thức rename() nhận hai đối số, tên file hiện tại và tên file mới. Cú pháp như
sau:
os.rename(current_file_name, new_file_name)
Ví dụ: sau đây là ví dụ đổi tên tệp hiện có test1.txt
import os
# Rename a file from test1.txt to test2.txt
os.rename( "test1.txt", "test2.txt" )
▪ ArithmeticError: class cơ sở cho tất cả các lỗi xảy ra khi tính toán số
▪ OverflowError: tăng lên khi một phép tính vượt quá giới hạn tối đa cho một loại số
▪ FloatingPointError: tăng lên khi tính toán dấu phẩy động không thành công
▪ ZeroDivisionError: tăng lên khi phép chia cho 0 diễn ra đối với tất cả các loại số
▪ AssertionError: tăng lên trong trường hợp thất bại của câu lệnh Assert
▪ AttributeError: tăng trong trường hợp tham chiếu hoặc gán thuộc tính không thành
công
▪ EOFError: xảy ra khi không có ngõ vào từ hàm raw_input() hoặc input() và đến
cuối file
▪ ImportError: tăng lên khi một câu lệnh import không thành công
▪ KeyboardInterrupt: xảy ra khi người dùng làm gián đoạn quá trình thực thi chương
trình, thường bằng cách nhấn Ctrl+c
▪ LookupError: class cơ sở cho tất cả các lỗi tra cứu
▪ IndexError: xảy ra khi không tìm thấy chỉ mục trong một chuỗi
▪ KeyError: xảy ra khi không tìm thấy key được chỉ định trong dictionary
▪ NameError: xảy ra khi không tìm thấy mã định danh trong namespace cục bộ hoặc
toàn cục
▪ UnboundLocalError: xảy ra khi cố gắng truy cập một biến cục bộ trong một hàm
hoặc phương thức nhưng không có giá trị nào được gán cho nó
▪ EnvironmentError: class cơ sở cho tất cả các exception xảy ra bên ngoài môi
trường Python
▪ IOError: xảy ra khi thao tác input/output không thành công, chẳng hạn như câu
lệnh print hoặc hàm open() khi cố mở một file không tồn tại
▪ OSError: tăng lên cho các lỗi liên quan đến hệ điều hành
▪ SyntaxError: xảy ra khi có lỗi trong cú pháp Python
▪ IndentationError: tăng lên khi thụt đầu dòng không được chỉ định đúng cách
▪ SystemError: xảy ra khi trình thông dịch tìm thấy sự cố nội bộ, nhưng khi gặp lỗi
này, trình thông dịch Python không thoát
▪ SystemExit: xảy ra khi thoát trình thông dịch Python bằng cách sử dụng hàm
sys.exit(). Nếu không được xử lý trong code, khiến trình thông dịch thoát ra
▪ TypeError: xảy ra khi một thao tác hoặc hàm được thử không hợp lệ đối với loại dữ
liệu đã chỉ định
BÀI 5: LẬP TRÌNH PYTHON 147
▪ ValueError: xảy ra khi hàm tích hợp sẵn cho một loại dữ liệu có loại đối số hợp lệ,
nhưng các đối số có giá trị không hợp lệ được chỉ định
▪ RuntimeError: xảy ra khi lỗi được tạo không thuộc bất kỳ danh mục nào
▪ NotImplementedError: xảy ra khi một phương thức trừu tượng cần được triển
khai trong một class kế thừa không thực sự được triển khai
return ((Temperature-273)*1.8)+32
print(KelvinToFahrenheit(273))
print(int(KelvinToFahrenheit(505.78)))
print(KelvinToFahrenheit(-5))
Điều này tạo ra kết quả sau:
32.0
451
Traceback (most recent call last):
File "test.py", line 9, in <module>
print KelvinToFahrenheit(-5)
File "test.py", line 4, in KelvinToFahrenheit
assert (Temperature >= 0),"Colder than absolute zero!"
AssertionError: Colder than absolute zero!
Người dùng cũng có thể sử dụng câu lệnh except mà không có exception nào được
định nghĩa như sau:
try:
You do your operations here;
......................
except:
If there is any exception, then execute this block.
......................
else:
If there is no exception then execute this block.
Loại câu lệnh try-except này nắm bắt tất cả các trường hợp exception xảy ra. Tuy
nhiên, việc sử dụng loại câu lệnh try-except này không được coi là một phương pháp
lập trình tốt, bởi vì nó bắt được tất cả các exception nhưng không khiến lập trình viên
xác định nguyên nhân cốt lõi của vấn đề có thể xảy ra.
try:
return int(var)
except ValueError as
Argument:
print("The argument does not contain numbers\n", Argument)
# Call above function here.
temp_convert("xyz")
Điều này tạo ra kết quả sau:
The argument does not contain numbers
invalid literal for int() with base 10: 'xyz'
▪ Biến empCount là một biến class có giá trị được chia sẻ giữa tất cả các instance của
lớp này. Điều này có thể được truy cập dưới dạng Employee.empCount từ bên trong
class hoặc bên ngoài class
▪ Phương thức đầu tiên __init__() là một phương thức đặc biệt, được gọi là hàm tạo
class hoặc phương thức khởi tạo mà Python gọi khi tạo một instance mới của lớp
này
▪ Khai báo các phương thức khác của class giống như các hàm thông thường, ngoại
trừ đối số đầu tiên của mỗi phương thức là self. Python thêm đối số self vào list;
không cần đưa nó vào khi gọi các phương thức
pt3 = pt1
print(id(pt1), id(pt2), id(pt3)) # prints the ids of the obejcts
del pt1
del pt2
del pt3
Khi đoạn code trên được thực thi, nó tạo ra kết quả sau:
3083401324 3083401324 3083401324
Point destroyed
Lưu ý - Tốt nhất nên xác định các class trong file riêng biệt, sau đó import chúng vào
file chương trình chính.
5.5.10 Ẩn dữ liệu
Các thuộc tính của một đối tượng có thể hiển thị hoặc không hiển thị bên ngoài định
nghĩa class. Người dùng cần đặt tên cho các thuộc tính có tiền tố gạch dưới kép và
những thuộc tính đó sẽ không hiển thị trực tiếp.
Ví dụ:
class JustCounter:
BÀI 5: LẬP TRÌNH PYTHON 161
__secretCount = 0
def count(self):
self.__secretCount += 1
print(self.__secretCount)
counter = JustCounter()
counter.count()
counter.count()
print(counter.__secretCount)
Khi đoạn code trên được thực thi, nó tạo ra kết quả sau:
1
2
Traceback (most recent call last):
File "test.py", line 12, in <module>
print counter.__secretCount
AttributeError: JustCounter instance has no attribute '__secretCount'
Python bảo vệ các thành viên đó bằng cách thay đổi tên bên trong để bao gồm tên
class. Có thể truy cập các thuộc tính như object._className__attrName. Nếu thay thế
dòng cuối cùng như sau, thì nó phù hợp:
class JustCounter:
__secretCount = 0
def count(self):
self.__secretCount += 1
print(self.__secretCount)
counter = JustCounter()
counter.count()
counter.count()
print(counter._JustCounter__secretCount)
Khi đoạn code trên được thực thi, nó tạo ra kết quả sau:
1
2
2
162 BÀI 5: LẬP TRÌNH PYTHON
TÓM TẮT
Trong bài này, học viên tìm hiểu:
▪ Cách các module được tải bằng câu lệnh import; kiểm tra các module được phát hiện
thông qua các vị trí tìm kiếm; và tổ chức thành package cho việc lập trình
▪ Cấu trúc của hệ thống file bao gồm cách mở, đóng và xoá file với các chế độ khác
nhau
▪ Mô tả được lỗi và ngoại lệ, xử lý được khi chúng xảy ra và định nghĩa, sử dụng ngoại
lệ tuỳ chỉnh
▪ Mô tả được các khái niệm liên quan đến lập trình hướng đối tượng; phân biệt được
lớp và đối tượng
▪ Tạo các lớp đóng vai trò là bản thiết kế cho mọi đối tượng trong Python; tìm hiểu
cách lập trình, gọn gàng và hiệu quả
BÀI 5: LẬP TRÌNH PYTHON 163
BÀI TẬP
I. Hàm
Câu 1: Tìm số lớn nhất trong ba số
Câu 2: Tìm số lớn nhất và nhỏ nhất trong bốn số
Câu 3: Tính tổng và tích của tất cả các số trong một list
Sample List : (8, 2, 3, -1, 7)
Expected Output : 19, -336
Câu 4: Đảo ngược chuỗi đầu vào
Sample String : "1234abcd"
Expected Output : "dcba4321"
Câu 5: Tính giai thừa của một số (số nguyên không âm). Hàm chấp nhận số làm đối
số
Câu 6: Đếm số lượng chữ hoa và chữ thường cho một chuỗi đầu vào
Sample String : 'The quick Brow Fox'
Expected Output :
No. of Upper case characters : 3
No. of Lower case Characters : 12
Câu 7: Viết hàm nhận một số làm tham số và kiểm tra xem số đó có phải là số nguyên
tố hay không
Chú ý: Số nguyên tố là số tự nhiên lớn hơn 1, chia hết cho 1 và chính nó
Câu 8: Phát hiện số lượng biến cục bộ được khai báo trong một hàm
Câu 9: Viết một hàm nhận một số thực làm tham số để chuyển đổi độ sang radian và
một hàm khác nhận một số thực làm tham số để chuyển đổi radian sang độ
Câu 10: Viết hàm nhận hai số thực làm tham số của chiều cao và bán kính để tính thể
tích và diện tích hình trụ
164 BÀI 5: LẬP TRÌNH PYTHON
Câu 11: Viết hàm nhận hai số thực làm tham số của góc và bán kính để tính độ dài
cung của một hình tròn
Câu 10: Tạo 26 file văn bản có tên A.txt, B.txt, v.v. cho đến Z.txt.
III. Xử lý ngoại lệ và xác nhận
Câu 1: Viết chương trình nhập thực hiện phép chia và xử lý ngoại lệ ZeroDivisionError
khi chia một số cho 0
Câu 2: Viết chương trình nhắc người dùng nhập một số và đưa ra một ngoại lệ
ValueError nếu đầu vào không phải là một số hợp lệ
Câu 3: Viết chương trình mở file và xử lý ngoại lệ FileNotFoundError nếu file không tồn
tại
Câu 4: Viết chương trình nhắc người dùng nhập hai số và đưa ra ngoại lệ TypeError
nếu đầu vào không phải là số
Câu 5: Viết chương trình thực thi một thao tác trên list và xử lý ngoại lệ IndexError
nếu chỉ mục nằm ngoài phạm vi
Câu 6: Viết chương trình Python thực thi thao tác danh sách và xử lý ngoại lệ
AttributeError nếu thuộc tính không tồn tại
IV. Hướng đối tượng
Câu 1: Tạo một lớp Vehicle mà không có bất kỳ biến và phương thức nào
Câu 2: Tạo lớp Vehicle với các thuộc tính đối tượng max_speed và mileage
Câu 3: Tạo một class đại diện cho một Circle. Bao gồm các phương pháp để tính diện
tích và chu vi của nó
Câu 4: Tạo một class person. Bao gồm các thuộc tính như tên, quốc gia và ngày sinh.
Thực hiện một phương pháp để xác định tuổi của người đó
Lưu ý: sử dụng gói datetime
Câu 5: Tạo class calculator. Bao gồm các phương thức cho các phép tính số học cơ bản
Câu 6: Tạo một class đại diện cho một shape. Bao gồm các phương pháp để tính diện
tích và chu vi của nó. Triển khai các lớp con cho các hình dạng khác nhau như hình
tròn, hình tam giác và hình vuông
Câu 7: Tạo một class đại diện cho một shopping cart. Bao gồm các phương pháp để
thêm và xóa các mặt hàng và tính tổng giá
Câu 8: Tạo class đại diện cho một bank. Bao gồm các phương pháp quản lý tài khoản
và giao dịch của khách hàng
BÀI 5: LẬP TRÌNH PYTHON 167