I. Cài đặt môi trường phát triển

1. Cài đặt Python

Download và cài đặt Python từ trang chủ

Lưu ý:

Tạo mới và chạy thử chương trình đầu tiên

Từ menu start của Windows tìm ứng dụng IDLE và mở ứng dụng này

Khi ứng dụng IDLE khởi động xong, cửa số shell interactive (với con trỏ >>> ) sẽ xuất hiện. Cửa số này cho phép nhập trực tiếp vào các dòng lệnh để thực hiện.

Để tạo và chạy một chương trình: Từ menu File, chọn New File, cửa sổ soạn thảo sẽ mở ra.

Sau khi soạn thảo chương trình xong, từ menu File chọn Save để lưu lại chương trình trên ổ đĩa

Để chạy chương trình, từ menu Run chọn Run Module (F5), chương trình sẽ được thực hiện, và kết quả sẽ in ra cửa sổ shell.

2. Cài đặt Python IDE

IDLE cho phép soạn thảo và chạy chương trình Python nhưng không hỗ trợ nhiều các chức năng phát triển ứng dụng. Với các ứng dụng python có nhiều file, nên sử dụng IDE khác. Có thể sử dụng một trong các IDE:

Với môi trường doanh nghiệp, Pycharm thường được sử dụng vì hỗ trợ Python tốt nhất. Với người học lập trình, Visual Studio Code phù hợp hơn vì nhẹ, không yêu cầu máy cấu hình cao, trong khi vẫn hỗ trợ hầu như toàn bộ các tính năng cần thiết.

Cài đặt Visual Studio Code để phát triển với Python

Tải và cài Visual Studio Code từ trang chủ.

Sau khi cài đặt, khởi động Visual Studio Code. Trong lần chạy đầu tiên, cài đăt Extension cho Python như sau: Click biểu tượng Extension (1) (dưới cùng thanh công cụ bên trái), trong phần tìm kiếm Extension (2) nhập Python, danh sách các Extension hỗ trợ Python sẽ hiện lên ở Panel kết quả. Chọn Extension Python của Microsoft và cài đặt.


II. Kiến thức lập trình Python cơ bản

1. Biến số , kiểu dữ liệu

Biến số được sử dụng để lưu trữ các giá trị trong quá trình tính toán của chương trình

Cách thức khai báo biến trong Python :

    bienSo = <gia_tri>

Trong đó bienSo là tên của biến số cần khai báo, <gia_tri> là giá trị ban đầu chúng ta muốn đặt cho biến số. Giá trị này có thể là một hằng số hoặc một biểu thức của các biến số đã được khai báo.

Ví dụ:

    x = 1
    y = 2
    z = x + y

Để xóa một biến khỏi bộ nhớ, có thể sử dụng lệnh del :

    del x, y, z

Mỗi biến số sau khi được khai báo sẽ chứa giá trị nhất định, gọi là dữ liệu. Giá trị dữ liệu này sẽ thuộc vào một trong các kiểu dữ liệu mà Python hỗ trợ:


2. Vào ra dữ liệu

Đọc dữ liệu từ bàn phím

Để lấy dữ liệu người dùng nhập vào từ bàn phím, Python sử dụng lệnh input:

    giatri = input('Nhập giá trị cho biến : ')

Ví dụ:

      
        # Chương trình chào hỏi người sử dụng
        ten = input('Mời bạn cho biết tên của bạn : ')
        print('Xin chào ', ten)
      
    
      
        # Chương trình yêu cầu người dùng nhập vào 2 số từ bàn phím, sau đó in ra tổng 2 số
        a = input('Số thứ nhất : ')
        a = float(a)

        b = input('Số thứ hai : ')
        b = float(b)

        print('Tổng của 2 số là : ', a+b)
      
    

In dữ liệu ra màn hình

Lệnh print được sử dụng để in dữ liệu ra màn hình, cú pháp của lệnh này như sau:

    print(<danh sách giá trị ngăn cách nhau bởi dấu phảy>)

Ví dụ:

      
        # Chương trình minh hoạ các in dữ liệu ra màn hình
        x = 1
        y = 2
        z = x + y
        print(x, '+', y, '=', z)
      
    

3. Các phép toán cơ bản

Phép toán số học

Phép toán thu gọn

Ví dụ:


      x = 1
      y = 2
      z = x + y
      t = x - y
      u = x * y
      v = x / y
      w = x % y
      print(z, t, u, v, w)
    

