Bài 18: Các lệnh vào ra đơn giản – Lý thuyết, Sơ đồ tư duy

I. Lý thuyết trọng tâm

1. Lệnh nhập và xuất dữ liệu

Để chương trình có thể tương tác với người dùng, Python cung cấp hai lệnh cơ bản:

Lệnh Chức năng Thiết bị
input() Nhập dữ liệu vào chương trình Bàn phím (thiết bị vào chuẩn)
print() Xuất dữ liệu ra ngoài Màn hình (thiết bị ra chuẩn)

a) Lệnh input() — nhập dữ liệu

Cú pháp:

<biến> = input(<Dòng thông báo>)

Khi gặp lệnh input(), chương trình sẽ dừng lại, hiển thị dòng thông báo và chờ người dùng gõ dữ liệu từ bàn phím. Sau khi nhấn Enter, nội dung vừa nhập được gán cho biến.

>>> input("Nhập một số: ")
Nhập một số: 12
'12'

Điểm cực kì quan trọng: Dù người dùng gõ số, biểu thức hay chữ, lệnh input() luôn trả về xâu kí tự (string). Ở ví dụ trên, nhập 12 nhưng kết quả là '12' (xâu) chứ không phải số nguyên 12.

b) Lệnh print() — xuất dữ liệu

Đã học ở Bài 16. Nhắc lại: print() có thể in một hoặc nhiều giá trị với các kiểu dữ liệu khác nhau, cho phép cả biểu thức tính toán. Các giá trị cách nhau bởi dấu phẩy sẽ được in trên cùng một dòng, phân cách bằng dấu cách.

name = input("Nhập họ tên em: ")
print("Xin chào", name)

2. Kiểu dữ liệu cơ bản và lệnh type()

a) Bốn kiểu dữ liệu cơ bản trong Python

Tên kiểu Viết tắt Mô tả Ví dụ
Số nguyên int Các số không có phần thập phân 10, -3, 0
Số thực float Các số có phần thập phân 1.8, -0.5, 3.0
Xâu kí tự str Chuỗi kí tự đặt trong dấu nháy "One", 'Tin học'
Logic bool Chỉ có hai giá trị: True hoặc False True, False

Kiểu logic (bool) thường xuất hiện dưới dạng kết quả của phép so sánh:

>>> 3 > 2
True
>>> 5 < 0
False
>>> b = 10 > 3
>>> type(b)
<class 'bool'>

b) Lệnh type() — nhận biết kiểu dữ liệu

Dùng type(<biến hoặc giá trị>) để kiểm tra kiểu dữ liệu:

>>> n, x, s = 10, 1.8, "One"
>>> type(n)
<class 'int'>       # n là số nguyên
>>> type(x)
<class 'float'>     # x là số thực
>>> type(s)
<class 'str'>       # s là xâu kí tự

Câu hỏi kiểm tra nhanh (SGK): Xác định kiểu và giá trị của các biểu thức sau:

Biểu thức Giá trị Kiểu dữ liệu Giải thích
"15 + 20 - 7" '15 + 20 - 7' str (xâu kí tự) Nội dung trong dấu nháy → xâu, không tính toán
32 > 45 False bool (logic) 32 không lớn hơn 45 → sai
13 != 8 + 5 False bool (logic) 8 + 5 = 13, mà 13 != 13 là sai
1 == 2 False bool (logic) 1 không bằng 2 → sai

3. Chuyển đổi kiểu dữ liệu

Python cung cấp ba hàm chuyển đổi kiểu:

a) int() — chuyển sang số nguyên

Đầu vào Kết quả Ghi chú
int(12.6) 12 Số thực → số nguyên (cắt bỏ phần thập phân, không làm tròn)
int("123") 123 Xâu chứa số nguyên → số nguyên
int("10.35") Lỗi Xâu chứa số thực → int() không chuyển được
int("12+45") Lỗi Xâu chứa biểu thức → int() không chuyển được

b) float() — chuyển sang số thực

Đầu vào Kết quả Ghi chú
float(8) 8.0 Số nguyên → số thực
float("10.23") 10.23 Xâu chứa số thực → số thực
float(13+1) 14.0 Biểu thức số (tính 13+1=14 trước) → số thực

c) str() — chuyển sang xâu kí tự

Đầu vào Kết quả Ghi chú
str(150) '150' Số nguyên → xâu
str(12.567) '12.567' Số thực → xâu
str(12+34) '46' Tính biểu thức (12+34=46) trước, rồi chuyển thành xâu
str(2>3) 'False' Giá trị logic → xâu

Quy tắc quan trọng: int()float() chỉ chuyển đổi được xâu ghi giá trị số trực tiếp (ví dụ "123", "10.23"). Nếu xâu chứa biểu thức (ví dụ "12+45") hoặc định dạng số không hợp lệ (ví dụ "10.35" cho int(), "123,5.5" cho float()) thì sẽ báo lỗi.

Câu hỏi kiểm tra nhanh (SGK – bài 1): Mỗi lệnh sau trả lại giá trị nào?

