Nhập chữ và số đều nhận xâu trước
`input("Nhập số: ")` hiển thị lời nhắc rồi chờ người dùng gõ. Nếu gõ `12`, giá trị trả về vẫn là xâu `"12"`, không phải số 12. Vì thế `"12" + "3"` cho `"123"`; để cộng số cần chuyển: `int("12") + int("3")` cho 15. `type("12")` trả `<class 'str'>`, còn `type(12)` trả `<class 'int'>`. Bài chỉ dùng dữ liệu mẫu, không cần nhập tên hay thông tin cá nhân thật.
Bài luyện
Người dùng gõ `12` khi chạy `s = input("Nhập: ")`. Ngay sau lệnh, `s` thuộc kiểu nào?
Chưa gọi int nên chưa thành số nguyên.
Chưa gọi float nên chưa thành số thực.
input trả xâu chứa các kí tự vừa nhập.
Không có phép so sánh để tạo bool.
Lời giải
`input` trả xâu, nên sau khi gõ 12 thì `s` có giá trị `"12"` và thuộc kiểu `str`.
Chuyển kiểu có điều kiện
`int("12")` cho số nguyên 12; `float("12.5")` cho số thực 12.5; `str(12)` cho xâu `"12"`. `int(12.9)` cho 12 vì phần thập phân bị bỏ theo hướng về 0, không phải làm tròn gần nhất. `int("12.5")` và `int("12+3")` báo `ValueError`: chúng không phải cách viết trực tiếp của một số nguyên. `float(13 + 1)` hợp lệ và cho 14.0, vì Python tính 13 + 1 trước rồi đổi sang số thực.
Muốn nhận số nguyên từ bàn phím, dùng `so = int(input("Nhập số nguyên: "))`. Nếu người dùng nhập chữ thay vì số, phép đổi sẽ lỗi; thực hành cần thử dữ liệu hợp lệ và nhận biết thông báo lỗi, chưa coi chương trình cơ bản này là bộ kiểm đầu vào hoàn chỉnh.
Bài luyện
Biểu thức nào cho số thực 14.0 mà không báo lỗi?
13 + 1 cho 14, float đổi thành 14.0.
Xâu `12.5` không là số nguyên viết trực tiếp.
Xâu biểu thức không được int tự tính.
Chữ này không là cách viết số thực Python chấp nhận.
Lời giải
Python tính `13 + 1` thành 14 rồi `float(14)` thành 14.0. Các xâu ở phương án khác không đổi trực tiếp được bằng hàm nêu ra.
Bài luyện
Sau khi gõ `7`, muốn biến `n` chứa số nguyên 7 để cộng với 5, lệnh nào phù hợp?
input chỉ trả xâu "7".
str vẫn tạo xâu.
int đổi xâu "7" thành số nguyên 7.
type trả đối tượng kiểu, không phải số 7.
Lời giải
`input` nhận `"7"` là xâu. `int(...)` đổi xâu hợp lệ ấy thành số 7, nên `n + 5` cho 12.
Bài luyện
Khi nào `int("12.5")` báo lỗi?
Dấu chấm thập phân khiến xâu không đúng dạng số nguyên cho int.
Phép đổi này chạy cục bộ.
int không trả 12.5 từ xâu đó.
int không bỏ dấu chấm trong xâu để tạo 125.
Lời giải
`int` chuyển xâu có dạng số nguyên như `"12"`; xâu `"12.5"` là cách viết số thập phân nên gây `ValueError` khi đưa thẳng cho int.
Đang học