4. Cấu trúc rẽ nhánh if-else

Cấu trúc rẽ nhánh if-else dùng để thực hiện một đoạn chương trình dựa trên một điều kiện logic (true/false).

Các dạng của cấu trúc if-else:

Cú pháp Giải thích Ví dụ
if(<dieu_kien>):
   <khoi_lenh>
Nếu điều kiện đúng thì thực hiện khối lệnh
x = 1
if x > 0:
   x = x - 1
if <dieu_kien>:
   <khoi_lenh_1>
else:
   <khoi_lenh_2>
Nếu điều kiện đúng thì thực hiện khối lệnh 1, nếu không thực hiện khối lệnh 2
x = -1
if x > 0:
   x = x - 1
else:
   x = x + 1
if <dieu_kien_1> :
   <khoi_lenh_1>
elif <dieu_kien_2> :
   <khoi_lenh_2>
elif <dieu_kien_3>:
   <khoi_lenh_3>
...
else:
   <khoi_lenh_n>

Nếu điều kiện 1 đúng thì thực hiện khối lệnh 1

nếu không kiểm tra điều kiện 2, nếu đúng thực hiện khối lệnh 2,

nếu không tiếp tục kiểm tra điều kiện tiếp theo ...

Nếu không điều kiện nào đúng thì thực hiện khối lệnh cuối.

rating = 4.5
if rating < 2.5:
   print('Sản phẩm kém')
elif rating < 3.5:
   print('Sản phẩm trung bình')
elif rating < 4.0:
   print('Sản phẩm khá tốt')
else:
   print('Sản phẩm tốt')
Lưu ý:

Các điều kiện logic dùng trong cú pháp if-else

Điều kiện Ý nghĩa Ví dụ
> So sánh lớn hơn
if(1 > 2):
   print('1 > 2')
>= So sánh lớn hơn hoặc bằng
if(1 >= 2):
   print('1 >= 2')
< So sánh nhỏ hơn
if(1 < 2):
   print('1 < 2')
  
<= So sánh nhỏ hơn hoặc bằng
if(1 <= 2):
   print('1 < 2')
== So sánh bằng nhau
if(1 == 2):
   print('1 == 2')
!= So sánh khác nhau
if(1 != 2):
   print('1 != 2')
and Kết hợp 2 điều kiện theo logic
x = 1
if x > 0 and x < 100:
   print('0 < x < 100')
or Kết hợp 2 điều kiện theo logic hoặc
x = 1
if x < 0 or x > 100:
   print('x < 0 hoặc x > 100')
not Phủ định một điều kiện
x = 1
if not(x < 0 or x > 100):
   print('0 <= x <= 100')

Một số ví dụ:


      # Chương trình yêu cầu người dùng nhập vào 2 số và in ra số bé hơn
      a = input('Số thứ nhất : ')
      a = float(a)

      b = input('Số thứ hai : ')
      b = float(b)

      if a < b:
          print('Số bé:', a)

      else:
          print('Số bé:', b)
    

      # Chương trình tính chỉ số BMI và đánh giá tình trạng thân hình của một người
      height = input('Chiều cao (mét) : ')
      height = float(height)

      mass = input('Cân nặng (kg) : ')
      mass = float(mass)

      bmi = mass / (height * height)

      if bmi < 16:
          print('Thân hình gầy')

      elif bmi < 18.5:
          print('Thân hình hơi gầy')

      elif bmi < 25:
          print('Thân hình bình thường')

      elif bmi < 30:
          print('Thân hình hơi béo')

      else:
          print('Thân hình béo')

    

5. Cấu trúc lặp for

Cấu trúc lặp for được dùng để thực hiện một vòng lặp với số lần lặp biết trước:

    for <bienLap> in <tapGiaTri>:
       <khoi_lenh>

Các cách thể hiện tập giá trị lặp:

Cách thể hiện tập giá trị Cấu trúc Ví dụ

Liệt kê các thành phần của tập giá trị.

Các phần từ viết cách nhau bởi dấu phảy và đặt trong cặp ngoặc vuông [].

[x1, x2, ...., xn] [1, 2, 3, 4, 5]

Dùng giải giá trị chặn cuối.

Giải giá trị này bắt đầu từ 0 và kết thúc trước giá trị chặn cuối.

