cv.cm

Lập trình · Ngôn ngữ lập trình

Hướng dẫn học Python cơ bản cho người mới

6 phút đọc

Trả lời nhanh

Python là ngôn ngữ thông dịch đa dụng, nổi tiếng với cú pháp dễ đọc, dùng thụt lề thay cho dấu ngoặc nhọn. Hãy cài Python 3, lưu print("Hello, world") vào hello.py rồi chạy python3 hello.py. Các ý tưởng cốt lõi gồm kiểu động, hàm khai báo bằng def, list, dict và set có sẵn, xử lý ngoại lệ bằng try/except và một thư viện chuẩn rất phong phú.

Mở Kiểm tra regex

Python là gì và dùng để làm gì

Python là ngôn ngữ bậc cao, kiểu động, do Guido van Rossum phát hành lần đầu năm 1991. Mã được chạy bởi trình thông dịch (bản chuẩn là CPython) nên không có bước biên dịch riêng. Python được dùng cho phân tích dữ liệu và học máy (NumPy, pandas, PyTorch), back end web (Django, Flask, FastAPI), script tự động hóa, tính toán khoa học và giảng dạy. Python 2 đã hết vòng đời năm 2020, vì vậy bạn nên học Python 3.

Cài Python và chạy Hello, world

Tải bộ cài từ python.org (Windows, macOS) hoặc dùng trình quản lý gói trên Linux. Kiểm tra bằng python3 --version (trên Windows lệnh thường là py hoặc python). Lưu tệp sau với tên hello.py:

print("Hello, world")
python3 hello.py
# Hello, world

Chạy python3 mà không kèm tệp sẽ mở dấu nhắc tương tác (REPL), rất tiện để thử từng dòng một.

Biến và các kiểu dữ liệu cơ bản

Biến được tạo ra khi bạn gán giá trị cho nó. Bạn không khai báo kiểu; chính giá trị mang kiểu, và type(x) cho biết đó là kiểu gì.