Lệnh Kết quả
a) str(150) '150'
b) int("1110") 1110
c) float("15.0") 15.0

Câu hỏi kiểm tra nhanh (SGK – bài 2): Lệnh nào sau đây sẽ báo lỗi?

  • A. int("12.0") ✔️ Báo lỗi — xâu "12.0" chứa dấu chấm thập phân, int() không chuyển đổi được xâu chứa số thực.
  • B. float(13+1) — Không lỗi. Python tính 13+1 = 14 trước, rồi float(14) = 14.0.
  • C. str(17.001) — Không lỗi. Chuyển số thực thành xâu '17.001'.

4. Nhập số nguyên và số thực từ bàn phím

input() luôn trả về xâu kí tự, nên muốn nhập dữ liệu dạng số phải kết hợp với hàm chuyển đổi kiểu:

Muốn nhập Cú pháp Ví dụ
Số nguyên <biến> = int(input(<thông báo>)) n = int(input("Nhập số: "))
Số thực <biến> = float(input(<thông báo>)) x = float(input("Nhập số: "))
Xâu kí tự <biến> = input(<thông báo>) ten = input("Nhập tên: ")

Câu hỏi kiểm tra nhanh (SGK): Dùng lệnh x = input("Nhập số x:") để nhập số cho biến x là đúng hay sai?

Sai.input() luôn trả về xâu kí tự, nên x sẽ nhận giá trị kiểu xâu (ví dụ '5'), không thể tính toán số học. Muốn nhập số phải viết x = int(input("Nhập số x:")) hoặc x = float(input("Nhập số x:")).

II. Phương pháp giải các dạng bài tập

Dạng 1: Xác định kiểu dữ liệu và giá trị của biểu thức

Phương pháp:

  • Nếu biểu thức nằm trong dấu nháy " " → kiểu str, giá trị là nội dung nguyên văn.
  • Nếu biểu thức là phép so sánh (>, <, >=, <=, ==, !=) → kiểu bool, giá trị là True hoặc False.
  • Nếu biểu thức là phép tính số học → kiểu int hoặc float (phép / luôn cho float).
  • Dùng type() để kiểm tra kiểu nếu không chắc chắn.

Lưu ý phép so sánh: == là phép kiểm tra bằng (hai dấu bằng), != là phép kiểm tra khác nhau. Cẩn thận không nhầm = (lệnh gán) với == (so sánh bằng).

Bài tập mẫu: (đã giải ở phần lý thuyết — câu hỏi kiểm tra nhanh SGK về "15 + 20 - 7", 32 > 45, 13 != 8+5, 1 == 2)

Dạng 2: Xác định lệnh chuyển đổi kiểu đúng/sai (báo lỗi hay không)

Phương pháp:

Khi kiểm tra lệnh chuyển đổi kiểu, áp dụng bảng quy tắc sau:

Hàm Chấp nhận Báo lỗi khi
int() Số thực (cắt phần thập phân), xâu chứa đúng số nguyên Xâu chứa số thực ("10.35"), xâu chứa biểu thức ("12+45"), xâu không phải số ("abc")
float() Số nguyên, xâu chứa đúng số (nguyên hoặc thực) Xâu chứa dấu phẩy ("123,5.5"), xâu chứa biểu thức, xâu không phải số
str() Mọi kiểu dữ liệu (số, logic, xâu…) Hầu như không bao giờ lỗi

Mấu chốt: int()float() chỉ đọc được xâu ghi giá trị số trực tiếp. Nếu xâu chứa phép tính, dấu phẩy, hoặc định dạng không đúng → lỗi ValueError.

Bài tập mẫu (SGK – Luyện tập, bài 1): Những lệnh nào trong các lệnh sau sẽ báo lỗi?

a) int("12+45")   b) float(123.56)   c) float("123,5.5")

Lời giải:

Lệnh Báo lỗi? Giải thích
a) int("12+45") Có lỗi Xâu "12+45" chứa biểu thức toán học (có dấu +), int() không tính biểu thức trong xâu → ValueError
b) float(123.56) Không lỗi 123.56 đã là số thực, float(123.56) trả về 123.56
c) float("123,5.5") Có lỗi Xâu "123,5.5" chứa dấu phẩy , không phải định dạng số hợp lệ → ValueError

Dạng 3: Viết chương trình nhập/xuất dữ liệu

Phương pháp:

  • Bước 1: Xác định dữ liệu cần nhập: là xâu, số nguyên hay số thực?
    • Xâu → input()
    • Số nguyên → int(input())
    • Số thực → float(input())
  • Bước 2: Thực hiện tính toán (nếu có).
  • Bước 3: Dùng print() để xuất kết quả, kết hợp xâu thông báo và biến/biểu thức.

Bài tập mẫu (SGK – Thực hành, nhiệm vụ 2): Viết chương trình nhập họ tên, sau đó nhập tuổi của học sinh. Chương trình đưa ra thông báo, ví dụ: Bạn Nguyễn Hoà Bình 15 tuổi.

Lời giải:

