Giải SGK Tin học 10 Bài 18 (Kết nối tri thức): Các lệnh vào ra đơn giản

Trả lời nhanh

Bài 18 xoay quanh một ý then chốt: lệnh input() nhập dữ liệu từ bàn phím và luôn trả về xâu kí tự (str). Muốn tính toán, em phải bọc thêm int() cho số nguyên hoặc float() cho số thực, ví dụ n = int(input("Nhập n: ")). Lệnh print() dùng để đưa kết quả ra màn hình.

Tóm tắt kiến thức cần nhớ trước khi làm bài

Muốn giải nhanh các câu hỏi trong bài, em chỉ cần nắm ba nhóm kiến thức dưới đây. Nếu muốn đọc kỹ hơn, em xem lý thuyết ở bài riêng: Lý thuyết Tin học 10 Bài 18.

  • Lệnh nhập: <biến> = input(<lời nhắc>). Lời nhắc là một xâu hiện ra màn hình để người dùng biết cần gõ gì.
  • Lệnh xuất: print(<giá trị 1>, <giá trị 2>, ...). Các giá trị được in cách nhau một dấu cách và kết thúc bằng xuống dòng.
  • Hàm chuyển kiểu: int(), float(), str(); hàm type() cho biết kiểu của một giá trị.
Hàm Công dụng Ví dụ Kết quả
int() Đổi sang số nguyên int("1110") 1110 (int)
int() Số thực → số nguyên (bỏ phần thập phân) int(3.9) 3 (int)
float() Đổi sang số thực float("15.0") 15.0 (float)
str() Đổi sang xâu kí tự str(150) “150” (str)

Khởi động (trang 97)

Đề yêu cầu dự đoán cú pháp và chức năng của input(). Đã có print() để đưa dữ liệu ra, thì lệnh ngược lại phải đưa dữ liệu từ người dùng vào chương trình và lưu vào một biến.

  • Cú pháp: <biến> = input(<lời nhắc>)
  • Chức năng: hiển thị lời nhắc, chờ người dùng gõ từ bàn phím rồi nhấn Enter, sau đó gán những gì đã gõ cho biến.

1. Các lệnh vào ra đơn giản

Hoạt động 1 (trang 97)

Lệnh input() cho phép nhập dữ liệu từ đâu? Từ thiết bị vào chuẩn, thông thường là bàn phím.

Giá trị nhập là số hay xâu? Python luôn coi mọi thứ người dùng gõ là một xâu kí tự. Dù em gõ 25, biến nhận về là xâu "25" chứ chưa phải số 25. Đây là điểm dễ nhầm nhất của cả bài.

Mẹo nhớ: bàn phím chỉ gửi “chữ” cho máy; muốn máy hiểu đó là “số” thì em phải ra lệnh chuyển kiểu.

2. Chuyển đổi kiểu dữ liệu cơ bản của Python

Hoạt động 2 (trang 98)

Các kiểu dữ liệu cơ bản đã học: int (số nguyên), float (số thực), str (xâu kí tự), bool (lôgic: True/False). Để biết kiểu của một biến hay biểu thức, em dùng hàm type(), chẳng hạn type(5) cho <class 'int'>.

Câu hỏi (trang 98): Xác định kiểu và giá trị của biểu thức

Biểu thức Kiểu Giá trị Giải thích
a) 15 + 20 - 7 int 28 15 + 20 = 35, 35 − 7 = 28
b) 32 > 45 bool False 32 không lớn hơn 45
c) 13 != 8 + 5 bool False Vế phải là 13; hai số bằng nhau nên “khác nhau” là sai
d) 1 == 2 bool False 1 và 2 không bằng nhau

Lưu ý: nếu cả biểu thức ở câu a được đặt trong dấu nháy, tức "15 + 20 - 7", thì nó chỉ là một xâu kí tự (kiểu str) và Python không tính gì cả. Phép so sánh luôn cho kết quả kiểu bool.

