Học bằng cách đọc theo thứ tự

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.

Kiểu không khớp thì không kết hợp được
25int+"tuổi"strTypeErrorsai kiểusai kiểu

Đâ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.

Trước hết, hãy xem chuyện gì xảy ra nếu bạn không khớp kiểu — kiểm tra thông báo lỗi. Chạy đoạn code nguyên xi.

Python Editor

Chạy code để xem đầu ra

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.

str() làm gì
25intstr()"25"str-20.5floatstr()"-20.5"strtruyềnthành strtruyềnthành str

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ự.

Dùng user = "Minh"score = 95, hãy dựng một dòng báo cáo.

① Chỉ dùng str()+, in ra "Điểm của Minh là 95".

② Viết lại điều tương tự bằng f-string, không gọi str().

Python Editor

Chạy code để xem đầu ra

Chuỗi → Số (int() / float())

Chiều ngược lại thì dùng int()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.

Chọn giữa int() và float()
"100"strint()100int"3.14"strfloat()3.14floattruyềnthành inttruyềnthành float

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).

Hãy tính tổng tiền cho một giỏ hàng. Tất cả giá trị đến dưới dạng chuỗi.

Bạn có unit_price_str = "198", count_str = "5", và mức thuế TAX_RATE = 0.1.

① Chuyển số lượng và đơn giá thành số bằng int().

② Nhân tổng (đơn giá × số lượng) với mức thuế và print() ra giá đã bao gồm thuế.

Python Editor

Chạy code để xem đầu ra

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êuCách viếtKết quả
Chuyển "3.14" thành số nguyênint(float("3.14"))3 (phần thập phân bị cắt)
Đếm số chữ số của một intlen(str(1234))4
Làm tròn float thành số nguyênround(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 thập phân thành int qua float()
"3.14"strfloat()3.14floatint()3inttruyềnthành floattruyềnthành int

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.

Bạn muốn dùng chuỗi giá price_str = "1980.6" dưới dạng số nguyên.

① Chạy int(price_str) nguyên xi và xác nhận lỗi, rồi comment nó lại.

② Chuyển nó thành số nguyên thông qua float() rồi print() ra kết quả.

Python Editor

Chạy code để xem đầu ra

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.

QUIZ

Kiểm tra kiến thức

Hãy trả lời từng câu hỏi một.

Câu 1Cho age = 30, chuyện gì xảy ra khi bạn chạy "I am " + age + " years old"?

Câu 2Kết quả đúng khi chạy int("3.14") là gì?

Câu 3len(str(1234)) trả về cái gì?