Giáo án Tin học 10 · Toàn bộ sách chính (đồ họa và Python)
Tin họcLớp 10Phần 5. Chủ đề 5. Giải quyết vấn đề với sự trợ giúp của máy tính

Giáo án Bài 25. Một số lệnh làm việc với xâu kí tự

Kế hoạch bài dạy theo mẫu Công văn 5512/BGDĐT-GDTrH · 2 tiết (90 phút)

I. Mục tiêu

1. Kiến thức

  • Nêu được tác dụng của các lệnh split, join, find, replace khi làm việc với xâu kí tự.
  • Giải thích được vì sao split() không đối số tách được từ và bỏ khoảng trắng thừa, còn split(' ') có thể tạo phần tử rỗng.
  • Giải thích được find trả về chỉ số xuất hiện đầu tiên của đoạn tìm thấy hoặc −1-1 khi không tìm thấy; replace tạo xâu mới, xâu gốc không thay đổi.
  • Vận dụng được các lệnh trên để đếm số từ và chuẩn hoá khoảng trắng trong xâu, kiểm tra điều kiện áp dụng và giải thích kết quả.

2. Năng lực

a) Năng lực chung

  • Tự chủ và tự học: tự dự đoán kết quả trước khi chạy chương trình, tự kiểm tra và sửa lỗi khi kết quả không khớp với dự đoán.
  • Giao tiếp và hợp tác: trao đổi trong cặp và nhóm để thống nhất đáp án, trình bày lập luận về quy tắc tách từ và kiểm tra chéo mã của bạn.
  • Giải quyết vấn đề và sáng tạo: phân tích yêu cầu làm sạch dữ liệu nhập tay, chọn lệnh phù hợp và viết chương trình giải quyết tình huống thực tế.

b) Năng lực đặc thù

  • Sử dụng và quản lí các phương tiện công nghệ thông tin và truyền thông: sử dụng IDE Python để soạn, chạy và sửa chương trình xử lí xâu kí tự.
  • Giải quyết vấn đề với sự hỗ trợ của công nghệ thông tin và truyền thông: phân tích bài toán đếm từ và chuẩn hoá xâu, chọn lệnh split, join, find, replace phù hợp, kiểm thử bằng dữ liệu mẫu.
  • Ứng dụng công nghệ thông tin và truyền thông trong học và tự học: sử dụng bài giảng và bài tập tương tác trên NeoEdu để tự luyện tập ngoài giờ.
  • Hợp tác trong môi trường số: chia sẻ tệp mã nguồn và kết quả trong nhóm, nhận xét chéo chương trình của bạn.

3. Phẩm chất

  • Chăm chỉ: thực hành đều đặn, kiên trì sửa lỗi khi chương trình chạy sai hoặc cho kết quả khác dự đoán.
  • Trách nhiệm: hoàn thành phần việc của mình trong nhóm, lưu và nộp đúng tệp chương trình theo yêu cầu của GV.
  • Trung thực: ghi đúng kết quả quan sát được khi chạy chương trình, không sao chép mã của bạn mà không hiểu bản chất.

II. Thiết bị dạy học và học liệu

1. Giáo viên

  • Máy tính, máy chiếu, phần mềm IDE Python (IDLE hoặc Thonny) đã cài sẵn.
  • Bài giảng điện tử về Bài 25 với xâu mẫu ' doc sach moi ' và các đoạn lệnh trong bài.
  • Phiếu học tập số 1 và số 2 (in hoặc chiếu).
  • Học liệu số NeoEdu: neoedu.vn/learn/10/informatics/bai-25-mot-so-lenh-lam-viec-voi-xau-ki-tu (bài giảng, ví dụ và bài tập tương tác).

2. Học sinh

  • Máy tính có cài Python (hoặc truy cập được IDE Python trực tuyến), kết nối mạng để truy cập NeoEdu.
  • Vở ghi, bút, giấy nháp.
  • Phiếu học tập được GV phát hoặc nhận trên lớp học số.

III. Tiến trình dạy học

Hoạt động 1: Mở đầu · 10 phút

