Giải Tin Học 10 trang 154

Lời giải chi tiết SGK Lớp 10 · Môn Tin Học · Trang 154–155

Bài 32: Ôn tập lập trình Python

Hai trang này thuộc Bài 32 trong sách Tin học 10 (bộ Kết nối tri thức). Đây là bài thực hành ôn tập, gồm các nhiệm vụ lập trình mang tính liên môn. Mình sẽ tóm tắt lý thuyết rồi giải chi tiết từng nhiệm vụ nhé.

Mục tiêu bài học

Sau bài này em sẽ:

  • Thực hành ôn tập lập trình Python.
  • Thực hành lập trình giải bài toán có tính liên môn (Toán, Vật lí, lịch...).

Nhiệm vụ 1: Tách họ, tên, đệm từ họ tên đầy đủ

Đề bài: Viết chương trình nhập họ tên đầy đủ từ bàn phím, ví dụ "Nguyễn Thị Mai Hương", sau đó tách riêng phần tên, họ, đệm và in ra màn hình.

Ý tưởng giải:

  • Dùng split() để tách xâu họ tên thành một danh sách các từ (mỗi từ là một phần tử).
  • Phần tử đầu tiên slist[0] là họ.
  • Phần tử cuối cùng slist[n-1] là tên.
  • Các phần tử ở giữa (từ vị trí 1 đến n-2) là phần đệm. Ghép lại bằng join().

Chương trình hoàn chỉnh:

hoten = input("Nhập họ tên đầy đủ của em: ")
slist = hoten.split()        # tách thành danh sách các từ
n = len(slist)               # số từ trong họ tên
ho = slist[0]                # họ: từ đầu tiên
ten = slist[n-1]             # tên: từ cuối cùng
dem = " ".join(slist[1:n-1]) # đệm: các từ ở giữa
print("Tên của em là", ten)
print("Họ của em là", ho)
if n > 2:                    # chỉ có đệm khi có hơn 2 từ
    print("Đệm của em là", dem)

Giải thích các điểm quan trọng:

  • slist[1:n-1] lấy lát cắt từ vị trí 1 đến n-2 (Python không lấy phần tử ở chỉ số cuối của lát cắt), đúng là phần nằm giữa họ và tên.
  • " ".join(...) nối các từ trong danh sách lại, chèn dấu cách giữa các từ.
  • Điều kiện if n > 2 rất hợp lý: nếu họ tên chỉ có 2 từ (ví dụ "Lan Anh") thì không có phần đệm, nên không in dòng đệm.

Ví dụ chạy thử với "Nguyễn Thị Mai Hương":

BiếnGiá trị
slist['Nguyễn', 'Thị', 'Mai', 'Hương']
n4
hoNguyễn
tenHương
demThị Mai

Nhiệm vụ 2: Tính trọng lượng trên các hành tinh khác

Đề bài: Nhập trọng lượng của em trên Trái Đất (đơn vị N – Newton), tính trọng lượng trên một hành tinh khác (Mặt Trăng, Hoả tinh, Kim tinh, Thổ tinh, Mộc tinh, Mặt Trời).

Tóm tắt cơ sở Vật lí:

  • Công thức trọng lượng: $P = m \times g$ (1)
  • P: trọng lượng (N), m: khối lượng (kg), g: gia tốc trọng trường (m/s²).
  • Trên Trái Đất $g = 9.8 \ m/s^2$. Mỗi hành tinh có g khác nhau.
  • Khối lượng m không đổi dù ở hành tinh nào.

Suy ra công thức tính trọng lượng mới:

$$m = \frac{P_0}{9.8} = \frac{P}{g} \Rightarrow P = P_0 \times \frac{g}{9.8} \quad (2)$$

Trong đó $P_0$ là trọng lượng trên Trái Đất, P là trọng lượng cần tìm trên hành tinh có gia tốc g.

Chương trình (weight.py):

def string(w):
    s = ""
    for i in range(len(w)):
        s = s + str(i+1) + ". " + w[i] + " "
    return s