KiểuVí dụGhi chú
int42, -7, 10**20Số nguyên với kích thước bất kỳ
float3.14, 1e-3Số thực dấu phẩy động 64 bit
boolTrue, FalseViết hoa chữ cái đầu
str"hi", 'hi'Văn bản Unicode bất biến
NoneNoneBiểu thị không có giá trị
name = "Ada"
age = 36
height = 1.65
print(f"{name} is {age} years old")  # Ada is 36 years old
print(7 / 2, 7 // 2, 7 % 2)          # 3.5 3 1
print(int("12") + 1)                 # 13

Điều khiển luồng: if, for và while

Khối lệnh bắt đầu bằng dấu hai chấm và được xác định bằng thụt lề (quy ước 4 dấu cách). Vòng lặp for duyệt qua mọi chuỗi; range(n) cho các số từ 0 đến n−1.

score = 72
if score >= 90:
    grade = "A"
elif score >= 70:
    grade = "B"
else:
    grade = "C"
print(grade)  # B
for i in range(3):
    print(i)  # 0, then 1, then 2
n = 10
while n > 1:
    n = n // 2
print(n)  # 1

Hàm

Khai báo hàm bằng def. Tham số có thể có giá trị mặc định, và người gọi có thể truyền đối số theo tên. Hàm không có return sẽ trả về None.

def greet(name, greeting="Hello"):
    return f"{greeting}, {name}!"
print(greet("Lin"))                 # Hello, Lin!
print(greet("Lin", greeting="Hi"))  # Hi, Lin!
square = lambda x: x * x
print(square(5))                    # 25

Gợi ý kiểu như def area(w: float, h: float) -> float: ghi rõ ý định và cho phép các công cụ như mypy kiểm tra mã, nhưng trình thông dịch không bắt buộc chúng.

List, tuple, dict và set

KiểuCú phápCó thứ tựThay đổi đượcDùng điển hình
list[1, 2, 3]CóCóDãy mà bạn thay đổi được
tuple(1, 2)CóKhôngNhóm giá trị cố định
dict{"a": 1}Theo thứ tự thêm vàoCóTra cứu từ khóa ra giá trị
set{1, 2}KhôngCóPhần tử duy nhất, kiểm tra tư cách thành viên
nums = [3, 1, 2]
nums.append(5)
nums.sort()
print(nums, nums[0], nums[-1], nums[1:3])  # [1, 2, 3, 5] 1 5 [2, 3]
ages = {"ann": 31, "bob": 25}
ages["cy"] = 40
for person, age in ages.items():
    print(person, age)
print(ages.get("zed", 0))  # 0
squares = [x * x for x in range(5) if x % 2 == 0]
print(squares)  # [0, 4, 16]

Dòng cuối là một list comprehension, một trong những tính năng đặc trưng của Python: nó tạo list từ một vòng lặp và bộ lọc tùy chọn chỉ trong một biểu thức. Dict và set comprehension hoạt động tương tự.

Tính năng đặc trưng: giải nén, with và generator

a, b = 1, 2
a, b = b, a            # swap without a temporary
first, *rest = [1, 2, 3, 4]
print(first, rest)     # 1 [2, 3, 4]
with open("notes.txt", "w", encoding="utf-8") as f:
    f.write("line one\n")   # file is closed automatically
def countdown(n):
    while n > 0:
        yield n
        n -= 1
print(list(countdown(3)))  # [3, 2, 1]

Câu lệnh with tự chạy phần chuẩn bị và dọn dẹp cho bạn (ở đây là đóng tệp ngay cả khi có lỗi). Hàm dùng yield là một generator: nó sinh giá trị theo kiểu lười, từng giá trị một, giúp tiết kiệm bộ nhớ với dữ liệu lớn.

Xử lý lỗi với try và except

Lỗi được phát ra dưới dạng ngoại lệ. Hãy bắt đúng các loại ngoại lệ bạn dự kiến và dùng finally cho đoạn mã luôn phải chạy.

def parse_age(text):
    try:
        age = int(text)
    except ValueError:
        print(f"not a number: {text!r}")
        return None
    if age < 0:
        raise ValueError("age cannot be negative")
    return age
print(parse_age("41"))   # 41
print(parse_age("abc"))  # not a number: 'abc', then None

Một chương trình nhỏ hoàn chỉnh: đếm từ

Script này đọc một tệp văn bản được cho trên dòng lệnh và in ra năm từ xuất hiện nhiều nhất. Nó chỉ dùng thư viện chuẩn.

import sys
from collections import Counter
def top_words(path, n=5):
    with open(path, encoding="utf-8") as f:
        words = f.read().lower().split()
    cleaned = [w.strip(".,;:!?\"'()") for w in words]
    return Counter(w for w in cleaned if w).most_common(n)
if __name__ == "__main__":
    if len(sys.argv) != 2:
        sys.exit("usage: python3 count.py FILE")
    try:
        for word, count in top_words(sys.argv[1]):
            print(f"{count:5}  {word}")
    except FileNotFoundError:
        sys.exit(f"file not found: {sys.argv[1]}")

Chạy bằng python3 count.py notes.txt. Phép kiểm tra if __name__ == "__main__": cho phép nhập tệp như một module mà không chạy phần script.

Những lỗi thường gặp của người mới

  • Trộn tab với dấu cách, hoặc thụt lề không nhất quán, gây ra IndentationError. Hãy cấu hình trình soạn thảo chèn 4 dấu cách.
  • = là gán còn == là so sánh. Chỉ dùng is với None (if x is None).
  • input() luôn trả về chuỗi; hãy chuyển bằng int() hoặc float() trước khi tính toán.
  • Sao chép list bằng b = a không tạo bản sao; cả hai tên cùng trỏ đến một list. Hãy dùng b = a.copy() hoặc b = list(a).
  • Hãy cài gói trong môi trường ảo (python3 -m venv .venv) thay vì cài vào Python của hệ thống.

Học tiếp ở đâu

Hãy đọc hết Python Tutorial chính thức, rồi duyệt Library Reference để học các module như pathlib, json, datetime và itertools. Học pip và môi trường ảo để dùng gói bên thứ ba, và viết kiểm thử với unittest hoặc pytest. Sau đó chọn hướng đi: web (Django hoặc FastAPI), dữ liệu (pandas) hoặc tự động hóa.

Câu hỏi thường gặp

Python có phù hợp cho người mới học không?

Có. Cú pháp ngắn gọn và gần với tiếng Anh thông thường, lỗi được báo rõ ràng và bạn có thể thử từng dòng trong REPL. Python cũng được dùng rộng rãi trong ngành nên kỹ năng của người mới vẫn hữu ích.

Python được biên dịch hay thông dịch?

CPython biên dịch mã nguồn thành bytecode rồi thông dịch bytecode đó, tất cả diễn ra tự động khi bạn chạy script. Bạn không bao giờ phải chạy bước biên dịch riêng.

List và tuple khác nhau thế nào?

List là khả biến: bạn có thể thêm, xóa và đổi phần tử. Tuple là bất biến nên dùng cho các nhóm giá trị cố định và có thể làm khóa của dict.

Vì sao mã Python của tôi chạy chậm?

Vòng lặp Python thuần chậm hơn các ngôn ngữ biên dịch. Hãy dùng hàm dựng sẵn, comprehension và các thư viện như NumPy, vốn chạy vòng lặp bên trong bằng C.

Nên dùng python hay python3 trên dòng lệnh?

Trên macOS và hầu hết hệ thống Linux hãy dùng python3, vì python có thể không có hoặc trỏ đến thứ khác. Trên Windows, trình khởi chạy py là lựa chọn thông dụng.

Tất cả hướng dẫn lập trình