Xâu có khoảng trắng thừa thì đếm từ thế nào?

a) Mục tiêu

Xác định vấn đề: xâu có nhiều khoảng trắng thừa khiến việc đếm từ bằng cách đếm dấu cách trở nên sai; từ đó hình thành nhu cầu học các lệnh xử lí xâu.

b) Nội dung

GV chiếu xâu s = ' doc sach moi ' (hai dấu cách đầu, ba dấu cách giữa doc và sach, hai dấu cách cuối). HS trả lời ba câu hỏi:

  1. Xâu này có bao nhiêu từ?
  2. Nếu đếm số dấu cách rồi cộng 1 thì được bao nhiêu? Kết quả đó có đúng không?
  3. Máy tính có thể tự tách các từ mà không bị ảnh hưởng bởi khoảng trắng thừa bằng cách nào?

c) Sản phẩm

HS nêu được: xâu có 3 từ là doc, sach, moi. Đếm dấu cách rồi cộng 1 cho kết quả 9, sai vì xâu có 8 dấu cách, gồm dấu cách ở đầu, cuối và dấu cách liên tiếp. HS nhận ra cần một lệnh tách xâu thành danh sách các từ. HS ghi tên bài 25 và câu hỏi cần giải quyết vào vở.

d) Tổ chức thực hiện

  1. Giáo viên

    Bước 1: Chuyển giao nhiệm vụ

    Chiếu xâu s = ' doc sach moi ' và nêu ba câu hỏi. Yêu cầu HS suy nghĩ cá nhân trong 1 phút, chưa chạy máy.

    Học sinh

    HS đọc xâu, suy nghĩ và ghi nhanh câu trả lời dự kiến vào giấy nháp.

  2. Giáo viên

    Bước 2: Thực hiện nhiệm vụ

    Quan sát, gợi ý HS đếm chậm từng dấu cách nếu còn lúng túng. Mời 3–4 HS ghi đáp án lên bảng hoặc đọc to.

    Học sinh

    HS ghi dự đoán: 'Có 3 từ'; một số HS có thể đếm dấu cách rồi cộng 1 và cho kết quả 9.

  3. Giáo viên

    Bước 3: Báo cáo, thảo luận

    Mời HS trình bày và so sánh các cách đếm, hỏi: 'Vì sao cách đếm dấu cách bị sai?'

    Học sinh

    HS trả lời dự kiến: 'Em đếm 8 dấu cách rồi cộng 1 được 9 nhưng xâu chỉ có 3 từ, vì có dấu cách liên tiếp và dấu cách thừa ở đầu, cuối.'

  4. Giáo viên

    Bước 4: Kết luận, nhận định

    Nhận xét và chốt: đếm dấu cách không phản ánh đúng số từ khi có khoảng trắng thừa; cần lệnh split() để tách xâu thành danh sách từ. Giới thiệu tiêu đề bài 25.

    Học sinh

    HS ghi vở: 'Cần tách xâu thành danh sách từ rồi đếm phần tử của danh sách.'

Hoạt động 2.1: Hình thành kiến thức mới · 25 phút

Tách xâu bằng split() và ghép danh sách bằng join()

a) Mục tiêu

Hiểu split tách xâu thành danh sách; split() không đối số xử lí các khoảng trắng liên tiếp; split(' ') có thể tạo phần tử rỗng; join ghép các xâu bằng dấu phân cách.

b) Nội dung

HS làm theo cặp trên máy tính, chạy lần lượt các lệnh sau trong IDE Python (có thể đối chiếu bài giảng NeoEdu):

  1. s = ' doc sach moi '; print(s.split()); print(len(s.split()))
  2. print(s.split(' ')); print(len(s.split(' ')))
  3. t = ' '.join(s.split()); print(t)
    HS điền câu 1–3 của Phiếu học tập số 1.

c) Sản phẩm