range(<end_value>) range(5) ~ [0, 1, 2, 3, 4]

Dùng giải giá trị chặn đầu & cuối.

Giải giá trị này bắt đầu từ giấ trị đầu và kết thúc trước giá trị chặn cuối.

range(<start>, <end_value>) range(1, 5) ~ [1, 2, 3, 4]

Dùng giải giá trị chặn đầu & cuối kèm bước nhảy.

Giải giá trị này bắt đầu từ giấ trị đầu, kết thúc trước giá trị chặn cuối và tăng theo bước nhảy.

range(<start>, <end_value>, <step>) range(2, 10, 2) ~ [2, 4, 6, 8]

Một số ví dụ minh hoạ:

      
        # Chương trình tính tổng các số từ 1 đến 100
        S = 0
        for i in range(1, 101):
            S += i

        print('S = ', S)
      

      
        # Chương trình in ra bảng cửu chương
        for i in range(2, 10):
            for j in range(2, 10):
                print(i, '*', j, '=', i*j)
            print()
      
    

6. Cấu trúc lặp while

Cấu trúc lặp while được dùng để thực hiện một vòng lặp với số lần lặp không biết trước:

    while <dieukien>:
       <khoi_lenh>

Một số ví dụ minh họa:

      
        # Chương trình kiểm tra một số có phải số nguyên tố không
        x = int(input('x='))
        i = 2
        while i * i <= x:
            if x % i == 0:
                j = x // i
                print(x, '=', i , '*', j)
                break
            i += 1
        else:
          print(x, ' là số nguyên tố')
      
      
        # Chương trình chuyển một số từ hệ thập phân sang hệ nhị phân
        x = int(input('x='))
        s = ''

        while x > 0:
            i = x % 2
            s = str(i) + s
            x = int(x/2)

        print(s)
      
    

Các lệnh break và continue

Trong các vòng lặp for, while có thể sử dụng các lệnh breakcontinue với mục đích:

Ví dụ:

      
        # Chương trình minh hoạ sử dụng lệnh break
        # Tìm số nhỏ nhất có 2 chữ số chia 2 dư 1, chia 3 dư 2, chia 4 dư 3

        for i in range(10, 100):
            if i%2 == 1 and i%3 == 2 and i%4 == 3:
                print(i)
                break
      
      
        # Chương trình minh hoạ sử dụng lệnh continue
        # Tìm tất cả các số có 2 chữ số chia 2 dư 1, chia 3 dư 2, chia 4 dư 3

        for i in range(10, 100):
            if i%2 != 1:
                continue

            if i%3 != 2:
                continue
              
            if i%4 != 3:
                continue

            print(i)
      
    

7. Kiểu dữ liệu String

Kiểu string dùng để lưu trữ các dữ liệu dạng văn bản. Trong Python dữ liệu string được đặt trong cặp nháy đơn ('') hoặc nháy kép ("")

Một số thao tác thông dụng trên dữ liệu string:

Thao tác Cú pháp Ví dụ
Lấy chiều dài len(<st>)
ho_ten = 'Nguyễn Văn A'
print(len(ho_ten))
Lấy một kí tự của string <st>[<index>]
ho_ten = 'Nguyễn Văn A'
print(ho_ten[0], ho_ten[7])
Lấy một đoạn của string

<st>[<start>:<end>]

Lưu ý: nếu không truyền vào start thì lấy từ đầu string, nếu không truyền vào end thì lấy hết đến cuối string

date = '01/02/2022'
print('day=', date[:2])
print('month=', date[3:5])
print('year=', date[6:])
Ghép nhiều string <st1> + <st2> + ... + <st_n>
ho = 'Nguyễn'
ten_dem = 'Văn'
ten = 'A'
ho_ten = ho + ' ' + ten_dem + ' ' + ten
print(ho_ten)
Ghép nhiều string sử dùng template

f"{<st1>}{<st2>}...{<st_n>}"

ho = 'Nguyễn'
ten_dem = 'Văn'
ten = 'A'
ho_ten = f"{ho} {ten_dem} {ten}"
print(ho_ten)
Tách string thành từng phần theo từ phân cách (delimiter) <st>.split(<delimiter>)
st = 'Nguyễn-Văn-A'
words = st.split('-')
print(words)
Ghép mảng nhiều string bằng từ nối (delimiter) <delimiter>.join(<st_array>)
arr = ['Nguyễn', 'Văn', 'A']
st = '-'.join(arr)
print(st)
Kiểm tra string có chứa một string khác <st2> in <st1>
username = 'nguyen-van-a'
if '-' in username:
   print('username không hợp lệ')
