3. Giới thiệu ngôn ngữ python
Python lần đầu được giới thiệu vào tháng 12/1989
Tác giả là Guido van Rossum (Hà Lan)
Sinh năm 1956
Hiện đang làm cho Google
Python kế thừa từ ngôn ngữ ABC
Python 2 được giới thiệu năm 2000
Hỗ trợ unicode
Mã python 2 rất phổ biến
Python 3 được phát hành năm 2008
Hiện đã có phiên bản 3.9
Python 4? Năm 2023 (dự kiến)
3
4. Giới thiệu ngôn ngữ python
4
Là ngôn ngữ có mã nguồn mở
Là ngôn ngữ kịch bản (scripting programming language)
Thích hợp với DevOps (người viết code cũng là người vận hành)
Khai báo biến tự nhiên, phong phú và động
Nhiều phép tính cấp cao được cung cấp sẵn
Thường được thông dịch thay vì biên dịch
• Biên dịch: dịch toàn bộ thành mã máy rồi thực thi
• Thông dịch: dịch từng lệnh, xong lệnh nào chạy lệnh đó
Những người cuồng python (pythonista) cho rằng ngôn
ngữ này trong sáng và tiện dụng đến mức ta có thể dùng
nó cho mọi khâu lập trình (chứ không phải chỉ viết script)
5. Giới thiệu ngôn ngữ python
5
Vừa hướng thủ tục, vừa hướng đối tượng
Hỗ trợ module và hỗ trợ gói (package)
Xử lý lỗi bằng ngoại lệ (exception)
Kiểu dữ liệu động ở mức cao
Có khả năng tương tác với các module viết bằng ngôn
ngữ lập trình khác
Có thể nhúng vào ứng dụng như một giao tiếp kịch
bản
(scripting interface)
6. Ưu điểm của ngôn ngữ python
6
Có ngữ pháp đơn giản, dễ đọc
Viết mã ngắn gọn hơn những chương trình tương đương
được viết trong C, C++, C#, Java,…
Có các bộ thư viện chuẩn và các module ngoài, đáp ứng
gần như mọi nhu cầu lập trình
Có khả năng chạy trên nhiều nền tảng (Windows, Linux,
Unix, OS/2, Mac, Amiga, máy ảo .NET, máy ảo Java, Nokia
Series 60,…)
Có cộng đồng lập trình rất lớn, hệ thống thư viện chuẩn,
mã nguồn chia sẻ nhiều
7. Nhưng python cũng có nhược điểm
7
Chương trình chạy chậm
Giao tiếp với các thư viện viết bằng các ngôn ngữ khác
tương đối khó khăn
Yếu trong hỗ trợ tính toán trên di động
Cách viết khối lệnh dễ gây nhầm lẫn cho người mới bắt
đầu lập trình
Gỡ lỗi đòi hỏi kinh nghiệm
Kém hỗ trợ các cơ sở dữ liệu
10. Khởi chạy
Python có 2 chế độ thực thi
Chế độ chương trình: chỉ ra chương trình cần thực hiện
• Trình dịch python sẽ nạp, dịch và chạy chương trình đó
Chế độ dòng lệnh: gõ và chạy từng lệnh một
Chế độ thực thi: “python abc.py” chạy file abc.py
10
11. Khởi chạy
Chế độ dòng lệnh: “python”
Lúc này trình thông dịch python sẽ chờ người dùng gõ từng
dòng lệnh
Gõ dòng lệnh nào xong, python chạy liền dòng đó
Chấm dứt chế độ này bằng cách gõ lệnh: “quit()”
11
12. Soạn thảo mã python
Làm thế nào để viết chương trình python (.py)?
Dùng phần mềm soạn thảo văn bản thô (txt) bất kỳ để soạn và
lưu file ở dạng .py rồi dịch bằng python
Có những phần mềm thích hợp cho việc này hơn
IDLE
Sublime Text
Notepad++
PyCharm
Spyder
Rodeo
…
Jupyter: chạy trên trình duyệt, thích hợp với thử nghiệm
và giảng dạy
12
13. Biên dịch mã python
13
Trường hợp cần thiết, mã python có thể được biên dịch,
kết quả biên dịch là chương trình dạng bytecode cho máy
ảo python
Tương tự như trường hợp của ngôn ngữ java
Mã lệnh dịch được lưu vào file với đuôi .pyc
Việc biên dịch có nhiều lợi điểm, chẳng hạn như khi sử
dụng câu lệnh import một thư viện nào đó, thì có thể sử
dụng luôn mã pyc có sẵn thay vì phải dịch lại từ đầu
Tăng tốc độ thực hiện chương trình
15. Biến
15
Biến = vùng bộ nhớ được đặt tên (để dễ thao tác)
Ví dụ:
n = 12
n = n +
0.1
# biến n là kiểu nguyên
# biến n chuyển sang kiểu
thực
Biến trong python:
Có tên, phân biệt chữ hoa/thường
Không cần khai báo trước
Không cần chỉ ra kiểu dữ liệu
Có thể thay đổi sang kiểu dữ liệu khác
Nên gán giá trị ngay khi bắt đầu xuất hiện
Chú ý: python cho phép viết ghi chú trong chương trình
bằng cách đặt sau dấu thăng (#)
16. Biến
Tên biến có thể chứa chữ cái hoặc chữ số hoặc gạch dưới
(_), kí tự bắt đầu không được dùng chữ số
Không được trùng với từ khóa (tất nhiên)
Từ python 3 được dùng chữ cái unicode
Tất cả mọi biến trong python đều là các đối tượng, vì thế
nó có kiểu và vị trí trong bộ nhớ (id)
16
17. Khai báo chuỗi
17
Dữ liệu kiểu chuỗi rất quan trọng trong lập trình python,
tương tự như các ngôn ngữ lập trình khác
Ví dụ:
# chuỗi thông thường
name = 'matt'
# chuỗi trong nó có chứa dấu nháy đơn
with_quote = "I ain't gonna"
# chuỗi có nội dung nằm trên nhiều dòng
longer = """This string
has multiple lines in
it"""
Nguyên tắc khai báo chuỗi:
mở đầu sao - kết thúc vậy
Nội dung trên 1 dòng: dùng
18. Chuỗi thoát (escape sequence)
18
Escape sequence là một phương pháp để viết các kí tự
đặc biệt (không thể viết theo lối thông thường)
Tương tự như các ngôn ngữ lập trình khác
Cách viết Ý nghĩa Thuật ngữ
a Kí tự cảnh báo (phát ra một tiếng bíp nếu in ra) Alert
b Kí tự xóa trước (dịch con trỏ về phía trước 1 ô) Backspace
n Kí tự dòng mới (dịch con trỏ xuống dòng dưới) Linefeed
r Kí tự trở về (dịch con trỏ về đầu dòng) Carriage return
t Kí tự tab (dịch con trỏ đi 1 dấu tab) Tab
Kí tự gạch chéo () Blackslash
' Kí tự dấu nháy đơn (') Single quote
" Kí tự dấu nháy kép (") Double quote
uxxxx Kí tự unicode bất kì có mã xxxx (dạng hex value)
19. Chuỗi thô (raw string)
Vấn đề: dễ nhầm lẫn khi các chuỗi có dấu gạch chéo ()
Chẳng hạn như khi viết tên file "c:teamview"
Python cho phép bỏ qua các chuỗi thoát bằng cách đánh
dấu chữ r vào trước chuỗi, định dạng này gọi là chuỗi thô
Cú pháp: r'nội dung chuỗi'
19
20. Khối lệnh
20
Python sử dụng khoảng trắng để phân biệt khối lệnh
age = int(input("Bạn bao nhiêu tuổi?
")) print("Ồ bạn đã", age, "tuổi
rồi!")
if age>=18:
print("Đủ tuổi đi bầu")
if age>100:
print("Có vẻ sai sai!")
else:
print("Nhỏ quá")
Chú ý:
Không quy định số lượng khoảng trắng
phải sử dụng
Các lệnh cùng một khối phải sử dụng cùng
số khoảng trắng
22. Xuất dữ liệu
22
Sử dụng hàm print để in dữ liệu ra màn hình
>>> print(42)
42
>>> print("a
=
", a)
a = 3.564
>>> print("a
=
n", a)
a =
3.564
>>> print("a"
,
"b")
a b
>>> print("a"
,
"b", sep="")
ab
>>> print(192
,
168, 178, 42,
sep=".")
192.168.178.42
>>> print("a", "b",
sep=":-)") a:-)b
23. Nhập dữ liệu
23
Sử dụng hàm input để nhập dữ liệu từ bàn phím
name = input("Tên bạn là gì? ")
print("Xin chào bạn " + name +
"!") age = input("Bạn bao nhiêu
tuổi? ")
print("Ồ, bạn đã " + age + "
tuổi rồi!")
Có thể kết hợp chuyển kiểu nếu
muốn tường minh
age = int(input("Bạn bao nhiêu tuổi?
")) print("Ồ bạn đã %d tuổi rồi!" %
age)
25. Kiểu số
25
Python cho phép viết số nguyên theo một số hệ cơ số
thông dụng trong lập trình
A = 1234 # hệ cơ số 10
B = 0xAF1 # hệ cơ số 16
C = 0o772 # hệ cơ số 8
D = 0b1001 # hệ cơ số 2
Sử dụng các hàm phù hợp để chuyển đổi từ số nguyên
thành string ở các hệ cơ số 10, 16, 8 hoặc 2
K = str(1234) # chuyển thành str ở hệ cơ số 10
L = hex(1234) # chuyển thành str ở hệ cơ số 16
M = oct(1234) # chuyển thành str ở hệ cơ số 8
N = bin(1234) # chuyển thành str ở hệ cơ số 2
26. Kiểu số
26
X = 12.34
Y = 314.15279e-
2
# dạng số nguyê
n
và phần mũ 10
Từ python 3, số nguyên không có giới hạn số chữ số
Số thực (float) trong python có thể viết theo dạng thông
thường hoặc dạng khoa học
Python hỗ trợ kiểu phức, với chữ j đại diện cho phần ảo
A =
3+4j B
= 2-2j
print(A
+B)
# sẽ in
ra
27. Phép toán
27
Python hỗ trợ nhiều phép toán số, logic, so sánh, phép
toán bit và phép kiểm tra tập
Các phép toán số thông thường: +, -, *, %, **
Python có 2 phép chia:
• Chia đúng (/):
• Chia nguyên (//):
10/3
10//
3
# 3.3333333333333335
# 3 (nhanh hơn
phép /)
Các phép logic: and, or, not
• Python không có phép xor logic, trường hợp muốn tính phép xor
thì thay bằng phép so sánh khác (bool(a) != bool(b))
Các phép so sánh:
Các phép toán bit:
Phép kiểm tra tập (in, not in):
<, <=, >, >=, !=,
==
&, |, ^, <<, >>
1 in [1, 2, 3]
29. Giải phương trình bậc 2
a = float(input("A =
")) b =
float(input("B = "))
c = float(input("C =
")) delta = b*b-4*a*c
if delta==0:
print("Nghiem kep: x = ",
str(-b/2/a))
if delta<0:
print("Phuong trinh vo
nghiem")
if delta>0:
print("X1 = " +
str((-b+delta**0.5)/2/a)) print("X2
= " + str((-b-delta**0.5)/2/a))
Nhập a,b,c kiểu
số thực và tính
delta
Biện luận các
trường hợp của
delta
Các khối lệnh con
được viết thụt
vào so với khối
cha
Tính căn bậc 2
bằng phép
lũy thừa 0.5
29
30. Tính n!
def
giaithua(n)
: gt = 1
for i in range(2,
n+1):
gt = gt * i
return gt
a = int(input("Nhập giá trị n:
"))
print("N! =", giaithua(a))
Định nghĩa hàm
với tham số n
Vòng lặp cho i
chạy từ 2 đến n
Trả về kết quả
Nhập số n nguyên
30
Gọi hàm tính và
in ra kết quả
31. Tính UCLN (thuật toán euclid)
a = int(input("A =
"))
b = int(input("B =
"))
while (b > 0):
if (a > b):
a, b = b, a %
b else:
a, b = a,
b % a
print("Ước số chung lớn nhất là:",
a)
Nhập 2 số
nguyên a và b
Vòng lặp chừng
nào b > 0
Xử lý khi a > b
Xử lý khi a <= b
In kết quả
31
36. Tóm tắt nội dung bài trước
36
Hai cách thực thi python: chạy chương trình và dòng lệnh
Dùng dấu thăng (#) để viết dòng chú thích
Biến không cần khai báo trước, không cần chỉ kiểu
Dữ liệu chuỗi nằm trong cặp nháy đơn ('), nháy kép ("),
hoặc ba dấu nháy (""" / ''') – nếu viết nhiều dòng
Sử dụng chuỗi thoát ()để khai báo các ký tự đặc biệt
Sử dụng chuỗi thô: r"nội dung"
Hàm print để in dữ liệu, hàm input để nhập dữ liệu
Có thể kết hợp với hàm chuyển đổi kiểu
Kiểu số và phép toán có một số điểm cần chú ý
Số nguyên không giới hạn độ lớn
Phép chia nguyên và phép chia chính xác
37. Chữa bài tập buổi trước
Nhập 2 số nguyên a và b, hãy tính và
in ra
𝑏
𝑎
37
a =
int(input("Nhập
số nguyên A
=
"))
b =
int(input("Nhập
số nguyên B
=
"))
print("Kết quả:",
a
** (1 / b))
38. Chữa bài tập buổi trước
38
Nhập số nguyên n, hãy in ra n ở dạng hệ cơ số 16, hệ cơ
số 8 và hệ cơ số 2
n = int(input("Nhập số nguyên N = "))
print("
N
ở hệ cơ số 16:",
hex(n))
print("
N
ở hệ cơ số 8:", oct(n))
print("
N
ở hệ cơ số 2:", bin(n))
39. Chữa bài tập buổi trước
39
Bạn có 10 triệu đồng
trong
tài khoản ngân hàng, với
lãi
suấ
t
5,1% hàng năm. Tính xem:
Sau 10 năm bạn có
bao
nhiêu tiền?
Sau bao nhiêu năm bạn sẽ có ít nhất 50 triệu
đồng?
import math
tien = 1e7
lai = 5.1 /
100
# số tiền đầu
(10M)
# lãi suất 5.1%
print("Số tiền sau 10 năm:", int(tien * (1 +
lai)**10))
dich = 5e7
nam = math.log(dich / tien, 1 +
lai)
# số tiền đích
(50M)
# tính theo log
print("Số năm để có ít nhất 50 triệu:",
math.ceil(nam))
40. 40
Chữa bài tập buổi trước
Nhập số nguyên X, hãy đếm xem X có bao
nhiêu chữ số đầu tiên của X
chữ số, in ra
(sinh viên chủ động giải thích cách làm
dưới
thức toán học cơ sở)
đây bằng kiến
import math
x = int(input("Nhập số nguyên X =
")) len =
math.floor(math.log10(x))
print("Số chữ số của X:", len + 1)
print("Chữ số đầu tiên của X:",
x // 10**len)
43. Khai báo và gọi hàm
43
Cú pháp khai báo hàm rất đơn giản
def <tên-hàm>(danh-sách-tham-số):
<lệnh 1>
…
<lệnh n>
Ví dụ: hàm tính tích 2 số
def tich(a,
b): return
a * b
Hàm trả về kết quả bằng lệnh return, nếu không trả về thì
coi như trả về None
Gọi hàm thông qua tên và các đối số
dt = tich(100, 200)
s = tich(20, 30) + tich(40, 50)
44. Hàm với tham số mặc định
44
Hàm có thể chỉ ra giá trị mặc định của tham số
# nếu không nói gì thì mặc định b
= 1 def tich(a, b = 1):
return a*b
Như vậy với hàm trên ta có thể gọi
thực hiện nó:
print(tich(10, 20)) # 20
0
print(tich(10)) # 10
print(tich(a=5)) # 5
print(tich(b=6, a=5)) # 30
Chú ý: các tham số có giá trị mặc định phải đứng cuối
danh sách tham số
45. Trả về kết quả từ hàm
45
Hàm không có kiểu, vì vậy có thể trả về bất kì loại dữ liệu
gì, thậm chí có thể trả về nhiều kiểu dữ liệu khác nhau
def fuc1():
return
1001 def
fuc2():
print(
'None')
# trả về một loại kết
quả
# không trả về kết
quả
def fuc3():
return 1001,
'abc',
4.5 # trả về phức hợp nhiều
loại
def fuc4(n):
if n < 0:
return 'số âm' # trả về chuỗi
else:
return n + 1 # trả về số
46. Python không cho phép nạp chồng hàm
46
Python không cho phép hàm trùng tên, nếu cố ý định
nghĩa nhiều hàm trùng tên, python sẽ sử dụng phiên
bản cuối cùng
def abc():
return
'abc
version 1'
def abc(a):
return
'abc
version 2'
def abc(a, b):
return
'abc
version 3'
print(abc())
print(abc(1,
2))
# lỗi, hàm abc cần 2 tham số a
và b # ok, in ra 'abc version
3'
47. Tham số tùy biến trong python
47
Python cho phép số lượng tham số tùy ý bằng cách đặt
dấu sao (*) vào phía trước tên tham số.
Trong ví dụ dưới *names là một dãy không giới hạn số
tham số
# tham số tùy biến
def
sayhello(*names):
# duyệt các tham
số for name in
names:
print("Hello",
name)
# gọi hàm với 4 tham
số
49. Phép toán “if”
49
# X là max của A và B
X = A if A > B else B
# N có phải là số nguyên tố có 1 chữ số hay
không
A = "Đúng" if N in [2, 3, 5, 7] else "Sai"
# In ra màn hình “chẵn” nếu n chia hết cho 2, #
in ra “lẻ” nếu ngược lại
print('chẵn' if (n % 2) == 0 else "lẻ")
# Sinh
viên
có được thi hay không?
print("đượ
c
thi" if so_buoi_nghi < 3
else
"không
được
thi"
)
# Biện
luận
nghiệm phương trình bậc 2
(if
lồng nhau)
KQ = "một nghiệm" if delta == 0 else
"vô nghiệm" if delta < 0 else "hai
nghiệm"
50. Phép toán “if”
50
Cú pháp: A if <điều-kiện> else B
Thực hiện:
Phép toán trả về A nếu <điều-kiện> là đúng, ngược lại trả về B
A và B có thể là các giá trị, biểu thức tính toán, lời gọi hàm,…
Các phép toán if cũng có thể lồng nhau
Cách sử dụng if này khá kỳ lạ, nhưng hợp lý nếu xét về
mặt ngôn ngữ và cách đọc điều kiện logic
Ưu điểm: đây là phép toán, có thể viết trong biểu thức
Bài tập: Biến X để lưu tình trạng gửi SMS, X=0 tức
là chưa gửi được, X=1 tức là đã gửi thành công,
X=2 tức là đã gửi và người nhận đã đọc. Viết câu
lệnh sử dụng phép toán if để in ra màn hình
thông báo tương ứng với giá trị của X.
52. Rẽ nhánh
52
# In thông báo nếu được điểm số loại giỏi
if diem >= 8: print("Chúc mừng bạn đã được điểm
giỏi")
# In thông báo xem n chẵn hay lẻ
if (N % 2) == 0:
print("N là số chẵn")
else:
print("N là số lẻ")
# Biện luận nghiệm của phương trình bậc 2
if delta == 0:
print("Phương trình có nghiệm kép")
elif delta < 0:
print("Phương trình vô nghiệm")
else:
print("Phương trình có hai nghiệm phân biệt")
54. Rẽ nhánh
54
Python chỉ có một cấu trúc rẽ nhánh duy nhất, sử dụng
để lựa chọn làm một trong số nhiều công việc
Nhiều ngôn ngữ lập trình khác sử dụng if cho trường hợp 2
lối
rẽ nhánh và switch cho trường hợp nhiều lối rẽ nhánh
Nguyên tắc với rẽ nhánh if-elif-else:
Biểu thức điều kiện của if và elif phải có kết quả logic
Hệ thống sẽ lần lượt tính giá trị từng biểu thức điều kiện từ
trên xuống dưới, bắt đầu từ phát biểu if
Nếu biểu thức điều kiện nào đúng thì khối lệnh tương ứng
được thực hiện và bỏ qua các khối lệnh khác
Trường hợp mọi biểu thức điều kiện đều sai, khối lệnh
ứng với
else sẽ được thực hiện
55. Phân tích ví dụ
55
a = int(input("A = "))
if 0 == a % 2:
print("A là số chẵn")
elif 0 == a % 5:
print("A chia hết cho
5") else:
print("A không có
gì đặc biệt")
a = 11: in ra “A không có gì đặc biệt”
a = 12: in ra “A là số chẵn”
a = 15: in ra “A chia hết cho 5”
a = 10: in ra “A là số chẵn” – chú ý – A vừa là số chẵn
vừa
chia hết cho 5, nhưng lệnh dừng ngay khi xét đều kiện A
chẵn.
56. Lệnh if lồng nhau, chú ý thụt lề
56
age = int(input("Bạn bao nhiêu tuổi?
")) print("Ồ bạn đã", age, "tuổi
rồi!")
if age >= 18:
print("Đủ tuổi đi bầu cử")
if age > 100:
print("Có vẻ sai sai!")
else: # else thuộc về if ở dòng 3 print("Nhỏ quá")
Như vậy trong python thì dấu cách cũng có vai trò lập
trình của nó, không chỉ đơn giản là viết cho đẹp