Kết quả HS thu được:

  • s.split() cho ['doc', 'sach', 'moi'], len = 3.
  • s.split(' ') cho danh sách 9 phần tử gồm 6 xâu rỗng '' và 3 từ doc, sach, moi; nên đếm sai nếu chỉ dùng split(' ').
  • ' '.join(s.split()) cho xâu 'doc sach moi'.
    Kết luận HS rút ra: split() không đối số tách theo mọi vùng khoảng trắng và bỏ khoảng trắng thừa ở biên; split(' ') giữ phần tử rỗng; join(danh_sách) ghép các phần tử bằng dấu phân cách đứng trước dấu chấm.

d) Tổ chức thực hiện

  1. Giáo viên

    Bước 1: Chuyển giao nhiệm vụ

    Hướng dẫn HS mở IDE, tạo tệp mới, nhập đúng dấu nháy và dấu cách. Nêu nhiệm vụ: chạy lần lượt ba nhóm lệnh, so sánh kết quả với phần dự đoán ở hoạt động mở đầu.

    Học sinh

    HS nhận nhiệm vụ, mở IDE và nhập đoạn lệnh vào tệp.

  2. Giáo viên

    Bước 2: Thực hiện nhiệm vụ

    Đi quanh lớp, kiểm tra lỗi cú pháp (thiếu dấu nháy, sai dấu ngoặc). Gợi ý: 'Thử đổi dấu cách trong split(' ') và xem số phần tử thay đổi thế nào.'

    Học sinh

    Cặp đôi chạy từng lệnh, ghi kết quả vào Phiếu số 1 và đối chiếu với dự đoán của mình.

  3. Giáo viên

    Bước 3: Báo cáo, thảo luận

    Mời 2 cặp báo cáo: một cặp về split() không đối số, một cặp về split(' ') và join. Hỏi: 'Vì sao split(' ') lại có phần tử rỗng?'

    Học sinh

    HS trả lời dự kiến: 'split() không đối số cho 3 từ vì nó coi mọi dãy khoảng trắng là một dấu ngăn cách; split(' ') cắt tại từng dấu cách nên xuất hiện chuỗi rỗng giữa các dấu cách liên tiếp.'

  4. Giáo viên

    Bước 4: Kết luận, nhận định

    Chốt kiến thức: split() không đối số xử lí khoảng trắng liên tiếp và khoảng trắng ở đầu, cuối; cần đọc rõ mục tiêu giữ hay bỏ khoảng trắng khi chọn cách tách. join ghép danh sách bằng dấu phân cách viết trước .join. Yêu cầu HS ghi vào vở.

    Học sinh

    HS ghi vở: split() tách xâu thành danh sách; join ghép danh sách thành xâu bằng dấu phân cách.

Hoạt động 2.2: Hình thành kiến thức mới · 15 phút

Tìm vị trí bằng find() và thay đoạn bằng replace()

a) Mục tiêu

Hiểu find trả về chỉ số xuất hiện đầu tiên hoặc -1 khi không thấy; replace tạo xâu mới và không làm thay đổi xâu gốc.

b) Nội dung

HS chạy trên máy các lệnh sau và điền Phiếu học tập số 1, câu 4–5:

  1. print('abcabc'.find('bc'))
  2. print('abc'.find('x'))
  3. s = 'a-b-a'; t = s.replace('a', 'xyz'); print(s); print(t); print(len(t))
    GV yêu cầu HS giải thích vì sao độ dài của t là 9.

c) Sản phẩm

Kết quả:

  • 'abcabc'.find('bc') cho 1, vì lần xuất hiện đầu tiên của bc bắt đầu tại chỉ số 1.
  • 'abc'.find('x') cho −1-1, vì không có x trong xâu.
  • s vẫn là 'a-b-a'; t là 'xyz-b-xyz' với độ dài 3+1+1+1+3=93+1+1+1+3=9.
    Kết luận HS rút ra: find trả chỉ số đầu hoặc −1-1; replace tạo xâu mới nên phải gán kết quả vào biến để dùng, xâu gốc không đổi.

