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
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ú.
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, worldChạ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ểu | Ví dụ | Ghi chú |
|---|---|---|
int | 42, -7, 10**20 | Số nguyên với kích thước bất kỳ |
float | 3.14, 1e-3 | Số thực dấu phẩy động 64 bit |
bool | True, False | Viết hoa chữ cái đầu |
str | "hi", 'hi' | Văn bản Unicode bất biến |
None | None | Biể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) # 1Hà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)) # 25Gợ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ểu | Cú pháp | Có thứ tự | Thay đổi được | Dùng điển hình |
|---|---|---|---|---|
list | [1, 2, 3] | Có | Có | Dãy mà bạn thay đổi được |
tuple | (1, 2) | Có | Không | Nhóm giá trị cố định |
dict | {"a": 1} | Theo thứ tự thêm vào | Có | Tra cứu từ khóa ra giá trị |
set | {1, 2} | Không | Có | 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 NoneMộ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ùngisvớiNone(if x is None).input()luôn trả về chuỗi; hãy chuyển bằngint()hoặcfloat()trước khi tính toán.- Sao chép list bằng
b = akhông tạo bản sao; cả hai tên cùng trỏ đến một list. Hãy dùngb = a.copy()hoặcb = 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.