Câu 1Cho age = 30, chuyện gì xảy ra khi bạn chạy "I am " + age + " years old"?
Chuyển đổi giữa số và chuỗi
Học cách chuyển đổi giữa số và chuỗi trong Python với str(), int() và float() để tránh các lỗi kiểu thường gặp.
Vì sao chuyển đổi kiểu lại quan trọng
Trong Python, bạn không thể cứ thế cộng hay so sánh các giá trị khác kiểu như bình thường.
Trường hợp kinh điển là kết hợp số (int / float) với chuỗi (str). Ví dụ "25" thoạt nhìn giống số 25, nhưng với Python nó chỉ là hai ký tự xếp cạnh nhau — không thể dùng trong phép tính.
Đây là lúc chuyển đổi kiểu (ép kiểu) vào cuộc để đồng bộ các kiểu. Khi bạn thành thạo str() / int() / float(), bạn có thể chuyển đổi thoải mái giữa số và chuỗi.
Số → Chuỗi (str())
Khi bạn truyền một số vào str(), bạn nhận lại một chuỗi biểu diễn số đó.
Dù đó là int, float hay bool, str() biến hầu như mọi thứ thành dạng chuỗi dễ đọc cho con người.
Bạn chuyển từ bản thân con số sang biểu diễn chuỗi của nó.
Hãy coi đây là bước chuẩn bị trước khi nối (+) các giá trị thành một câu.
age = 25
temp = -20.5
# Số -> Chuỗi
print(str(age)) # '25'
print(type(str(age))) # <class 'str'>
# Khi đã là chuỗi, + có thể nối
print("Tuổi: " + str(age) + " tuổi") # Tuổi: 25 tuổi
print("Nhiệt độ hiện tại là " + str(temp) + " độ") # Nhiệt độ hiện tại là -20.5 độ
Khi nào dùng f-string thay thế
Bên trong một f-string (f"Tuổi: {age} tuổi"), các giá trị tự động được chuyển thành str, nên bạn không cần gọi str() nữa. str() phát huy tác dụng khi bạn ghép chuỗi bằng + hay .join(), hoặc khi bạn muốn cố định một giá trị dưới dạng chuỗi — tên file, dòng log, khóa JSON và những thứ tương tự.
Chuỗi → Số (int() / float())
Chiều ngược lại thì dùng int() và float(). Dù giá trị trông như một chuỗi, miễn là nội dung là số, bạn có thể chuyển đổi và dùng nó trong phép tính.
Những thứ như input từ người dùng, cột CSV, phản hồi từ API thường đến dưới dạng str, nên chuyển chúng thành số là việc bạn sẽ làm rất nhiều.
Dùng int() khi bạn muốn có số nguyên, và float() khi bạn muốn cho phép số thập phân.
int("3.14") sẽ lỗi — nó không làm được phép chuyển đổi đó.
quantity = "12"
price = "198.5"
# Chuỗi -> int
q = int(quantity)
print(q + 3) # 15 (dùng được như số)
# Chuỗi -> float
p = float(price)
print(p * q) # 2382.0 (float nên có .0)
print(type(q), type(p)) # <class 'int'> <class 'float'>
Chuỗi không phải số sẽ raise ValueError
Truyền thứ gì đó không đọc được như một con số, chẳng hạn int("abc") hoặc float("hello"), sẽ raise ValueError và dừng chương trình của bạn. Khi chuyển đổi trực tiếp input từ người dùng, các pattern quen thuộc là kiểm tra trước bằng isdigit() hoặc bắt lỗi bằng try / except (sẽ có ở chương sau).
Các pattern chuyển đổi thường gặp
Cuối cùng, đây là ba pattern chuyển đổi khiến mọi người vấp trong thực tế.
| Mục tiêu | Cách viết | Kết quả |
|---|---|---|
| Chuyển "3.14" thành số nguyên | int(float("3.14")) | 3 (phần thập phân bị cắt) |
| Đếm số chữ số của một int | len(str(1234)) | 4 |
| Làm tròn float thành số nguyên | round(3.7) — không phải int(), dùng round() | 4 |
int("3.14") raise ValueError. Đó là vì int() chỉ chấp nhận chuỗi trông giống số nguyên, nên chuỗi có dấu thập phân cần được chạy qua float() trước rồi mới truyền vào int() — hai bước.
Cũng lưu ý rằng int() cắt bỏ (bỏ phần thập phân). Nếu muốn làm tròn, hãy dùng round().
Chuỗi có dấu thập phân không thể truyền thẳng vào int().
Chuyển nó bằng float() trước, rồi truyền kết quả vào int() — một lần ép kiểu hai bước để có số nguyên.
Trong bài này, chúng ta đã đi qua chuyển đổi kiểu với str() / int() / float(). Một cách dễ nhớ: số → chuỗi dùng để dựng output hiển thị, còn chuỗi → số dùng để xử lý input và dữ liệu.
Kiểm tra kiến thức
Hãy trả lời từng câu hỏi một.
Câu 2Kết quả đúng khi chạy int("3.14") là gì?
Câu 3len(str(1234)) trả về cái gì?