planet = ["Mặt Trăng", "Hoả tinh", "Kim tinh", "Mộc tinh", "Thổ tinh", "Mặt Trời"]
gravities = [1.62, 3.711, 8.83, 24.79, 10.44, 274.0]

P_earth = float(input("Nhập trọng lượng của em, tính theo N: "))
k = int(input("Nhập số thứ tự hành tinh\n" + string(planet) + ": "))
Grp = gravities[k-1]
P = round(P_earth * Grp / 9.8, 3)
print("Trọng lượng của em trên", planet[k-1], "là:", P, "N")

Giải thích chi tiết:

  • Hàm string(w) tạo một xâu đánh số các hành tinh để hiển thị menu cho người dùng chọn, dạng 1. Mặt Trăng 2. Hoả tinh ....
  • planetgravities là hai danh sách song song: phần tử thứ i của planet ứng với gia tốc g ở phần tử thứ i của gravities.
  • Người dùng nhập số thứ tự k (bắt đầu từ 1), nên chương trình dùng k-1 để truy cập đúng phần tử trong danh sách (vì chỉ số Python bắt đầu từ 0).
  • P = round(P_earth * Grp / 9.8, 3) áp dụng đúng công thức (2), làm tròn 3 chữ số thập phân.

Ví dụ chạy: nếu trọng lượng trên Trái Đất là 500 N, chọn Mặt Trăng (k = 1, g = 1.62):

$$P = 500 \times \frac{1.62}{9.8} \approx 82.653 \ N$$


Nhiệm vụ 3: Kiểm tra tính hợp lệ của ngày, tháng, năm

Đề bài: Nhập ba số tự nhiên ngày, tháng, năm theo khuôn dạng (ví dụ 08-02-2021). Chương trình thông báo bộ dữ liệu đã nhập hợp lệ hay không hợp lệ.

Hướng dẫn của sách (phần trang này mới giới thiệu ý tưởng):

  • Ba biến chính là day, month, year.
  • Điểm đặc biệt cần chú ý: kiểm tra năm year có nhuận không. Nếu nhuận thì tháng 2 có 29 ngày, năm không nhuận tháng 2 có 28 ngày.
  • Dùng một danh sách thang để lưu số ngày của 12 tháng.
  • Sau mỗi lần nhập, cần kiểm tra năm nhuận để cập nhật lại số ngày tháng 2.

Quy tắc năm nhuận (kiến thức cần nhớ): Năm nhuận khi chia hết cho 4 nhưng không chia hết cho 100, hoặc chia hết cho 400.

Phần code đầy đủ của Nhiệm vụ 3 nằm ở trang sau (155 tiếp theo) nên trang này chỉ dừng ở phần phân tích ý tưởng. Để em hình dung trước, logic kiểm tra sẽ như sau:

day = int(input())
month = int(input())
year = int(input())

# danh sách số ngày 12 tháng (mặc định năm thường)
thang = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

# kiểm tra năm nhuận để cập nhật tháng 2
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
    thang[1] = 29

# kiểm tra hợp lệ
if 1 <= month <= 12 and 1 <= day <= thang[month-1]:
    print("Bộ dữ liệu hợp lệ")
else:
    print("Bộ dữ liệu không hợp lệ")

Giải thích:

  • thang[month-1] cho biết tháng đó có tối đa bao nhiêu ngày, dùng month-1 vì chỉ số bắt đầu từ 0.
  • Điều kiện hợp lệ: tháng phải từ 1 đến 12, và ngày phải từ 1 đến số ngày tối đa của tháng đó.

Một lưu ý nhỏ: em gửi ảnh ghi số trang 153 và 154 (góc dưới mỗi trang), không phải 154–155 như tiêu đề yêu cầu. Mình đã giải đúng theo nội dung trong hai ảnh em cung cấp. Nếu em cần phần code đầy đủ của Nhiệm vụ 3 ở trang tiếp theo, gửi ảnh trang đó để mình giải tiếp nhé.

Chế độ đọc sách →