Hoạt động 3 (trang 98)

1. Có chuyển được dữ liệu từ kiểu này sang kiểu khác không? Có. Ba hàm int(), float(), str() chuyển dữ liệu sang số nguyên, số thực và xâu kí tự tương ứng.

2. Biến s đang là xâu "123", muốn thành số nguyên 123? Viết s = int(s). Chỉ gọi int(s) thôi thì chưa thay đổi biến s; em phải gán kết quả lại.

Câu hỏi 1 (trang 99)

  • a) str(150) → "150", kiểu xâu kí tự.
  • b) int("1110") → 1110, số nguyên.
  • c) float("15.0") → 15.0, số thực.

Câu hỏi 2 (trang 99): Lệnh nào báo lỗi?

Đáp án: A. int("12.0").

  • A (lỗi): int() chỉ chấp nhận xâu có dạng số nguyên thuần túy. Xâu "12.0" có dấu chấm thập phân nên Python báo ValueError. Muốn đúng phải viết int(float("12.0")).
  • B (không lỗi): 13 + 1 = 14 là số nguyên, float(14) cho 14.0.
  • C (không lỗi): str(17.001) cho xâu "17.001"; đổi sang xâu thì lúc nào cũng được.

3. Nhập dữ liệu số từ bàn phím

Hoạt động 4 (trang 99)

Vì input() trả về xâu, nên:

  • nhập số nguyên: n = int(input("Nhập n: "))
  • nhập số thực: x = float(input("Nhập x: "))

Hàm input() chạy trước, đưa ra xâu; hàm int() hoặc float() bao ngoài nhận xâu đó rồi đổi thành số.

Câu hỏi (trang 100)

Lệnh x = input("Nhập số x:") để nhập số cho biến x đúng hay sai? Sai. Lệnh này chỉ cho x là một xâu kí tự, không phải số. Hậu quả: nếu sau đó viết x + 1 thì Python báo lỗi vì không cộng được xâu với số; còn x + x với x = "5" lại cho "55" chứ không phải 10. Cách đúng: x = float(input("Nhập số x: ")) (hoặc int nếu x nguyên).

Luyện tập (trang 100)

Luyện tập 1: Lệnh nào báo lỗi?

Lệnh Kết quả Lý do
a) int("12 + 45") Lỗi Xâu chứa biểu thức, không phải một số nguyên; Python không tự tính
b) float(123.56) Không lỗi, ra 123.56 Đổi số thực sang số thực là hợp lệ
c) float("123,5.5") Lỗi Có dấu phẩy và hai dấu chấm, không đúng dạng số thực

Vậy các lệnh báo lỗi là a) và c).

Luyện tập 2: Vì sao nhập số thực cần viết float(input())?

Vì input() chỉ cho xâu, mà số thực cần ở kiểu float để tính toán được. Không dùng int(input()) vì khi người dùng gõ 3.5, lệnh int("3.5") sẽ báo lỗi (giống câu hỏi 2 ở trên). Hàm float() nhận được cả "3.5" lẫn "3".

Vận dụng (trang 100)

Vận dụng 1: Đổi số giây sang giờ – phút – giây

Ý tưởng: 1 giờ = 3600 giây, 1 phút = 60 giây. Dùng phép chia lấy phần nguyên // và chia lấy dư %.

ss = int(input("Nhập số giây: "))
gio = ss // 3600
phut = (ss % 3600) // 60
giay = ss % 60
print(ss, "giây =", gio, "giờ", phut, "phút", giay, "giây")

Kiểm tra bằng ví dụ: nhập 3725 → gio = 1 (còn dư 125), phut = 2, giay = 5. Kết quả: 3725 giây = 1 giờ 2 phút 5 giây. Thử lại: 3600 + 120 + 5 = 3725 ✓.

Vận dụng 2: Chu vi và diện tích tam giác theo ba cạnh