Tìm vị trí xuất hiện đầu tiên của một string trong một string khác

<st1>.find(<st2>)

Lưu ý: nếu không tìm thấy thì kết quả trả về là -1

username = 'nguyen-van-a'
pos = username.find('-')
print(pos)
Tìm vị trí xuất hiện cuối cùng của một string trong một string khác

<st1>.rfind(<st2>)

Lưu ý: nếu không tìm thấy thì kết quả trả về là -1

username = 'nguyen-van-a'
pos = username.rfind('-')
print(pos)
Chuyển thành dạng viết hoa

<st>.upper()

city = 'Hà Nội'
print(city.upper())
Chuyển thành dạng viết thường

<st>.lower()

language = 'Python'
print(language.lower())

Một số ví dụ:

      
        # Cho một xâu chứa ngày tháng dạng d/m/y, in ra từng thành phần d, m, y

        date_str = '1/2/2000'
        arr = date_str.split('/')

        if len(arr) == 3:
            d = arr[0]
            m = arr[1]
            y = arr[2]
            print(f'Ngày {d} tháng {m} năm {y}')
        else:
            print('Ngày tháng không đúng định dạng')

      
      
        # Chương trình kiểm tra tính hợp lệ của mật khẩu
        # Mật khẩu hợp lệ nếu: có từ 6 kí tự trở lên, chứa ít nhất 1 chữ số, chứa ít nhất 1 chữ cái
        password = input('Nhập mật khẩu : ')

        if len(password) < 6:
            print('Mật khẩu quá ngắn')
            exit()

        chuaChuCai = False
        for c in password:
            C = c.upper()
            if (C >= 'A' and C <= 'Z'):
                chuaChuCai = True
                break

        if not chuaChuCai:
            print('Mật khẩu cần chứa ít nhất một chữ cái (a-z/A-Z)')
            exit()

        chuaChuSo = False
        for c in password:
            if c >= '0' and c <= '9':
                chuaChuSo = True
                break

        if not chuaChuSo:
            print('Mật khẩu cần chứa ít nhất một chữ số (0-9)')
            exit()

        print('Mật khẩu hợp lệ !')
      
    

8.Kiểu dữ liệu List

Kiểu List dùng để lưu trữ một dãy các phần tử (có thể cùng hoặc khác kiểu dữ liệu). Trong Python dữ liệu List được đặt trong cặp ngoặc vuông [].

Một số thao tác thông dụng trên dữ liệu List:

Thao tác Cú pháp Ví dụ
Lấy chiều dài len(<lst>)
lst = [1, 2, 3, 4, 5]
print(len(lst))
Lấy một phần tử của list <lst>[<index>]
lst = [1, 2, 3, 4, 5]
print(lst[0], lst[4])
Lấy một đoạn của list

<lst>[<start>:<end>]

Lưu ý: nếu không truyền vào start thì lấy từ đầu list, nếu không truyền vào end thì lấy hết đến cuối list

lst = [1, 2, 3, 4, 5]
print(lst[1: 3])
print(lst[3:])
Thêm một phần tử vào cuối list <lst>.append(<new_element>)
lst = [1, 2, 3, 4, 5]
lst.append(6)
print(lst)
Lấy phần tử cuối ra khỏi list <lst>.pop()
lst = [1, 2, 3, 4, 5]
last = lst.pop()
print(lst, last)
Xoá một phần tử trong list del <lst>[<index>]
lst = [1, 2, 3, 4, 5]
del lst[2]
print(lst)
Kiểm tra list có chứa một phần tử <element> in <lst>
lst = [1, 2, 3, 4, 5]
if 1 in lst:
   print('1 exists in list')
Tìm vị trí xuất hiện đầu tiên của một phần tử trong list

<lst>.index(<element>)

Lưu ý: nếu không tìm thấy thì xảy ra ngoại lệ (exception)

lst = [1, 2, 3, 4, 5]
pos = lst.index(2)
print(pos)
Sắp xếp list

sorted(<lst>[,reverse=True])

Hàm sorted trả về một list mới chứa các phần tử đã được sắp xếp, nhưng không làm thay đổi đến list cũ.