ten = input("Nhập họ tên học sinh: ")
tuoi = int(input("Nhập tuổi: "))
print("Bạn", ten, tuoi, "tuổi")

Giải thích:

  • Họ tên là xâu kí tự → dùng input() trực tiếp.
  • Tuổi là số nguyên → dùng int(input()) để chuyển đổi.
  • print() in nhiều giá trị cách nhau bằng dấu phẩy → tự động thêm dấu cách giữa các giá trị.

Kết quả khi chạy:

Nhập họ tên học sinh: Nguyễn Hoà Bình
Nhập tuổi: 15
Bạn Nguyễn Hoà Bình 15 tuổi

Dạng 4: Giải thích tại sao cần dùng int(input()) / float(input())

Phương pháp:

Đây là dạng câu hỏi lý luận, cần trình bày rõ logic 3 bước:

  1. Lệnh input() luôn trả về xâu kí tự (str), dù người dùng nhập số.
  2. Xâu kí tự không thể tham gia phép tính số học (ví dụ "5" + "3" cho "53" chứ không phải 8).
  3. Do đó, cần dùng int() hoặc float() để chuyển đổi xâu thành số trước khi tính toán.

Bài tập mẫu (SGK – Luyện tập, bài 2): Vì sao khi nhập một số thực cần viết lệnh float(input())?

Lời giải:

Vì lệnh input() luôn trả về kết quả là xâu kí tự (kiểu str), ngay cả khi người dùng gõ số. Ví dụ nhập 3.14 thì biến nhận giá trị xâu "3.14" chứ không phải số thực 3.14. Muốn sử dụng giá trị này trong các phép tính số học, ta phải dùng float() để chuyển xâu "3.14" thành số thực 3.14. Nếu không chuyển đổi, phép toán trên xâu sẽ cho kết quả sai hoặc gây lỗi.

III. Sơ đồ tư duy

1. Lệnh nhập và xuất dữ liệu

  • 1.1. input(<thông báo>): nhập dữ liệu từ bàn phím, luôn trả về xâu kí tự
  • 1.2. print(v1, v2, ..., vn): xuất dữ liệu ra màn hình

2. Kiểu dữ liệu cơ bản

  • 2.1. int — số nguyên
  • 2.2. float — số thực
  • 2.3. str — xâu kí tự
  • 2.4. bool — logic (True / False)
  • 2.5. Lệnh type() để kiểm tra kiểu dữ liệu

3. Chuyển đổi kiểu dữ liệu

  • 3.1. int(): chuyển sang số nguyên (cắt phần thập phân, không làm tròn)
  • 3.2. float(): chuyển sang số thực
  • 3.3. str(): chuyển sang xâu kí tự (chấp nhận mọi kiểu)
  • 3.4. Giới hạn: int(), float() không chuyển được xâu chứa biểu thức toán

4. Nhập số từ bàn phím

  • 4.1. Nhập số nguyên: int(input())
  • 4.2. Nhập số thực: float(input())
  • 4.3. Nhập xâu kí tự: input() (không cần chuyển đổi)

IV. Sai lầm thường gặp

Sai lầm Đính chính
Nghĩ rằng input() trả về số nếu người dùng nhập số input() luôn trả về xâu kí tự (str), bất kể người dùng gõ gì. Nhập 12 → nhận '12' (xâu), không phải số 12.
Dùng x = input() rồi tính toán số học trực tiếp với x Sai vì x là xâu. Phải viết x = int(input()) hoặc x = float(input()) để chuyển sang số trước khi tính.
Nghĩ int("10.35") sẽ cho kết quả 10 int() không thể chuyển xâu chứa số thực ("10.35") → báo lỗi. Muốn làm vậy phải viết int(float("10.35")) (chuyển sang float trước, rồi int).
Nghĩ int("12+45") sẽ tính 12+45 = 57 int()float() không tính biểu thức trong xâu. Chỉ chuyển đổi xâu ghi giá trị số trực tiếp. int("12+45") → lỗi.
Nhầm lẫn = (gán) với == (so sánh bằng) x = 5lệnh gán (gán giá trị 5 cho x). x == 5phép so sánh (kiểm tra x có bằng 5 không, trả về True/False).
Nghĩ int(12.6) sẽ làm tròn thành 13 int() cắt bỏ phần thập phân (không làm tròn): int(12.6) = 12, int(12.9) = 12, int(-3.7) = -3.
Nhầm lẫn float("123,5") sẽ hoạt động bình thường Python dùng dấu chấm . cho phần thập phân (theo chuẩn quốc tế), không dùng dấu phẩy ,. float("123,5") → lỗi. Phải viết float("123.5").
Thầy Phạm Thành Danh

Thầy Phạm Thành Danh

(Người kiểm duyệt, ra đề)

Chức vụ: Trưởng ban biên soạn môn Tin Học THPT

Trình độ: Cử nhân Sư phạm Tin học, Chứng chỉ hạng II, Chứng chỉ Tin học, Ngoại ngữ B1

Kinh nghiệm: 8+ năm kinh nghiệm tại Trường THPT Thuận Hóa