Giải Tin Học 10 trang 100
Lời giải chi tiết SGK Lớp 10 · Môn Tin Há»c · Trang 100–101
Nguon: Tin Hoc 10 - Ket Noi Tri Thuc Voi Cuoc Song (trang 100 – 101)
🔍 Kiến thức cần nhớ
Bài học giới thiệu ba lệnh chuyển đổi kiểu dữ liệu trong Python:
- int() — chuyển số thực hoặc xâu chứa số nguyên thành số nguyên.
- float() — chuyển số nguyên hoặc xâu chứa số thực thành số thực.
- str() — chuyển các kiểu dữ liệu khác thành xâu kí tự.
💡 Mẹo nhớ: - int = INTeger (số nguyên) - float = số thực (có phần thập phân) - str = STRing (xâu kí tự)
Quy tắc quan trọng:
- int() và float() chỉ chuyển được xâu ghi giá trị số trực tiếp, không xử lý được xâu là biểu thức toán.
- int("12+45") → báo lỗi (vì "12+45" là biểu thức, không phải số).
- int() không nhận xâu chứa số thực: int("10.35") → lỗi.
- Lệnh input() luôn trả về xâu kí tự, nên muốn lấy số phải bọc thêm int() hoặc float().
⚠️ Lưu ý thi: Phân biệt rõ: - int("10") → 10 (được) - int("10.5") → lỗi (xâu chứa số thực) - int(10.5) → 10 (cắt bỏ phần thập phân, KHÔNG làm tròn)
⚙️ Bài tập
Câu 1 (trang 99)
Đề bài: Mỗi lệnh sau sẽ trả lại các giá trị nào?
a) str(150) b) int("1110") c) float("15.0")
Cách 1 — Phân tích từng lệnh theo chức năng
a) str(150)
- str() chuyển số nguyên 150 thành xâu kí tự.
- Kết quả: '150' (có dấu nháy → là xâu kí tự).
b) int("1110")
- int() chuyển xâu "1110" (ghi giá trị số nguyên trực tiếp) thành số nguyên.
- Kết quả: 1110 (số nguyên, không có dấu nháy).
c) float("15.0")
- float() chuyển xâu "15.0" thành số thực.
- Kết quả: 15.0 (số thực).
💡 Mẹo nhớ: Kết quả có dấu nháy ' ' → là xâu (str). Không có dấu nháy → là số (int hoặc float).
Câu 2 (trang 99)
Đề bài: Lệnh nào sau đây sẽ báo lỗi?
A. int("12.0") B. float(13+1) C. str(17.001)
Cách 1 — Kiểm tra điều kiện hợp lệ của từng lệnh
A. int("12.0")
- "12.0" là xâu chứa số thực, mà int() không nhận xâu chứa số thực.
- → BÁO LỖI (ValueError).
B. float(13+1)
- Trong ngoặc là phép tính 13+1 = 14 (đã là số, không phải xâu).
- float(14) → 14.0. → Hợp lệ.
C. str(17.001)
- str() chuyển mọi kiểu thành xâu → '17.001'. → Hợp lệ.
Đáp án: A
⚠️ Lưu ý thi: Nếu đề là int(12.0) (không có nháy) thì hợp lệ và cho 12. Lỗi chỉ xảy ra khi int() nhận xâu chứa số thực như "12.0".
Câu hỏi Hoạt động 4 (trang 99)
Đề bài: Dữ liệu nhập từ bàn phím bằng lệnh input() luôn là xâu kí tự nên muốn nhập dữ liệu đầu vào là số nguyên hay số thực thì phải làm thế nào?
Trả lời:
Vì input() luôn trả về xâu kí tự, nên sau khi nhập cần dùng lệnh chuyển đổi:
- Nhập số nguyên: bọc bằng int()
n = int(input("Nhập số tự nhiên: "))
- Nhập số thực: bọc bằng float()
x = float(input("Nhập số thực x: "))
Câu hỏi (trang 100)
Đề bài: Dùng lệnh x = input("Nhập số x:") để nhập số cho biến x là đúng hay sai?
Trả lời: SAI.
Lệnh input() trả về xâu kí tự, nên biến x sẽ là một xâu chứ không phải số. Nếu sau đó thực hiện phép tính số học (cộng, trừ, nhân, chia) với x sẽ bị lỗi hoặc cho kết quả không mong muốn (ví dụ phép "+" sẽ nối xâu).
Cách đúng: dùng x = int(input(...)) hoặc x = float(input(...)) tùy kiểu số cần nhập.
Thực hành — Nhiệm vụ 1 (trang 100)
Đề bài: Viết chương trình nhập lần lượt ba số tự nhiên m, n, p, sau đó in ra tổng của ba số này.
Cách 1 — Theo hướng dẫn sách giáo khoa
m = int(input("Nhập số nguyên m: "))
n = int(input("Nhập số nguyên n: "))
p = int(input("Nhập số nguyên p: "))
print("Tổng ba số đã nhập là", m + n + p)
Mỗi lệnh nhập đều bọc int() để chuyển xâu nhập vào thành số nguyên, nhờ vậy phép cộng m+n+p mới đúng nghĩa tính tổng.
Thực hành — Nhiệm vụ 2 (trang 100)
Đề bài: 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.
Cách 1 — Theo hướng dẫn sách giáo khoa
ten = input("Nhập họ tên học sinh: ")
tuoi = int(input("Nhập tuổi: "))
print("Bạn", ten, tuoi, "tuổi")
Họ tên là chữ → giữ nguyên kiểu xâu (không cần chuyển đổi). Tuổi là số → bọc int().
Luyện tập Câu 1 (trang 100)
Đề bài: 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")
Cách 1 — Phân tích từng lệnh
a) int("12+45")
- "12+45" là biểu thức toán dạng xâu, int() không xử lý biểu thức.
- → BÁO LỖI (ValueError: invalid literal for int()).
b) float(123.56)
- 123.56 đã là số thực, float(123.56) → 123.56. → Hợp lệ.
c) float("123,5.5")
- Xâu "123,5.5" không phải dạng số hợp lệ (dùng dấu phẩy và có hai dấu chấm/phẩy).
- → BÁO LỖI (ValueError).
Kết luận: Lệnh a) và c) báo lỗi.
⚠️ Lưu ý thi: Trong Python, số thực dùng dấu chấm (.) làm phân cách thập phân, không dùng dấu phẩy. "123,5" sẽ gây lỗi.
Luyện tập Câu 2 (trang 100)
Đề bài: Vì sao khi nhập một số thực cần viết lệnh float(input())?
Trả lời:
Vì lệnh input() luôn trả về xâu kí tự, không phải số. Nếu để nguyên, ta không thực hiện được các phép tính số học với giá trị nhập.
Lệnh float() bọc bên ngoài có nhiệm vụ chuyển xâu đó thành số thực, nhờ vậy biến mới mang kiểu số thực và có thể tham gia tính toán bình thường.
x = float(input("Nhập số thực x: "))
Vận dụng Câu 1 (trang 100)
Đề bài: Viết chương trình nhập giá trị ss là số giây từ bàn phím. Thông báo ra màn hình thời gian ss giây này sau khi đổi thành thời gian tính bằng ngày, giờ, phút, giây.
Cách 1 — Dùng phép chia lấy nguyên (//) và chia lấy dư (%)
Quy đổi: 1 phút = 60 giây, 1 giờ = 3600 giây, 1 ngày = 86400 giây.
ss = int(input("Nhập số giây ss: "))
ngay = ss // 86400 # số ngày
con_lai = ss % 86400 # số giây còn lại sau khi trừ ngày
gio = con_lai // 3600 # số giờ
con_lai = con_lai % 3600
phut = con_lai // 60 # số phút
giay = con_lai % 60 # số giây còn lại
print(ss, "giây =", ngay, "ngày", gio, "giờ", phut, "phút", giay, "giây")
Giải thích logic:
- ss // 86400 lấy số ngày trọn vẹn; phần dư % 86400 là số giây còn lại.
- Tiếp tục tách giờ (3600 giây), phút (60 giây), cuối cùng còn lại là giây.
Cách 2 — Dùng hàm divmod() cho gọn
divmod(a, b) trả về cặp (thương, số dư) cùng lúc.
ss = int(input("Nhập số giây ss: "))
ngay, ss = divmod(ss, 86400)
gio, ss = divmod(ss, 3600)
phut, giay = divmod(ss, 60)
print(ngay, "ngày", gio, "giờ", phut, "phút", giay, "giây")
💡 Mẹo nhớ: divmod(a, b) = (a // b, a % b). Dùng divmod giúp tách thương và dư trong một bước, code ngắn gọn hơn.
Vận dụng Câu 2 (trang 100)
Đề bài: Viết chương trình nhập ba số thực dương a, b, c và tính chu vi, diện tích của tam giác có độ dài các cạnh là a, b, c (a, b, c > 0 và thỏa mãn bất đẳng thức tam giác).
Gợi ý: Công thức Heron tính diện tích: S = √(p(p − a)(p − b)(p − c)) với p là nửa chu vi tam giác.
Cách 1 — Dùng module math để tính căn bậc hai
import math
a = float(input("Nhập cạnh a: "))
b = float(input("Nhập cạnh b: "))
c = float(input("Nhập cạnh c: "))
# Kiểm tra điều kiện tam giác
if a > 0 and b > 0 and c > 0 and a + b > c and a + c > b and b + c > a:
chu_vi = a + b + c
p = chu_vi / 2 # nửa chu vi
S = math.sqrt(p * (p - a) * (p - b) * (p - c)) # công thức Heron
print("Chu vi tam giác là:", chu_vi)
print("Diện tích tam giác là:", S)
else:
print("Ba số đã nhập không tạo thành tam giác!")
Giải thích:
- Nhập ba cạnh bằng float() vì là số thực.
- Kiểm tra bất đẳng thức tam giác: tổng hai cạnh bất kỳ phải lớn hơn cạnh còn lại.
- p = (a+b+c)/2 là nửa chu vi.
- math.sqrt() tính căn bậc hai theo công thức Heron.
Cách 2 — Dùng lũy thừa 0.5 thay cho math.sqrt (không cần import)
Căn bậc hai của x chính là x^0.5, viết trong Python là x ** 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: "))
if a + b > c and a + c > b and b + c > a:
p = (a + b + c) / 2
S = (p * (p - a) * (p - b) * (p - c)) ** 0.5
print("Chu vi tam giác là:", a + b + c)
print("Diện tích tam giác là:", S)
else:
print("Ba số đã nhập không tạo thành tam giác!")
⚠️ Lưu ý thi: Luôn kiểm tra bất đẳng thức tam giác trước khi tính diện tích. Nếu bỏ qua bước này và ba cạnh không tạo thành tam giác, biểu thức trong căn có thể âm → chương trình báo lỗi (math domain error).
🎯 Ghi nhớ: - int(), float(), str() lần lượt chuyển dữ liệu về số nguyên, số thực, xâu kí tự. - int(), float() KHÔNG xử lý xâu là biểu thức toán (như "12+45") và phải dùng dấu chấm cho số thập phân. - input() luôn trả về xâu, nên muốn nhập số phải bọc int(input()) hoặc float(input()). - Khi tính diện tích tam giác bằng Heron, nhớ kiểm tra điều kiện tam giác và dùng nửa chu vi p = (a+b+c)/2.