lst = [1, 3, 2, 4, 5]
asc_lst = sorted(lst) # Sắp xếp tăng dần
dsc_lst = sorted(lst, reverse=True) # Sắp xếp giảm dần

Một số ví dụ:

      
        # Tách một dãy số 2 dãy số: dãy chứa số lẻ và dãy chứa số chẵn 

        ds = [1, 2, 3, 5, 7, 8, 9, 10, 11, 15]
        ds_le = []
        ds_chan = []

        for x in ds:
            if x%2 == 0:
                ds_chan.append(x)
            else:
                ds_le.append(x)

        print('Số chẵn:', ds_chan)
        print('Số lẻ:', ds_le)
      
      
        # Cho một dãy số, tách dãy số thành các đoạn mỗi đoạn có độ dài không vượt quá N (cho trước)
        lst = list(range(30))   # 0..<30
        N = 4
        chunks = []

        while len(lst) > 0:
            chunks.append(lst[:N])
            lst = lst[N:]

        print('chunks=', chunks)
      
    

List Comprehension

List Comprehension là thao tác xử lý trên list được dùng rất phổ biến trong Python. Về lí thuyết, List Comprehension tương đương với một vòng lặp for nhưng ngắn gọn hơn.

Cú pháp List Comprehension:

new_lst = [transform(var) for var in lst] # hoặc
new_lst = [transform(var) for var in lst if condition(var)]
Giải thích:

List Comprehension tạo ra một list mới từ một list đã có bằng cách biến đổi từng phần tử của list đã có qua phép biến đổi thành phần transform. Ngoài ra phía cuối của biểu thức Comprehension có thể chỉ định điều kiện lọc condition để chỉ lấy ra những phần tử ở list ban đầu thoả mãn điều kiện này.

Cú pháp List Comprehension tương đương với một vòng lặp for:

new_lst = []
for var in lst:
   if condition(var):
      new_lst.append(transform(var))
Ứng dụng:

List Comprehension được dùng với 2 mục đích chính : chuyển đổilọc dữ liệu. Ví dụ:

      
        # Dùng List Comprehension để chuyển đổi dữ liệu
        # Cho một dãy số, tính bình phương của các phần tử trong dãy số

        lst = [1, 2, 3, 4, 5, 6, 7, 8]
        squares = [x*x for x in lst]
        print('squares=', squares)
      
      
        # Dùng List Comprehension để lọc dữ liệu
        # Cho một dãy số, tìm các số chẵn

        lst = [1, 2, 3, 4, 5, 6, 7, 8]
        even_numbers = [x for x in lst if x%2 == 0]
        print('even numbers:', even_numbers)
      
      
        # Dùng List Comprehension để lọc+chuyển đổi dữ liệu
        # Cho một dãy số, tính bình phương các số chẵn

        lst = [1, 2, 3, 4, 5, 6, 7, 8]
        even_squares = [x*x for x in lst if x%2 == 0]
        print('even squares:', even_squares)
      
    

9.Kiểu dữ liệu Tuple

Kiểu Tuple được dùng chủ yếu để gộp các biến đơn lẻ thành một nhóm. Trong Python dữ liệu Tuple được đặt trong cặp ngoặc vuông ().

Hai thao tác chính với Tuple là gộp (pack) và tách (unpack):

      
        # Gộp nhiều biến thành tuple
        student_info = ('Nguyễn Văn A', 2000, 'Hà Nội')

        # Tách tuple thành các biến đơn lẻ
        student_name, student_birth_year, student_address = student_info

        # Dùng tuple để khai báo nhiều biến một lúc
        student_name, student_birth_year, student_address = 'Nguyễn Văn A', 2000, 'Hà Nội'
      
    

9.Kiểu dữ liệu Dictionary

Kiểu dữ liệu Dictionary dùng để chứa một bảng biến đổi 1-1 giữa 2 tập hợp :

Mỗi phần tử của tập nguồn có một phần tử tương ứng ở tập đích.

Cú pháp khai báo dictionary:

      
      d = {
          <key1> : <value1>,
          <key2> : <value2>,
          ...
      }
      
    

Các cặp key-value được ngăn cách nhau bởi dấu phảy, giữa keyvalue trong một cặp ngăn cách nhau bởi dấu hai chấm.