Ý tưởng: chu vi P = a + b + c. Diện tích dùng công thức Heron: nửa chu vi p = (a + b + c)/2, diện tích S = √(p(p − a)(p − b)(p − c)). Trong Python, căn bậc hai lấy bằng ** 0.5.

a = float(input("Nhập cạnh a: "))
b = float(input("Nhập cạnh b: "))
c = float(input("Nhập cạnh c: "))
chu_vi = a + b + c
p = chu_vi / 2
dien_tich = (p * (p - a) * (p - b) * (p - c)) ** 0.5
print("Chu vi =", chu_vi)
print("Diện tích =", dien_tich)

Chạy thử: a = 3, b = 4, c = 5 → chu vi 12.0; p = 6.0; tích 6 × 3 × 2 × 1 = 36; căn bằng 6.0. Đúng với tam giác vuông có diện tích (3 × 4)/2 = 6 ✓.

Đề bài nói ba số dương, và chương trình này giả định ba số đó tạo thành tam giác thật. Nếu a, b, c không thỏa bất đẳng thức tam giác thì biểu thức trong căn âm và kết quả không có nghĩa; phần kiểm tra điều kiện sẽ học ở Bài 19: Câu lệnh rẽ nhánh If.

Lỗi sai thường gặp ở bài này

  1. Quên chuyển kiểu: viết a = input() rồi a * 2. Với a = "4" kết quả là "44", không phải 8.
  2. Dùng int() cho số thực: int(input()) gặp 2.5 sẽ báo lỗi. Em hãy dùng float().
  3. Quên gán lại: int(s) đứng một mình không đổi biến s.
  4. Gõ dấu phẩy thập phân: Python chỉ nhận dấu chấm. "3,5" không chuyển được bằng float().
  5. Nhầm = và ==: = là phép gán, == là so sánh bằng.

Bài luyện tập tự giải

  1. Cho đoạn lệnh: a = input(), b = input(), print(a + b). Nhập 12 rồi 5, màn hình in gì? Sửa thế nào để in 17?
  2. Lệnh nào báo lỗi: int(3.9), float("abc"), int("7")?
  3. Viết chương trình nhập tên và tuổi, in ra “Năm sau bạn … sẽ … tuổi”.

Đáp án gợi ý:

  1. In 125 vì cộng hai xâu là ghép xâu. Sửa: a = int(input()), b = int(input()) thì in 17.
  2. Chỉ float("abc") báo lỗi. int(3.9) cho 3 (bỏ phần thập phân, không làm tròn), int("7") cho 7.
  3. ten = input("Tên của bạn: "); tuoi = int(input("Tuổi: ")); print("Năm sau", ten, "sẽ", tuoi + 1, "tuổi").

Các bài liên quan trong Tin học 10 Kết nối tri thức

Câu hỏi thường gặp

Vì sao lệnh input() trong Python luôn trả về xâu kí tự?

Dữ liệu gõ từ bàn phím được Python xem là chuỗi kí tự. Python không đoán em muốn số hay chữ, nên em phải tự chuyển kiểu bằng int() hoặc float() khi cần tính toán.

Khi nào dùng int(input()), khi nào dùng float(input())?

Dùng int(input()) khi dữ liệu là số nguyên như số lượng, số giây, tuổi. Dùng float(input()) khi dữ liệu có thể có phần thập phân như độ dài, điểm, giá tiền.

Vì sao int("12.0") báo lỗi nhưng float("12") thì không?

int() chỉ nhận xâu dạng số nguyên thuần túy, còn xâu "12.0" có phần thập phân nên gây lỗi. float() nhận được cả xâu số nguyên lẫn số thực, nên float("12") cho 12.0. Muốn đổi "12.0" thành số nguyên, em viết int(float("12.0")).

Hàm type() dùng để làm gì?

type() cho biết kiểu dữ liệu của một giá trị hay biến, ví dụ int, float, str hoặc bool. Hàm này giúp em kiểm tra xem dữ liệu nhập vào đã được chuyển kiểu đúng chưa.