d) Tổ chức thực hiện

  1. Giáo viên

    Bước 1: Chuyển giao nhiệm vụ

    Nêu hai lệnh find và replace, yêu cầu HS dự đoán trước khi chạy: kết quả của find('x') là gì? s có đổi sau khi replace không?

    Học sinh

    HS dự đoán: 'find('x') trả về -1 vì không có x', 'Em nghĩ s không đổi vì replace tạo xâu mới.'

  2. Giáo viên

    Bước 2: Thực hiện nhiệm vụ

    Yêu cầu cá nhân chạy chương trình, ghi kết quả. Nhắc HS in cả s và t để so sánh.

    Học sinh

    HS chạy ba lệnh, ghi kết quả vào Phiếu số 1 và so sánh với dự đoán.

  3. Giáo viên

    Bước 3: Báo cáo, thảo luận

    Mời 2 HS đọc kết quả và giải thích vì sao len(t) bằng 9.

    Học sinh

    HS trả lời dự kiến: 'Thay a bằng xyz nên có hai đoạn xyz, mỗi đoạn 3 kí tự, cộng với -, b, - là 3+1+1+1+3=9.'

  4. Giáo viên

    Bước 4: Kết luận, nhận định

    Chốt: find cho chỉ số đầu tiên hoặc -1; replace trả về xâu mới, phải dùng giá trị trả về. Nhấn mạnh điều kiện: kiểm tra kết quả find bằng -1 trước khi dùng vị trí.

    Học sinh

    HS ghi vở: find trả chỉ số hoặc -1; replace tạo xâu mới, xâu gốc không đổi.

Hoạt động 3: Luyện tập · 25 phút

Dự đoán kết quả và viết chương trình đếm từ

a) Mục tiêu

Vận dụng đúng các lệnh split, join, find, replace để dự đoán kết quả, viết chương trình hoàn chỉnh đếm từ và kiểm thử với dữ liệu mẫu.

b) Nội dung

HS làm Phiếu học tập số 2:

  • Câu 1–7: nhóm 4 bạn thảo luận, thống nhất đáp án trắc nghiệm, đúng/sai và sắp xếp các bước.
  • Câu 8–9: mỗi HS viết chương trình trên máy, sau đó đổi máy với bạn trong nhóm để kiểm tra chéo kết quả.

c) Sản phẩm

Đáp án:

  • Câu 1: đáp án A (split() không đối số tách từ và bỏ vùng trắng thừa ở biên; kết quả là danh sách từ).
  • Câu 2: 1 (lần đầu bc bắt đầu tại chỉ số 1).
  • Câu 3: -1 (không có x).
  • Câu 4: 9 (t là 'xyz-b-xyz').
  • Câu 5: đáp án A.
  • Câu 6: Đúng, vì replace tạo kết quả mới, xâu gốc bất biến.
  • Câu 7: Đọc xâu → Tách bằng split() không đối số → Đếm số từ trong danh sách → Đối chiếu kết quả với ba từ doc, sach, moi.
  • Câu 8: chương trình s = ' doc sach moi '; words = s.split(); print(len(words)); kết quả in 3. Thang gợi ý: xâu mẫu cụ thể 0,2 điểm; dùng split() không đối số 0,3 điểm; dùng len và danh sách từ 0,3 điểm; kết quả 3 và giải thích về khoảng trắng 0,2 điểm. Chấp nhận phương án tương đương đúng có lí giải.
  • Câu 9: t = ' '.join(s.split()); print(t) cho 'doc sach moi'. Thang gợi ý: split() loại vùng trắng 0,3 điểm; join bằng một dấu cách 0,4 điểm; kết quả và nêu giới hạn quy tắc 0,3 điểm. Lưu ý: quy tắc từ ở đây chỉ dựa trên khoảng trắng, không phải chuẩn hoá mọi ngôn ngữ.