Một trong những ứng dụng thường dùng của kiểu Dictionary là để thế hiện một đối tượng với nhiều trường dữ liệu, khi đó mỗi key là tên một trường dữ liệu, value là giá trị của trường dữ liệu đó.

Ví dụ:

      
      student_info = {
          "name": "Nguyễn Văn A",
          "birth_year": 2000,
          "address": "Hà Nội"
      }
      
    

Một số thao tác trên kiểu dữ liệu Dictionary:

Thao tác Cú pháp Ví dụ
Lấy giá trị một trường
<dict>[<key>]
hoặc
<dict>.get(<key>)
Sự khác biệt giữa 2 cách lấy giá trị: Nếu key không tồn tại, cách lấy theo ngoặc vuông sẽ sinh ra ngoại lệ (exception), cách lấy theo hàm get trả về None.
student_info = {
   "name": "Nguyễn Văn A",
   "date-of-birth": '01/01/2000'
}
print(student_info["name"])
print(student_info.get('date-of-birth'))
Thêm mới/cập nhật một trường dữ liệu
<dict>[<key>] = value
student_info = {
   "name": "Nguyễn Văn A",
   "date-of-birth": '01/01/2000'
}
student_info["address"] = 'Hà Nội'
Lấy tập nguồn (key)
<dict>.keys()
student_info = {
   "name": "Nguyễn Văn A",
   "date-of-birth": '01/01/2000'
}
print(student_info.keys())
Lấy tập đích (value)
<dict>.values()
student_info = {
   "name": "Nguyễn Văn A",
   "date-of-birth": '01/01/2000'
}
print(student_info.values())
Lấy danh sách các cặp (key, value)
<dict>.items()
student_info = {
   "name": "Nguyễn Văn A",
   "date-of-birth": '01/01/2000'
}
print(student_info.items())
Duyệt các trường của Dictionary
for key, value in <dict>.items():
  //process key, value
student_info = {
   "name": "Nguyễn Văn A",
   "date-of-birth": '01/01/2000'
}
for key, value in student_info.items():
   print(key, ':', value)

Một số ví dụ:

      
        # Đếm số lần xuất hiện của các từ trong một đoạn văn bản
        text = 'Một năm có mười hai tháng, tháng hai có hai mươi tám ngày, các tháng còn lại có ba mươi hoặc ba mươi mốt ngày'

        text = text.lower()
        for c in ['.', ',' , ':']:
          text = text.replace(c, ' ')

        words_count = {}

        for word in text.split():
          words_count[word] = words_count.get(word, 0) + 1

        for word in words_count:
          print(word , ' : ', words_count[word])
      
      
        # Cho một bảng dữ liệu nhiệt độ từ 0-23h tại một địa điểm, in ra thời gian nhiệt độ cao nhất trong ngày

        temp_table = [
          {'hour': 0, 'temp': 20},
          {'hour': 2, 'temp': 20},
          {'hour': 4, 'temp': 19},
          {'hour': 6, 'temp': 20},
          {'hour': 8, 'temp': 21},
          {'hour': 10, 'temp': 23},
          {'hour': 12, 'temp': 24},
          {'hour': 14, 'temp': 25},
          {'hour': 16, 'temp': 24},
          {'hour': 18, 'temp': 22},
          {'hour': 20, 'temp': 21},
          {'hour': 22, 'temp': 19},
        ]
        
        temp_max = temp_table[0]['temp']
        hour_max = 0

        for record in temp_table:
            if record['temp'] > temp_max:
                temp_max = record['temp']
                hour_max = record['hour']

        print(f'Nhiệt độ cao nhất : {temp_max} độ, lúc {hour_max}h')
      
    

10. Kiểu dữ liệu Set

Kiểu dữ liệu Set dùng để chứa các phần tử của một tập hợp, trong đó mỗi phần tử chỉ xuất hiện một lần duy nhất. Trong Python dữ liệu Set được đặt trong cặp ngoặc nhọn {}

So với kiểu List, kiểu Set có điểm khác biệt:

Một số thao tác trên kiểu dữ liệu Set:

Thao tác Cú pháp Ví dụ
Thêm một phần tử
<set>.add(<new_value>)
s = {1, 2}
s.add(3)
print(s)
Xoá một phần tử
<set>.remove(<value>)
s = {1, 2, 3}
s.remove(2)
print(s)
Kiểm tra set có chứa một phần tử
<value> in <set>
s = {1, 2, 3}
if 1 in s:
   print('1 exists in set')
