Hướng Dẫn Cơ Bản Sử Dụng Python

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ỗiphâ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ươngchỉ 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

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)

Bài tập 2

Thẻ: print input data-types string-operations exception-handling

Đăng vào ngày 26 tháng 5 lúc 17:25