d) Tổ chức thực hiện

  1. Giáo viên

    Bước 1: Chuyển giao nhiệm vụ

    Phát Phiếu học tập số 2, nêu thời gian 25 phút. Yêu cầu HS ghi dự đoán trước khi chạy chương trình ở câu 8–9.

    Học sinh

    HS nhận phiếu, nhóm 4 bạn chia việc: một bạn đọc đề, một bạn ghi đáp án, các bạn còn lại kiểm tra.

  2. Giáo viên

    Bước 2: Thực hiện nhiệm vụ

    Theo dõi nhóm, gợi ý khi HS nhầm split(' ') với split(). Nhắc HS kiểm tra chéo bằng cách chạy lại cùng dữ liệu mẫu.

    Học sinh

    Nhóm thảo luận câu 1–7; cá nhân viết và chạy chương trình câu 8–9, đổi máy kiểm tra chéo với bạn.

  3. Giáo viên

    Bước 3: Báo cáo, thảo luận

    Mời đại diện 2 nhóm trình bày đáp án câu 7 và đoạn mã câu 9. Hỏi: 'Nếu dùng split(' ') thì câu 8 cho kết quả là bao nhiêu? Vì sao?'

    Học sinh

    HS trả lời dự kiến: 'Nếu dùng split(' ') sẽ cho 9 phần tử vì có nhiều chuỗi rỗng, nên đếm sai.'

  4. Giáo viên

    Bước 4: Kết luận, nhận định

    Chấm nhanh theo thang gợi ý, nêu lỗi thường gặp: dùng split(' ') làm số từ sai; quên gán kết quả của replace hoặc join; không kiểm tra kết quả của find trước khi dùng. Chốt lại quy tắc chọn lệnh theo mục tiêu giữ hay bỏ khoảng trắng.

    Học sinh

    HS sửa lại bài làm theo nhận xét và ghi các lỗi cần tránh vào vở.

Hoạt động 4: Vận dụng · 15 phút

Chuẩn hoá danh sách họ tên nhập từ biểu mẫu

a) Mục tiêu

Vận dụng split, join, find và replace để làm sạch dữ liệu nhập tay trong tình huống thực tế, giải thích kết quả và kiểm tra điều kiện áp dụng.

b) Nội dung

Tình huống: danh sách họ tên học sinh nhập từ biểu mẫu có khoảng trắng thừa, ví dụ ' Nguyễn Văn An ' và 'Trần Thị Bình '. Viết chương trình với dữ liệu mẫu để:

  1. chuẩn hoá mỗi họ tên về dạng các từ cách nhau đúng một dấu cách, không có khoảng trắng đầu, cuối;
  2. in số từ của mỗi họ tên;
  3. dùng find để kiểm tra họ tên có chứa từ 'Văn' hay không, in 'Có' hoặc 'Không'.
    HS trình bày cách làm và nêu điều kiện áp dụng (quy tắc tách từ chỉ dựa trên khoảng trắng).

c) Sản phẩm

Sản phẩm: chương trình chạy đúng với dữ liệu mẫu, in 'Nguyễn Văn An' và 'Trần Thị Bình', mỗi tên có 3 từ. Kiểm tra find('Văn') cho tên thứ nhất có chỉ số không âm (Có) và tên thứ hai trả về -1 (Không). HS nêu được điều kiện: cách làm này xử lí đúng khoảng trắng, nhưng không thay thế việc kiểm tra quy tắc viết hoa, dấu câu.

d) Tổ chức thực hiện

  1. Giáo viên

    Bước 1: Chuyển giao nhiệm vụ

    Nêu tình huống và dữ liệu mẫu, yêu cầu HS làm theo cặp trong 10 phút, ưu tiên dùng split() và join().

    Học sinh

    HS đọc đề, cặp đôi phân công một bạn viết mã, một bạn kiểm tra kết quả.

  2. Giáo viên

    Bước 2: Thực hiện nhiệm vụ

    Đi quanh lớp, gợi ý: 'Sau khi chuẩn hoá, em có thể dùng lại biến nào để đếm từ?' Nhắc HS kiểm tra kết quả find trước khi kết luận.

    Học sinh

    Cặp đôi viết và chạy chương trình, ghi kết quả và điều chỉnh khi sai.

  3. Giáo viên

    Bước 3: Báo cáo, thảo luận

    Mời 2 cặp trình bày đoạn mã và kết quả. Hỏi: 'Chương trình có xử lí đúng nếu tên có hai khoảng trắng giữa Nguyễn và Văn không? Vì sao?'

    Học sinh

    HS trả lời dự kiến: 'Có, vì split() không đối số coi mọi dãy khoảng trắng là một dấu ngăn cách, sau đó join ghép lại bằng một dấu cách.'

  4. Giáo viên

    Bước 4: Kết luận, nhận định

    Nhận xét, chốt: các lệnh xử lí xâu giúp làm sạch dữ liệu nhập tay; cần đọc kĩ điều kiện áp dụng. Giao bài về nhà.

    Học sinh

    HS ghi vở kết quả và điều kiện áp dụng của chương trình.