Kiểm tra set không chứa một phần tử
<value> not in <set>
s = {1, 2, 3}
if 4 not in s:
   print('4 does not exist in set')
Lấy hợp của 2 set
<set1>.union(<set2>)
s1 = {1, 2, 3}
s2 = {3, 4, 5}
print(s1.union(s2)) # {1, 2, 3, 4, 5}
Lấy giao của 2 set
<set1>.intersection(<set2>)
s1 = {1, 2, 3}
s2 = {3, 4, 5}
print(s1.intersection(s2)) # {3}
Lấy phần khác nhau của 2 set
<set1>.difference(<set2>)
s1 = {1, 2, 3}
s2 = {3, 4, 5}
print(s1.difference(s2)) # {1, 2}

11. Hàm (Function)

Hàm (function) dùng để khai báo các chức năng được sử dụng lặp lại nhiều lần, hoặc để chia nhỏ chương trình thành các khối nhỏ để dễ phát triển/bảo trì.

Cú pháp khai báo hàm:

def <ten_ham>(<danh_sach_bien>):
   // Nội dung thân hàm
   return <ket_qua>

Trong đó:

Ví dụ:


      # Hàm lấy số lớn nhất trong 2 số
      def max_2_number(a, b):
          if(a > b):
              return a
          else:
              return b

      # Gọi hàm trong chương trình chính
      print(max_2_number(2, 3))

      # Hàm tính tổng một dãy số
      def arr_sum(arr):
          s = 0
          for x in arr: s += x
          return s
      
      # Gọi hàm trong chương trình chính
      print(arr_sum([1, 2, 3, 4, 5]))
    

Hàm trả về nhiều giá trị:

Để trả về nhiều giá trị trong hàm, sử dụng tuple để gộp các giá trị thành một nhóm:


      # Hàm sắp xếp 2 số
      def sort_2_number(a, b):
          if a < b:
              return a, b
          else:
              return b, a
    

Giá trị mặc định của hàm:

Khi khai báo hàm ,có thể gắn giá trị mặc định cho một số tham số đầu vào, khi gọi hàm, nếu tham số nào không được truyền vào thì nó sẽ được nhận giá trị mặc định (nếu có). Ví dụ:


      # Hàm in ra địa chỉ từ các thông tin thành phần
      def print_address(street, city, country='Việt Nam'):
          print(f'{street}, {city}, {country}')

      print_address('123 Cầu Giấy', 'Hà Nội')  # no 'country' sent into function
    

12. Module

Khi xây dựng một chương trình lớn, thông thường các chức năng sẽ được chia nhỏ thành các module để việc phát triển và bảo trì được dễ dàng.

Ví dụ: Tạo 2 file trong một thư mục với tên lib.pymain.py. File lib.py chứa một số hàm thư viện, file main.py là chương trình chính:

      
        # lib.py
        def sum_2_number(a, b):
            return a + b
      
      
        # main.py
        import lib
        print(lib.sum_2_number(2, 3))
      
    

Trong file main.py lệnh import lib được dùng để truy xuất đến các chức năng được khai báo trong file lib.py. Sau khai báo import này, trong thân chương trình main.py có thể gọi đến các hàm đã khai báo trong lib.py bằng cách gắn tiến tố lib. trước tên các hàm:

    print(lib.sum_2_number(2, 3))

Ngoài cách trên, có thể sử dụng hàm của các module theo cú pháp:

    from <module> import <function>

Khi đó trong chương trình sử dụng module, không cần viết tiền tố tên module trước tên hàm nữa. Ví dụ:

      
        # lib.py
        def sum_2_number(a, b):
            return a + b
      
      
        # main.py
        from lib import sum_2_number
        print(sum_2_number(2, 3))
      
    

13. File I/O

Các file lưu dữ liệu lâu dài trên ổ đĩa. Hai thao tác chính làm việc với file là đọc & ghi dữ liệu

Mở file

Cú pháp lệnh mở file trong Python:

    <file_handle> = open(<file_name>, <mode>, encoding=<encoding>)

Trong đó:

Đọc file

- Đọc toàn bộ nội dung file: sử dụng hàm read để nhận về toàn bộ nội dung của file:

    data = <file_handle>.read()

   Nếu file được mở theo chế độ văn bản, dữ liệu trả về có dạng string, nếu file được mở theo chế độ nhị phân, dữ liệu trả về có dạng bytes

