1. Hàm in cơ bản
x = 15
y = 25
print(x) # Kết thúc dòng in sẽ tự động xuống dòng
print(y)
print(x, y, 'Siêu Nhân') # sep xác định khoảng cách giữa các phần tử
# Cách nối 1
print('Siêu', end='')
print(' Nhân')
# Cách nối 2 (chỉ áp dụng cho chuỗi)
print('Siêu' + ' Vô Hạn')
print(chr(68))
print(ord('Siêu'))
file = open('ghi.txt', 'w') # Mở file w -> ghi
print('Siêu Ngọt', file=file) # Ghi "Siêu Ngọt" vào ghi.txt
file.close() # Đóng file
2. Hàm nhập dữ liệu input
Bất kể người dùng nhập số hay chuỗi, input đều được xử lý dưới dạng chuỗi
Nếu cần ra số nguyên, hãy chuyển đổi bằng int
so = input('Vui lòng nhập số may mắn của bạn:')
so = int(so)
print('Số may mắn của tôi là:', so)
Hàm eval()
Hàm nội bộ của Python, dùng để xóa dấu ngoặc kép bên ngoài chuỗi, thường được sử dụng cùng với input() (chuyển đổi kiểu dữ liệu đầu vào)
Lưu ý: Không thể viết print(eval('Ngọt Ngào'))
3. Nhận xét
Phím tắt nhận xét: Ctrl+/
# Nhận xét đơn hàng
'''
Nhận xét
đa dòng
'''
Cách khai báo nhận xét bằng tiếng Trung chỉ cần hiểu sơ qua
4. Biến và hằng số
Python là ngôn ngữ động kiểu, kiểu của biến có thể thay đổi bất kỳ lúc nào
so = 9
print(type(so)) # Hàm type() xem kiểu dữ liệu của biến
so = 'Đại Sư'
print(type(so))
a = b = 111 # Python cho phép nhiều biến trỏ đến cùng một giá trị
print(id(a), id(b)) # Hàm id() xem địa chỉ bộ nhớ
5. Kiểu dữ liệu
Giá trị Boolean là False trong các trường hợp sau
(1) False hoặc None
(2) Số 0, bao gồm 0, 0.0, số ảo 0
(3) Các chuỗi rỗng, bao gồm chuỗi rỗng, tuple rỗng, danh sách rỗng, từ điển rỗng, tập hợp rỗng
(4) Các đối tượng lớp tùy chỉnh
# 1. Kiểu số nguyên
so = 0b1011 # Biểu diễn nhị phân cho số nguyên
so1 = 0o753 # Biểu diễn bát phân
so2 = 0x876ABF # Biểu diễn thập lục phân
print(so, so1, so2)
# 2. Kiểu số thực
print(0.1 + 0.2) # Khi thực hiện phép tính với hai số thực, kết quả có thể xuất hiện một số "không chắc chắn" ở cuối
print(round(0.1 + 0.2, 1)) # Số 1 là số chữ số thập phân cần giữ lại
x = 123 + 456j
print(x.real, x.imag) # Phần thực dùng .real biểu thị; phần ảo dùng .imag biểu thị
# 3. Kiểu chuỗi
a = 'Siêu Nhân'
print(a * 3) # Sao chép chuỗi 3 lần
b = '''Tên
Tuổi
Giới tính''' # Chuỗi đa dòng dùng 3 dấu nháy đơn hoặc 3 dấu nháy kép
print(b)
print('Siêu' in a) # x in s: nếu x là chuỗi con của s, in ra True, nếu không thì in ra False
print('Ngọt Ngào' in a)
# 4. Kiểu Boolean
# Tất cả các số nguyên khác 0 đều có giá trị Boolean là True
print(bool(1))
# Tất cả các chuỗi không rỗng đều có giá trị Boolean là True
print(bool('Ngọt Ngào'))
6. Ký tự thoát
\t: vị trí tab ngang, dùng để nhảy sang vị trí tab tiếp theo theo chiều ngang
\" : dấu ngoặc kép
\' : dấu nháy đơn
\\ : một dấu gạch chéo ngược
print('Siêu Ngọt\nNgọt Ngào')
print('Siêu Nhân nói: \"Siêu Ngọt Ngào\"')
print('hellooo\tooo') # Một vị trí tab là 8 ký tự
print('hello\tooo')
print(r'Siêu Ngọt\nNgọt Ngào') # Ký tự nguyên bản, làm cho ký tự thoát vô hiệu hóa, ký tự r hoặc R
7. Chuyển đổi kiểu
Chia thành chuyển đổi rõ ràng và chuyển đổi ẩn
Chuyển đổi từ float sang int, chỉ giữ lại phần nguyên
print(ord('Siêu')) # Giá trị nguyên tương ứng của 'Siêu' trong bảng Unicode
print(chr(29482))
8. Toán tử
Toán tử chia thành toán tử số học, toán tử gán, toán tử so sánh, toán tử logic, toán tử bit
**Ưu tiên cao nhất của toán tử số học là ****
Python hỗ trợ gán chuỗi và phân giải chuỗi
a = b = 100 # Gán chuỗi
print(a, b)
a, b = 50, 100 # Phân giải chuỗi
print(a, b)
a, b = b, a # Hoán đổi giá trị của hai biến
print(a, b)
Kết quả của toán tử quan hệ (so sánh) là kiểu Boolean
print(90 >= 99)
Kết quả in ra là False
print(not False)
Kết quả in ra là True
print(12 & 8)
print(2 << 3)
9. Cấu trúc câu lệnh
Cấu trúc lựa chọn
if biểu thức:
khối lệnh
else:
Lưu ý: Nếu khối lệnh chỉ có một câu lệnh thực thi, có thể viết trực tiếp sau dấu :
Có thể sử dụng cách viết đơn giản
so = eval(input('Vui lòng nhập số may mắn của bạn:'))
ketqua = 'Ngọt Ngào' if so == 1234 else 'Siêu Nhân'
print(ketqua)
Khác với C++ là thay thế else if bằng elif:
Cấu trúc lặp
Lặp duyệt for
# Duyệt chuỗi
for i in 'Hello':
print(i, end=' ')
Vòng lặp vô hạn while
s = 0
i = 1
while i <= 100:
s += i
i += 1
else:
print(s)
Khi vòng lặp kết thúc bình thường, có thể sử dụng while~else, thực thi câu lệnh sau else khi vòng lặp kết thúc
Nếu không viết else, không cần thụt lề
Hàm rang()
Hàm nội bộ của Python, tạo ra một dãy số nguyên [n, m)
for i in range(1, 11):
if i % 2 == 0:
print(i, 'là số chẵn')
10. Phân tích mẫu
diem = input()
match diem:
case 'A':
print('Tuyệt vời')
case 'B':
print('Tốt')
case 'C':
print('Bình thường')
11. Câu lệnh rỗng pass
Từ khóa giữ chỗ trong Python, đóng vai trò là chỗ giữ chỗ trong cấu trúc cú pháp, giúp cấu trúc cú pháp đầy đủ, không báo lỗi
12. Kiểu dữ liệu tổ hợp
Kiểu dữ liệu tổ hợp bao gồm danh sách, bộ, tập hợp, từ điển
Danh sách, bộ được gọi là chuỗi có thứ tự; tập hợp, từ điển được gọi là chuỗi không có thứ tự
Chuỗi
Là một không gian liên tục dùng để lưu trữ nhiều giá trị, mỗi giá trị tương ứng với một số nguyên gọi là chỉ số
Chỉ số chia thành chỉ số tăng dần theo hướng dương và chỉ số giảm dần theo hướng âm
s = 'Hello'
print('e' in s) # In ra True
print('e' not in s) # In ra False
print(max(s)) # So sánh theo mã ASCII của chữ cái, in ra w
Lưu ý: (1) Danh sách, bộ, tập hợp, từ điển đều là một dạng của chuỗi, các toán tử, toán hạng, hàm dành cho chuỗi đều có thể sử dụng
(2) Giá trị rỗng của bốn loại trên đều là False
Phép cắt
Là một phương pháp truy cập các phần tử trong chuỗi, truy cập các phần tử trong một phạm vi nhất định
Cấu trúc cú pháp: chuỗi[start: end: step]
Lưu ý: ① Khi đếm, bao gồm start (giá trị mặc định là 0), không bao gồm end, bước step mặc định là 1
② Khi start và step lấy giá trị mặc định có thể bỏ qua
③ Khi bỏ qua end, mặc định đến phần tử cuối cùng của chuỗi (bao gồm phần tử cuối cùng)
s = 'Hello'
print(s[0:4:1])
Kết quả in ra là Hell
Chuỗi có thứ tự:
Danh sách (list())
(1) Danh sách là một loạt các phần tử được sắp xếp theo thứ tự cụ thể, là chuỗi có thể thay đổi trong Python
(2) Các phần tử trong danh sách có thể là mọi kiểu dữ liệu
(3) Dùng [] để định nghĩa danh sách, các phần tử được phân tách bằng ,
Ⅰ. Tạo danh sách (hai phương pháp)
# Phương pháp một: tạo trực tiếp bằng []
lst = ['hello', 'world', 100]
print(lst)
# Phương pháp hai: sử dụng hàm xây dựng list()
lst1 = list('helloworld')
lst2 = list(range(1, 10, 2))
print(lst1)
print(lst2)
# Xóa danh sách: thêm del trước tên danh sách
del lst1
del lst2
# Sau khi xóa, in danh sách sẽ báo lỗi
Ⅱ. Duyệt danh sách (ba phương pháp)
Hàm enumerate()
Định dạng: for index, item in enumerate(lst);
Hàm liệt kê, in ra index và item
Ⅲ. Các thao tác đặc biệt của danh sách
Lưu ý: .clear() chỉ xóa các phần tử trong danh sách, không xóa địa chỉ danh sách trong bộ nhớ
Ⅳ. Sắp xếp danh sách
reserve mặc định là false
# Phương pháp một: phương thức sort
lst = [4, 56, 3, 78, 40, 56, 89]
lst2 = ['banana', 'apple', 'Cat', 'Orange']
# Sắp xếp mặc định theo thứ tự tăng dần
# Sắp xếp thực hiện trên danh sách gốc, không tạo danh sách mới
lst.sort()
# So sánh bỏ qua chữ hoa chữ thường
lst2.sort(key=str.lower)
print(lst)
print(lst2)
# Phương pháp hai: hàm sorted
# Tạo một đối tượng mới
a = sorted(lst)
print(lst)
Ⅴ. Danh sách sinh ra
import random
lst = [item for item in range(1, 11)]
print(lst)
lst = [item*item for item in range(1, 11)]
print(lst)
lst = [random.randint(1, 100) for _ in range(10)] # Trong đó for sau có thể dùng _, vì không sử dụng
print(lst) # Vì là ngẫu nhiên, nên mỗi lần in ra kết quả khác nhau
lst = [i for i in range(10) if i % 2 == 0]
print(lst)
Ⅵ. Tạo và duyệt danh sách 2D
# Tạo danh sách 2D
lst = [
['Thành phố', 'Dài', 'Rộng'],
['Bắc Kinh', 100, 200],
['Thượng Hải', 300, 400],
['Thâm Quyến', 500, 600]
]
print(lst)
# Duyệt danh sách 2D sử dụng vòng lặp hai lớp
for row in lst:
for item in row:
print(item, end='\t')
print() # Xuống dòng
# Tạo danh sách 2D 4 hàng 5 cột
lst = [[j for j in range(5)] for i in range(4)]
print(lst)
Bộ (tuple())
(1) Là chuỗi không thể thay đổi trong Python
(2) Khi bộ chỉ có một phần tử, dấu phẩy không thể bỏ qua
(3) Dùng () để định nghĩa bộ, các phần tử được phân tách bằng ,
Lưu ý: Chuỗi không thể thay đổi có nghĩa là sau khi tạo, giá trị không thể thay đổi, nếu cần thay đổi, thực chất là tạo một đối tượng mới
Ⅰ. Tạo bộ (hai phương pháp)
# Phương pháp một: tạo trực tiếp bằng ()
t = ('python', [10, 11, 12], 'hello', 100)
print(t)
# Phương pháp hai: sử dụng hàm xây dựng tuple()
t = ('helloworld',)
print(t)
t = tuple(t)
print(t)
t = tuple([10, 9, 8])
print(t)
# Lưu ý: Nếu bộ chỉ có một phần tử, dấu phẩy không thể bỏ qua
t = (10)
print(t, type(t)) # Kiểu dữ liệu của t là int
t = (10,)
print(t, type(t)) # Kiểu dữ liệu của t là tuple
Xóa bộ giống như danh sách
Ⅱ. Duyệt bộ (ba phương pháp)
Phương pháp giống như danh sách
Ⅲ. Sử dụng bộ sinh ra
# Không thêm tuple tạo ra một đối tượng sinh ra, không thể thấy kết quả
# Chỉ có thêm tuple() chuyển đổi thành kiểu tuple mới có thể thấy
t = tuple(item for item in range(4))
print(t)
# Sử dụng phương thức __next__ là lấy từng phần tử trong bộ
# Sau khi lấy hết, in t sẽ là một bộ rỗng
t = (item for item in range(3))
print(t.__next__())
print(t.__next__())
print(t.__next__())
Sự khác nhau giữa danh sách và bộ
Chuỗi không có thứ tự
Từ điển (dict())
Loại từ điển là theo cách tìm kiếm thông tin này để tìm thông tin khác, biểu thị mối quan hệ giữa khóa và giá trị tương ứng, là chuỗi có thể thay đổi trong Python
Ⅰ. Tạo từ điển (hai phương pháp)
# Phương pháp một: tạo trực tiếp bằng {}
d = {10: 'cat', 20: 'dog', 20: 'pig'}
print(d) # Khi khóa giống nhau, giá trị được ghi đè
# Phương pháp hai: sử dụng hàm xây dựng dict() tạo từ điển
lst1 = [10, 20, 30]
lst2 = ['cat', 'dog', 'zoo']
ziop = zip(lst1, lst2) # Lúc này in ra không thể thấy nội dung, vì nó tạo ra đối tượng zip
d = dict(ziop)
print(d)
# Tạo từ điển bằng tham số
d = dict(cat=10, dog=20)
print(d)
# Bộ là kiểu dữ liệu không thể thay đổi, có thể làm khóa trong bộ
# Kiểu dữ liệu có thể thay đổi, không thể làm khóa trong bộ
t = (10, 20, 30)
print({t: 10})
Xóa từ điển giống như danh sách
Lưu ý: Khóa trong từ điển là không có thứ tự
Ⅱ. Lấy giá trị và duyệt từ điển
Truy cập phần tử trong từ điển:
d = {'hello': 10, 'world': 20, 'python': 30}
# (1) Sử dụng d[key]
print(d['hello'])
# (2) d.get(key)
print(d.get('hello'))
Hai phương pháp này có sự khác biệt, nếu khóa không tồn tại, phương pháp đầu sẽ báo lỗi, phương pháp sau có thể chỉ định giá trị mặc định (None)
Lưu ý: Giá trị mặc định có thể thay đổi
print(d.get('hello'))
print(d.get('hello', 'Không tồn tại'))
Duyệt từ điển:
Ⅲ. Các phương pháp liên quan đến từ điển
Ⅳ. Tạo từ điển sinh ra
import random
d = {item: random.randint(1, 100) for item in range(4)}
print(d)
lst = [1001, 1002, 1003]
lst2 = ['Trần Mỹ Mỹ', 'Trương Nhất', 'Trương Ái']
d = {key: value for key, value in zip(lst, lst2)}
print(d)
Tập hợp
(1) Tập hợp là một chuỗi không lặp lại, không có thứ tự, là chuỗi có thể thay đổi trong Python
(2) Tập hợp chỉ có thể lưu trữ các kiểu dữ liệu không thể thay đổi
(3) Dùng {} để định nghĩa danh sách, các phần tử được phân tách bằng ,
Bài tập 1
Bài tập 2
lst = []
for i in range(5):
hang_hoa = input("Vui lòng nhập mã số và tên sản phẩm để nhập kho:")
lst.append(hang_hoa)
for item in lst:
print(item)
gio_hang = []
while True:
flag = False
ma_so = input("Vui lòng nhập mã số sản phẩm:")
for item in lst:
if ma_so == item[0:4]:
flag = True
gio_hang.append(item)
print("Sản phẩm đã được thêm vào giỏ hàng")
break
if flag == False and ma_so != 'q':
print("Sản phẩm không tồn tại")
if ma_so == 'q':
break
print("Các sản phẩm trong giỏ hàng của bạn là:")
for item in gio_hang:
print(item)
Chương 6
1. Chuỗi
Là kiểu dữ liệu không thể thay đổi trong Python
Các phương pháp phổ biến của chuỗi
Lưu ý: (1) .replace(old, new, số lần thay thế), số lần thay thế không viết thì mặc định là thay thế tất cả
(2) .strip() khi dùng để xóa chuỗi chỉ định, không bị ảnh hưởng bởi thứ tự sắp xếp của chuỗi (tức là dl và ld là tương đương)
Phương pháp định dạng chuỗi
Khi in chuỗi, dùng + để nối hai chuỗi, nhưng khi nối các kiểu dữ liệu khác sẽ báo lỗi
Còn thông qua định dạng chuỗi, có thể đơn giản hóa việc nối các kiểu dữ liệu khác nhau, từ đó thực hiện việc nối các kiểu dữ liệu khác nhau
# Phương pháp một: sử dụng ký hiệu thay thế để định dạng
ten = 'Mã Đông Mê'
tuoi = 18
diem = 98.5
print('Họ tên:%s,Tuổi:%d,Điểm:%f'%(ten, tuoi, diem))
# Phương pháp hai: f-string
print(f'Họ tên:{ten}, Tuổi:{tuoi},Điểm:{diem}')
# Phương pháp ba: sử dụng phương thức format trong chuỗi
print('Họ tên:{0}, Tuổi:{1},Điểm:{2}'.format(ten, tuoi, diem))
Chi tiết định dạng của phương thức format
Mã hóa và giải mã chuỗi
Lưu ý: (1) strict báo lỗi, ignore bỏ qua, replace thay bằng ?
(2) Định dạng mã hóa và giải mã phải khớp với nhau
s = 'Giấc mơ Trung Hoa vĩ đại'
# Mã hóa
# Mặc định là utf-8, utf-8 chữ cái chiếm 1 byte, chữ Hán chiếm 3 byte
# gbk chữ Hán chiếm 2 byte
scode = s.encode(errors='replace')
scode1 = s.encode('gbk', errors='replace')
print(scode)
print(scode1)
# Giải mã
print(bytes.decode(scode1, 'gbk'))
print(bytes.decode(scode))
Phương pháp xác minh dữ liệu
Xác minh dữ liệu là chỉ chương trình kiểm tra "tính hợp lệ" của dữ liệu đầu vào người dùng
Phương pháp nối chuỗi
s1 = 'hello'
s2 = 'world'
# (1) Sử dụng + để nối
print(s1 + s2)
# (2) Sử dụng phương thức join() của chuỗi
print(''.join([s1, s2])) # Sử dụng chuỗi rỗng để nối
print('*'.join(['hello', 'world', 'python']))
# (3) Nối trực tiếp
print('hello' 'world')
# (4) Sử dụng định dạng chuỗi để nối
print('%s%s' % (s1, s2))
print(f'{s1}{s2}')
print('{0}{1}'.format(s1, s2))
Thao tác loại bỏ trùng lặp của chuỗi
# (1) Nối chuỗi và not in
s = 'helloworldhelloworldadfd'
new = '' # Tạo một chuỗi rỗng
for item in s: # Duyệt
if item not in new:
new += item
print(new)
# (2) Sử dụng chỉ số + not in
new1 = ''
for i in range(len(s)):
if s[i] not in new1:
new1 += s[i]
print(new1)
# (3) Loại bỏ trùng lặp qua tập hợp + sắp xếp danh sách
new2 = set(s) # Sử dụng tập hợp để loại bỏ trùng lặp
lst = list(new2)
lst.sort(key=s.index)
print(''.join(lst))
Biểu thức chính quy
2. Mô-đun re
Sử dụng hàm math
import re
pattern = '\d\.\d+' # + là ký hiệu giới hạn, \d là số 0~9 xuất hiện một lần hoặc nhiều lần
s1 = 'Tôi học Python 3.368 mỗi ngày'
match = re.match(pattern, s1, re.I) # re.I bỏ qua chữ hoa chữ thường
print(match) # None
s2 = '3.368 Tôi học Python mỗi ngày'
match = re.match(pattern, s2, re.I)
print(match)
print('Vị trí bắt đầu của giá trị khớp:', match.start())
print('Vị trí kết thúc của giá trị khớp:', match.end())
print('Vị trí phần tử khớp:', match.span())
print('Chuỗi cần khớp:', match.string)
print('Dữ liệu khớp:', match.group()) # .group() in ra dữ liệu khớp
Hàm math khớp từ đầu chuỗi, nếu nội dung ở giữa thì không khớp được
Lúc này có thể sử dụng hàm search
Hàm search
import re
pattern = '\d\.\d+' # + là ký hiệu giới hạn, \d là số 0~9 xuất hiện một lần hoặc nhiều lần
s = '3.368 Tôi học 979.22 Python mỗi ngày'
match = re.match(pattern, s, re.I)
print(match)
print('Dữ liệu khớp:', match.group())
Hàm search có thể tìm kiếm trong toàn bộ chuỗi, nhưng sau khi khớp được đối tượng đầu tiên không thể tiếp tục khớp về phía sau
Lúc này có thể sử dụng hàm findall
Hàm findall
import re
pattern = '\d\.\d+' # + là ký hiệu giới hạn, \d là số 0~9 xuất hiện một lần hoặc nhiều lần
s = '3.368 Tôi học 979.22 Python mỗi ngày'
lst = re.findall(pattern, s, re.I)
print(lst)
Nếu không tìm thấy, in ra danh sách rỗng
Hàm sub
import re
pattern = 'Hacker|Crack|Anti-Crawl'
s = 'Tôi muốn học Python, muốn crack một số video VIP, Python có thể thực hiện không giới hạn anti-crawl không?'
new_s = re.sub(pattern, 'XX', s, re.I)
print(new_s)
Hàm split
import re
pattern = '[e|u]'
s = 'http://172.19.0.102:8080/eportal/succes'
new = re.split(pattern, s)
print(new)
Chương 7
1. Xử lý giá trị ngoại lệ trong Python
try:
num1 = int(input('Vui lòng nhập một số nguyên:'))
num2 = int(input('Vui lòng nhập một số nguyên khác:'))
ket_qua = num1 / num2
except ZeroDivisionError:
print('Số chia không thể là 0')
except ValueError:
print('Không thể chuyển đổi chuỗi thành số nguyên')
except BaseException:
print('Lỗi không xác định')
else:
print('Kết quả:', ket_qua)
finally:
print('Chương trình kết thúc!')
2. Các loại ngoại lệ phổ biến trong Python
3. Từ khóa raise
try:
gioi_tinh = input('Vui lòng nhập giới tính của bạn:')
if gioi_tinh != 'Nam' and gioi_tinh != 'Nữ':
raise Exception('Giới tính chỉ có thể là Nam hoặc Nữ')
else:
print('Giới tính của bạn là:', gioi_tinh)
except Exception as e:
print(e)
4. Gỡ lỗi chương trình trong Pycharm
Bài tập 1
try:
diem = eval(input('Vui lòng nhập điểm của bạn:'))
if diem < 0 or diem > 100:
raise Exception('Điểm nhập không đúng')
else:
print('Điểm của bạn là:', diem)
except Exception as e:
print(e)