Phiếu học tập

Phiếu học tập số 1

Xâu s = ' doc sach moi '.
Câu 1. Chạy print(s.split()) và print(len(s.split())). Ghi kết quả danh sách và số phần tử.
Câu 2. Chạy print(s.split(' ')) và print(len(s.split(' '))). Đếm số phần tử rỗng và giải thích vì sao có phần tử rỗng.
Câu 3. Chạy t = ' '.join(s.split()); print(t). Ghi kết quả và nêu vai trò của dấu cách đứng trước .join.
Câu 4. Chạy print('abcabc'.find('bc')) và print('abc'.find('x')). Ghi kết quả và nêu ý nghĩa của -1.
Câu 5. Chạy s = 'a-b-a'; t = s.replace('a', 'xyz'); print(s); print(t); print(len(t)). Ghi kết quả, giải thích vì sao độ dài là 9 và vì sao s không đổi.

  • Điền bảng dự đoán và kết quả: lệnh | dự đoán | kết quả thực tế | đúng/sai.

Phiếu học tập số 2

Câu 1. Khi dùng split() không đối số, máy tính xử lí khoảng trắng thế nào?
A. Tách từ và bỏ vùng trắng thừa ở biên.
B. Luôn trả về một xâu.
C. Chỉ tìm dấu chấm.
D. Sửa trực tiếp xâu gốc.
Câu 2. Chương trình s = 'abcabc'; print(s.find('bc')) in ra số nào?
Câu 3. Chương trình s = 'abc'; print(s.find('x')) in ra số nào?
Câu 4. Chương trình s = 'a-b-a'; t = s.replace('a', 'xyz'); print(len(t)) in ra số nào?
Câu 5. Chọn đáp án đúng về split() không đối số (lặp lại câu 1 để đối chiếu).
Câu 6. Đúng hay sai: replace tạo kết quả mới nên cần dùng giá trị trả về.
Câu 7. Sắp xếp các bước giải nhiệm vụ đếm từ: (a) Tách bằng split() không đối số; (b) Đọc xâu; (c) Đối chiếu với ba từ doc, sach, moi; (d) Đếm số từ trong danh sách.
Câu 8. Viết chương trình hoàn chỉnh đếm số từ của xâu ' doc sach moi ', kiểm tra với dữ liệu mẫu và ghi kết quả in ra.
Câu 9. Viết chương trình chuẩn hoá xâu trên thành 'doc sach moi' với đúng một dấu cách giữa các từ; nêu lí do và giới hạn của cách làm.

Hướng dẫn về nhà

  • Hoàn thiện chương trình chuẩn hoá danh sách họ tên ở hoạt động vận dụng, thử thêm vài tên có khoảng trắng khác nhau và ghi lại kết quả vào vở.
  • Ôn lại bảng bốn lệnh split, join, find, replace; tự viết ví dụ cho mỗi lệnh và dự đoán kết quả trước khi kiểm tra trên máy.
  • Truy cập bài học số NeoEdu (neoedu.vn/learn/10/informatics/bai-25-mot-so-lenh-lam-viec-voi-xau-ki-tu), làm các bài tập tương tác và ghi lại câu chưa chắc chắn để hỏi GV ở tiết sau.

Giáo án do NeoEdu soạn với sự hỗ trợ của AI, dựa trên nội dung bài học trên Học liệu. Thầy cô nên đọc lại và điều chỉnh cho phù hợp với học sinh của mình; bản Word để sửa trực tiếp.