- Đọc file và tách thành từng dòng (chỉ với file văn bản): sử dụng hàm readlines để nhận về nội dung của file dưới dạng một danh sách các dòng văn bản:

    lines = <file_handle>.readlines()

- Đọc từng dòng một của file (chỉ với file văn bản): sử dụng vòng lặp for trên chính thẻ điều khiển file:

    for line in <file_handle>:
       # process line

Ghi file

- Để ghi dữ liệu vào file, sử dụng hàm write:

    <file_handle>.write(data)

  Nếu file được mở theo chế độ văn bản, dữ liệu ghi vào cần có kiểu là string, nếu file được mở theo chế độ nhị phân, dữ liệu ghi vào cần có kiểu là bytes

Đóng file

Sau khi đọc/ghi file xong, cần đóng file để tránh mất mát dữ liệu:

    <file_handle>.close()

Một số ví dụ:

      
        # Đọc vào một file văn bản, tạo ra một file văn bản mới bằng cách bỏ đi các dòng trống.
        infile = open('input.txt', encoding='utf-8')
        outfile = open('output.txt', 'w', encoding='utf-8')

        for line in infile:
            if line.strip() != '':
                outfile.write(line)

        infile.close()
        outfile.close()
      
      
        # Đọc vào một file văn bản, đếm số lần xuất hiện của các từ trong file
        words_count = {}

        f = open('input.txt', encoding='utf-8')

        for line in f.readlines():
            line = line.strip().lower()
            for c in ['.', ',' , ':']:
                line = line.replace(c, ' ')
        
            for word in line.split():
                words_count[word] = words_count.get(word, 0) + 1

        for word in words_count:
            print(word , ' : ', words_count[word])
      
    

14. Dữ liệu kiểu Date/DateTime

Dữ liệu kiểu Date & Time được cung cấp bởi thư viện datetime của hệ thống:

Tạo mới dữ liệu date/datetime:

from datetime import date, datetime
<date> = date(<year>, <month>, <day>)
<datetime> = datetime(<year>, <month>, <day>, <hour>, <minute>, <second>)

Ví dụ:

      
        from datetime import date, datetime

        d = date(2022,1,1)                  # 01/01/2022
        dt = datetime(2022,2,1,23,59,59)    # 23:59:59 01/02/2022
      
    

Lấy ngày/giờ hiện tại:

      
        from datetime import date, datetime

        d = date.today()          # today
        dt = datetime.now()       # current datetime
      
    

Lấy các thông tin ngày, tháng, năm, giờ, phút giây của dữ liệu date/datetime:

      
        from datetime import datetime

        dt = datetime.now()
        print(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second)
      
    

Chuyển đổi dữ liệu date/datetime sang string: sử dụng hàm strftime:

      
        from datetime import datetime

        dt = datetime.now()
        print(dt.strftime('%d-%m-%Y'))
        print(dt.strftime('%d/%m/%Y %H:%M:%S'))
      
    

Ý nghĩa của các thành phần trong format ngày tháng:

Chuyển đổi dữ liệu từ string sang date/datetime: sử dụng hàm strptime:

      
        from datetime import datetime

        d = datetime.strptime('01/01/2022', '%d/%m/%Y')
        dt = datetime.strptime('01-02-2022 23:59:59', '%d-%m-%Y %H:%M:%S')
      
    

Khoảng thời gian (timedelta)

Dữ liệu kiểu khoảng thời gian (timedelta) được dùng để đo sự chênh lệch giữa 2 thời điểm (datetime).

Khai báo dữ liệu timedelta:

from datetime import timedelta
duration = timedelta(days=<days>, seconds=<seconds>)

Hai thành phần trong timedelta là ngày (days) và giây (seconds)

Tính khoảng thời gian giữa 2 thời điểm: sử dụng phép trừ giữa 2 biến datetime:

      
        from datetime import datetime

        dt1 = datetime(2022, 1, 1)
        dt2 = datetime.now()

        duration = dt2 - dt1
        print(f'Duration: {duration.days} days, {duration.seconds} seconds')
      
    

Tính thời điểm cách một thời điểm một khoảng thời gian: sử dụng phép cộng giữa biến datetime với biến timedelta:

      
        from datetime import datetime, timedelta

        now = datetime.now()
        this_time_next_week = now + timedelta(days=7)
        print(this_time_next_week)