SlideShare a Scribd company logo
LẬP TRÌNH CHO
TRÍ TUỆ NHÂN TẠO
Giảng viên: Nguyễn Văn Thiệu
1
2
Bài 1.2: Ôn tập lại ngôn
ngữ lập trình Python
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
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)
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)
Ư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
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
8
Cách thực hiện câu lệnh,
chương trình
Phần 3
Cài đặt
9
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
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
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
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
14
Biến, khai báo chuỗi, khối lệnh
Phần 4
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 (#)
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
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
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)
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
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
21
Nhập dữ liệu và xuất dữ liệu
Phần 5
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
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)
24
Kiểu dữ liệu và phép toán liên
quan
Phần 6
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
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
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]
28
Vài ví dụ minh họa
Phần 7
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
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ả
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
32
Bài tập
Phần 8
Bài tập


𝑏
𝑎
33
34
LẬP TRÌNH PYTHON
Bài 2: Hàm và rẽ nhánh trong python
35
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
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))
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))
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
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)
Nội dung
41
1. Hàm
2. Phép toán “if”
3. Rẽ nhánh
4. Bài tập
42
Phần 1
Hàm
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)
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ố
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ố
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'
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ố
48
Phép toán “if”
Phần 2
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"
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.
51
Rẽ nhánh
Phần 3
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")
Rẽ nhánh
53
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
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.
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
57
Bài tập
Phần 4
Bài tập
58
Bài tập
𝐹
𝑁
= 1! + 2! + ⋯ +
𝑁!






59
Bài tập



60

More Related Content

PDF
C++ can ban
ThØȵg Lȝ
 
PPTX
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
ssuser49db3c1
 
DOCX
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
mai_non
 
PDF
temp.pdf
ThienHuynhDuc3
 
PDF
C++ can ban(dung thu vien iostream)
Nguyễn Phụng
 
PPT
Ba;lkj;ljk;lj;lkj;lkj;lkj;lkj;lkj;lkji1.ppt
HinPhmXun1
 
PPTX
ky thuat lap tirnh giao tiep ky thuat lap tirnh giao tiep
phanhoainamPhan
 
PPT
Thdc3 Lap Trinh C
quyloc
 
C++ can ban
ThØȵg Lȝ
 
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
ssuser49db3c1
 
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
mai_non
 
temp.pdf
ThienHuynhDuc3
 
C++ can ban(dung thu vien iostream)
Nguyễn Phụng
 
Ba;lkj;ljk;lj;lkj;lkj;lkj;lkj;lkj;lkji1.ppt
HinPhmXun1
 
ky thuat lap tirnh giao tiep ky thuat lap tirnh giao tiep
phanhoainamPhan
 
Thdc3 Lap Trinh C
quyloc
 

Similar to Lập trình cho trí tuệ nhân tạo tuần 2.pptx (20)

PPTX
python3.pptx
Tai Nguyen An
 
DOC
Giao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Văn Võ Ntn
 
PDF
Phạm văn ất
Khổng Xuân Trung
 
DOCX
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
CuongLe893252
 
PDF
Tu-Hoc-Python-Co-Ban-Trong-10-Phut-NIIT
NIIT - ICT Hà Nội
 
PDF
Bài giảng ngôn ngữ lập trình hiện nay: Ngôn ngữ Python
dtmanh1
 
PDF
Bài giảng ngôn ngữ lập trình hiện nay: Python
dtmanh1
 
PDF
DoThanhNghi2016_Python.pdf
TamDo58
 
PPT
1 Gioi Thieu Chung
Cuong
 
PDF
Hàm và Chuỗi
pnanhvn
 
DOC
Bai giangtrenlop
Hồ Lợi
 
PPT
Session 01
SamQuiDaiBo
 
PPT
Session 01 C
Zindi Aptech
 
PPT
Session 01
guest91d2b3
 
DOC
Lap trinh pascal
Loan Nguyen
 
PDF
Huong doi tuong
Hoang Pham Minh
 
PDF
06 tong quan ve ngon ngu c
Hanh Nguyễn Văn
 
PDF
Phong cach lap trinh c++
ptquang160492
 
PDF
Phong cach lap trinh c++
Informatics and Maths
 
PDF
Chuong 01 - Cac dac diem moi cua C++.pdf
tranvususu2013
 
python3.pptx
Tai Nguyen An
 
Giao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Văn Võ Ntn
 
Phạm văn ất
Khổng Xuân Trung
 
Bai Thuc hanh Tin học cơ sở nhom Kinh te-update.docx
CuongLe893252
 
Tu-Hoc-Python-Co-Ban-Trong-10-Phut-NIIT
NIIT - ICT Hà Nội
 
Bài giảng ngôn ngữ lập trình hiện nay: Ngôn ngữ Python
dtmanh1
 
Bài giảng ngôn ngữ lập trình hiện nay: Python
dtmanh1
 
DoThanhNghi2016_Python.pdf
TamDo58
 
1 Gioi Thieu Chung
Cuong
 
Hàm và Chuỗi
pnanhvn
 
Bai giangtrenlop
Hồ Lợi
 
Session 01
SamQuiDaiBo
 
Session 01 C
Zindi Aptech
 
Session 01
guest91d2b3
 
Lap trinh pascal
Loan Nguyen
 
Huong doi tuong
Hoang Pham Minh
 
06 tong quan ve ngon ngu c
Hanh Nguyễn Văn
 
Phong cach lap trinh c++
ptquang160492
 
Phong cach lap trinh c++
Informatics and Maths
 
Chuong 01 - Cac dac diem moi cua C++.pdf
tranvususu2013
 
Ad

Lập trình cho trí tuệ nhân tạo tuần 2.pptx

  • 1. LẬP TRÌNH CHO TRÍ TUỆ NHÂN TẠO Giảng viên: Nguyễn Văn Thiệu 1
  • 2. 2 Bài 1.2: Ôn tập lại ngôn ngữ lập trình Python
  • 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
  • 8. 8 Cách thực hiện câu lệnh, chương trình Phần 3
  • 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
  • 14. 14 Biến, khai báo chuỗi, khối lệnh Phần 4
  • 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
  • 21. 21 Nhập dữ liệu và xuất dữ liệu Phần 5
  • 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)
  • 24. 24 Kiểu dữ liệu và phép toán liên quan Phần 6
  • 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]
  • 28. 28 Vài ví dụ minh họa Phần 7
  • 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
  • 34. 34
  • 35. LẬP TRÌNH PYTHON Bài 2: Hàm và rẽ nhánh trong python 35
  • 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)
  • 41. Nội dung 41 1. Hàm 2. Phép toán “if” 3. Rẽ nhánh 4. Bài tập
  • 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
  • 59. Bài tập 𝐹 𝑁 = 1! + 2! + ⋯ + 𝑁!       59

Editor's Notes

  • #5: https://www.youtube.com/watch?v=cKzP61Gjf00 https://www.youtube.com/watch?v=Og847HVwRSI