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 22. Kiểu dữ liệu danh sách

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

I. Mục tiêu

1. Kiến thức

  • Nêu được danh sách là dãy phần tử có thứ tự, có thể thay đổi giá trị, chỉ số đầu là 0 và chỉ số cuối là len(a)-1.
  • Giải thích được vì sao truy cập chỉ số ngoài miền (ví dụ a[3] với danh sách có 3 phần tử) gây lỗi, và danh sách rỗng có độ dài 0.
  • Vận dụng được vòng lặp for để duyệt trực tiếp phần tử hoặc duyệt theo chỉ số để tính tổng các phần tử của một danh sách.
  • Viết được chương trình Python tính tổng danh sách, kiểm tra kết quả với dữ liệu mẫu và xử lí trường hợp danh sách rỗng.

2. Năng lực

a) Năng lực chung

  • Tự chủ và tự học: Chủ động đọc bài giảng và ví dụ trên trang bài học NeoEdu, tự kiểm tra kết quả chương trình trước khi báo cáo.
  • Giao tiếp và hợp tác: Trao đổi, thống nhất đáp án và cách viết chương trình trong nhóm đôi; trình bày lập luận khi báo cáo trước lớp.
  • Giải quyết vấn đề và sáng tạo: Phân tích bài toán tính tổng, chọn cách duyệt phù hợp và đề xuất cách xử lí trường hợp đầu vào rỗng.

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 thành thạo môi trường lập trình Python và trang bài học NeoEdu để thực hành, chạy và kiểm tra chương trình.
  • Giải quyết vấn đề với sự hỗ trợ của công nghệ thông tin và truyền thông: Dùng máy tính chạy thử chương trình tính tổng và trường hợp danh sách rỗng để xác nhận lời giải.
  • Ứng dụng công nghệ thông tin và truyền thông trong học và tự học: Làm bài tập tương tác trên NeoEdu và tự kiểm tra đáp án.
  • Hợp tác trong môi trường số: Cùng bạn chia sẻ tệp mã, góp ý và sửa lỗi chương trình trong nhóm đôi.

3. Phẩm chất

  • Chăm chỉ: Thực hành viết và chạy chương trình đến khi kết quả đúng với dữ liệu mẫu và trường hợp danh sách rỗng.
  • Trách nhiệm: Hoàn thành đầy đủ phần việc của nhóm và phần bài tập về nhà ứng dụng tính điểm trung bình.
  • Trung thực: Ghi nhận đúng kết quả chạy chương trình và báo cáo trung thực lỗi còn gặp phải, không sao chép mã của bạn mà không hiểu.

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 Python (IDLE hoặc Thonny) đã cài sẵn
  • Trang bài học số NeoEdu: neoedu.vn/learn/10/informatics/bai-22-kieu-du-lieu-danh-sach (phần bài giảng, ví dụ và bài tập tương tác)
  • Phiếu học tập số 1 (in hoặc chiếu lên màn hình)
  • Bảng phụ hoặc slide ghi sẵn ghi nhớ và đáp án mẫu

2. Học sinh

  • Máy tính có cài Python (IDLE hoặc Thonny) và kết nối internet để truy cập NeoEdu
  • Vở ghi, bút, giấy nháp để trace (theo dõi giá trị biến) chương trình
  • Phiếu học tập số 1 (bản in hoặc bản điện tử)

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

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

Khám phá: Lưu nhiều điểm trong một biến

a) Mục tiêu

Nhận ra nhu cầu lưu nhiều giá trị cùng lúc và xác định vấn đề cần giải quyết trong bài: truy cập một phần tử và tính tổng nhiều phần tử.

b) Nội dung

GV chiếu danh sách điểm kiểm tra của năm bạn trong nhóm: a=[7,9,5,8,6]. GV đặt câu hỏi: (1) Nếu không dùng danh sách, em cần bao nhiêu biến để lưu năm điểm này? (2) Làm thế nào lấy ra điểm của bạn thứ ba? (3) Làm thế nào tính tổng năm điểm mà không phải viết năm lần phép cộng?

c) Sản phẩm

HS nêu được: (1) Cần 5 biến riêng, rất bất tiện khi số lượng lớn; (2) Điểm thứ ba là phần tử có chỉ số 2, viết a[2] và được 5; (3) Dùng vòng lặp để duyệt và cộng dồn từng phần tử. Từ đó HS xác định nhiệm vụ bài học: hiểu cách truy cập và duyệt danh sách, rồi tính tổng.

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

  1. Giáo viên

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

    Chiếu danh sách a=[7,9,5,8,6] và nêu ba câu hỏi, yêu cầu HS suy nghĩ 1 phút rồi giơ tay trả lời.

    Học sinh

    HS đọc đề, suy nghĩ cá nhân và chuẩn bị ý kiến.

  2. Giáo viên

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

    Quan sát, gợi ý nếu HS bế tắc: “Nếu lớp có 40 bạn thì sao?”

    Học sinh

    HS suy nghĩ, ghi nhanh câu trả lời ra nháp. Dự kiến: “Cần 5 biến”, “Lấy điểm thứ ba bằng a[2]”, “Dùng for để cộng”.

  3. Giáo viên

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

    Mời 2–3 HS trình bày; ghi các ý lên bảng và chọn các ý hợp lí.

    Học sinh

    Một số HS trình bày: “Cần một cấu trúc chứa nhiều giá trị”; “Điểm thứ ba là a[2] vì chỉ số bắt đầu từ 0”.

  4. Giáo viên

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

    Chốt: danh sách giúp lưu nhiều giá trị có thứ tự trong một biến; bài học hôm nay tìm hiểu cách truy cập và duyệt danh sách. Ghi tên bài lên bảng.

    Học sinh

    HS ghi tên bài và nhiệm vụ học tập vào vở.

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

Danh sách và truy cập phần tử theo chỉ số

a) Mục tiêu

Nêu được cấu trúc danh sách, quy tắc chỉ số đầu 0 và chỉ số cuối len(a)-1; giải thích được lỗi khi truy cập ngoài miền.

b) Nội dung

HS làm việc theo cặp đôi với Phiếu học tập số 1 (phần A) và trang bài giảng NeoEdu mục “Hiểu cách hoạt động”. Nhiệm vụ: (1) Viết a=[7,9,5,8,6], tìm len(a), a[0], a[4]. (2) Thực hiện a[1]=10 rồi in a. (3) Thử in a[5] và giải thích thông báo lỗi. (4) Tìm danh sách rỗng a=[] và cho biết len(a) bằng bao nhiêu.

c) Sản phẩm

Kết quả HS ghi trong Phiếu học tập số 1 (phần A): len(a)=5; a[0]=7; a[4]=6; sau a[1]=10 thì a=[7,10,5,8,6]; a[5] gây lỗi IndexError vì chỉ số hợp lệ từ 0 đến 4 (len(a)-1=4); danh sách rỗng có len(a)=0. Kiến thức HS rút ra: danh sách có thứ tự, thay được giá trị từng phần tử, chỉ số đầu 0, chỉ số cuối len(a)-1, truy cập ngoài miền gây lỗi.

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ố 1 (phần A) và hướng dẫn HS mở NeoEdu, mục “Hiểu cách hoạt động”. Yêu cầu cặp đôi chạy từng lệnh trong IDLE hoặc Thonny và ghi kết quả.

    Học sinh

    HS nhận phiếu, mở máy tính, đọc phần lí thuyết và chuẩn bị chạy thử.

  2. Giáo viên

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

    Đi quanh lớp, kiểm tra cặp đôi nào gặp lỗi gõ sai dấu ngoặc vuông hoặc thụt đầu dòng; hỏi: “Vì sao a[5] báo lỗi?”

    Học sinh

    Một bạn gõ lệnh, bạn còn lại đối chiếu kết quả và ghi vào phiếu. Dự kiến HS trả lời: “Vì không có phần tử thứ 6, chỉ số lớn nhất là 4”.

  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 kết quả các bước (1) đến (4); yêu cầu cả lớp nhận xét.

    Học sinh

    Đại diện cặp đôi đọc kết quả: “len(a)=5, a[0]=7, a[4]=6”; “a[5] gây IndexError”; “a=[] thì len(a)=0”.

  4. Giáo viên

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

    Chốt kiến thức: danh sách là dãy có thứ tự, chỉ số đầu 0, cuối len(a)-1; truy cập ngoài miền gây lỗi; danh sách rỗng có độ dài 0 và không có a[0]. Nhấn mạnh: cần kiểm tra trước khi truy cập a[0] khi chưa chắc danh sách có phần tử.

    Học sinh

    HS ghi ý chốt vào vở và phần ghi nhớ của phiếu.

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

Duyệt danh sách để tính tổng

a) Mục tiêu

Vận dụng được cách duyệt trực tiếp phần tử và duyệt theo chỉ số; hiểu và trace được chương trình tính tổng.

b) Nội dung

GV chiếu chương trình mẫu: a=[4,7,2]; s=0; for x in a: s+=x; print(s). HS trace (theo dõi giá trị) từng vòng lặp vào Phiếu học tập số 1 (phần B) rồi chạy trên máy để đối chiếu. Sau đó HS so sánh hai cách duyệt: for x in a và for i in range(len(a)) với a[i]. Câu hỏi: Khi nào nên duyệt theo chỉ số?

c) Sản phẩm

Bảng trace HS điền: vòng 1 x=4, s=4; vòng 2 x=7, s=11; vòng 3 x=2, s=13; chương trình in 13. Khi danh sách rỗng không có vòng lặp nào, in 0. Kiến thức HS rút ra: duyệt trực tiếp khi chỉ cần giá trị phần tử; duyệt theo chỉ số khi cần biết vị trí i của phần tử.

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

  1. Giáo viên

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

    Chiếu chương trình mẫu và yêu cầu HS điền bảng trace (phần B của Phiếu học tập số 1) trong 3 phút trước khi chạy máy.

    Học sinh

    HS đọc chương trình, điền giá trị x và s sau mỗi vòng lặp vào phiếu.

  2. Giáo viên

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

    Hướng dẫn HS chạy chương trình trên máy để kiểm tra; gợi ý: “Biến s được cập nhật thế nào sau mỗi vòng?”

    Học sinh

    HS chạy chương trình, so sánh kết quả với bảng trace và trả lời: “s cộng dồn, sau vòng cuối s=13”.

  3. Giáo viên

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

    Mời một HS đọc bảng trace; hỏi nhóm: “Nếu cần in vị trí của số lớn nhất thì nên duyệt kiểu nào?”

    Học sinh

    HS đọc bảng trace. Dự kiến trả lời: “Cần duyệt theo chỉ số i để biết vị trí; nếu chỉ cộng tổng thì dùng for x in a.”

  4. Giáo viên

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

    Chốt: tổng được tính bằng khởi tạo s=0 rồi cộng dồn trong vòng lặp; có hai cách duyệt và cách chọn tùy nhu cầu. Nhấn mạnh: với danh sách rỗng, vòng lặp không chạy và kết quả là 0.

    Học sinh

    HS ghi công thức cập nhật s+=x và hai cách duyệt vào vở.

Hoạt động 3.1: Luyện tập · 8 phút

Luyện tập đọc kết quả chương trình

a) Mục tiêu

Đọc đúng kết quả các đoạn lệnh truy cập phần tử, độ dài danh sách và chỉ số; nhận biết được khái niệm và lỗi thường gặp.

b) Nội dung

HS làm 6 câu trắc nghiệm và đúng/sai trên bài tập tương tác NeoEdu (hoặc trên phiếu in): (1) print(a[1]) với a=[4,7,2]. (2) a=[3,5,8]; a[0]=9; print(a[0]+a[2]). (3) a=[]; print(len(a)). (4) Chỉ số đầu của danh sách Python là gì? A. 0; B. 1; C. -len(a)-1; D. Luôn 2. (5) a=[4,7,2] có thể đọc a[3] hợp lệ không? (6) Sắp xếp các bước tính tổng: Tạo danh sách; Khởi tạo tổng; Duyệt từng phần tử và cộng; In tổng.

c) Sản phẩm

Đáp án: (1) 7; (2) 17 (9+8=17); (3) 0; (4) A. 0; (5) Sai, vì chỉ số hợp lệ là 0, 1, 2; (6) Tạo danh sách → Khởi tạo tổng → Duyệt từng phần tử và cộng → In tổng. HS tự chấm bằng NeoEdu và ghi số câu đúng 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ụ

    Mở bài tập tương tác trên NeoEdu, nêu thời gian 6 phút và yêu cầu HS làm cá nhân trước khi đối chiếu bạn bên cạnh.

    Học sinh

    HS mở bài tập, làm lần lượt 6 câu.

  2. Giáo viên

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

    Theo dõi tiến độ, nhắc HS dự đoán kết quả trước khi chạy lệnh trên IDLE để kiểm chứng.

    Học sinh

    HS dự đoán, chạy thử rồi chọn đáp án. Dự kiến khó khăn: nhầm a[0]+a[2] với a[1]+a[2].

  3. Giáo viên

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

    Chiếu đáp án, mời 2 HS nêu lí do cho câu (2) và câu (5).

    Học sinh

    HS nêu: “Đổi a[0] thành 9 nên a[0]+a[2]=9+8=17”; “Không có phần tử thứ tư nên a[3] là lỗi”.

  4. Giáo viên

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

    Nhận xét mức độ hiểu của lớp, nhấn mạnh lỗi thường gặp là quên chỉ số bắt đầu từ 0 và nhầm len(a) với chỉ số cuối.

    Học sinh

    HS sửa lại các câu sai và ghi chú vào vở.

Hoạt động 3.2: Luyện tập · 7 phút

Viết chương trình tính tổng và xử lí danh sách rỗng

a) Mục tiêu

Viết và kiểm tra được chương trình tính tổng danh sách bằng vòng lặp; giải thích được vì sao cần xử lí trường hợp rỗng khi truy cập a[0].

b) Nội dung

Bài 7: Tính tổng danh sách 4, 7, 2 bằng vòng lặp; viết chương trình hoàn chỉnh, kiểm tra theo dữ liệu mẫu và nêu kết quả khi danh sách rỗng. Bài 8: Vì sao tính giá trị lớn nhất bằng cách gán m=a[0] cần xử lí danh sách rỗng? HS làm theo nhóm đôi, một bạn viết mã, bạn kia kiểm tra lập luận.

c) Sản phẩm

Bài 7 — chương trình mẫu: a=[4,7,2]; s=0; for x in a: s+=x; print(s). Kết quả in 13 vì 4+7+2=13. Với a=[], không có lượt cộng nên in 0. Thang chấm tham khảo: khai báo danh sách và gán tổng 0,2; duyệt và cộng đúng 0,4; kết quả 13 đúng 0,3; trường hợp rỗng cho 0 là 0,1. Chấp nhận cách viết tương đương đúng và có lí giải. Bài 8 — danh sách rỗng không có chỉ số 0, nên a[0] gây IndexError; cần kiểm tra len(a)>0 hoặc quy định đầu vào không rỗng; không trả về 0 giả vì dữ liệu có thể có số âm. Thang chấm: nêu IndexError 0,4; nêu cách kiểm tra rỗng 0,4; không trả 0 giả 0,2.

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

  1. Giáo viên

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

    Giao nhiệm vụ bài 7 và bài 8 cho nhóm đôi; yêu cầu viết mã trên IDLE, chạy với a=[4,7,2] và a=[].

    Học sinh

    Nhóm đôi phân công người viết mã, người kiểm tra và chuẩn bị lập luận cho bài 8.

  2. Giáo viên

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

    Đi quanh lớp, hỏi: “Nếu quên khởi tạo s=0 thì chuyện gì xảy ra?”; gợi ý HS dùng print để kiểm tra từng bước.

    Học sinh

    HS viết và chạy chương trình, ghi kết quả. Dự kiến: “In 13”, “Với rỗng in 0”; với bài 8: “Gặp IndexError vì không có phần tử đầu”.

  3. Giáo viên

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

    Mời một nhóm trình bày chương trình và kết quả, một nhóm trình bày lập luận bài 8; cả lớp nhận xét theo thang chấm.

    Học sinh

    Đại diện nhóm trình bày mã và kết quả 13, 0; nhóm khác nêu lỗi IndexError và cách kiểm tra len(a)>0.

  4. Giáo viên

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

    Chốt: tổng cần khởi tạo s=0 và cộng dồn; khi dùng a[0] phải bảo đảm danh sách không rỗng; kiểm thử với cả dữ liệu thường và trường hợp biên.

    Học sinh

    HS sửa mã của nhóm mình (nếu cần) và ghi cách kiểm tra danh sách rỗng vào vở.

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

Tính điểm trung bình lớp em

a) Mục tiêu

Vận dụng duyệt danh sách và xử lí trường hợp rỗng để giải quyết bài toán thực tế; có thể hoàn thành ở nhà.

b) Nội dung

Nhiệm vụ: Viết chương trình nhập hoặc gán sẵn danh sách điểm kiểm tra của ít nhất 5 bạn trong lớp; tính tổng bằng vòng lặp, tính điểm trung bình bằng tổng chia len(a); nếu danh sách rỗng thì in thông báo “Chưa có dữ liệu” thay vì chia cho 0. Chạy thử với dữ liệu mẫu và với danh sách rỗng, rồi lưu tệp và nộp lên hệ thống học tập.

c) Sản phẩm

Sản phẩm là tệp .py chạy đúng: với dữ liệu mẫu, in ra điểm trung bình đúng (HS tự tính và đối chiếu); với danh sách rỗng, in thông báo “Chưa có dữ liệu”. Kiến thức vận dụng: danh sách, duyệt phần tử, len(a), kiểm tra điều kiện trước khi thực hiện phép tính.

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

  1. Giáo viên

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

    Nêu đề bài thực tế và tiêu chí chấm: đúng kết quả, xử lí rỗng, có chú thích ngắn trong mã. Có thể giao về nhà nếu chưa kịp.

    Học sinh

    HS ghi yêu cầu vào vở và chuẩn bị dữ liệu điểm mẫu.

  2. Giáo viên

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

    Nếu còn thời gian, cho HS làm trên lớp; hướng dẫn: “Chia cho len(a) chỉ khi len(a) lớn hơn 0.”

    Học sinh

    HS viết chương trình, chạy thử với dữ liệu mẫu và với danh sách rỗng.

  3. Giáo viên

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

    Mời 1–2 HS chia sẻ mã và kết quả; hỏi: “Vì sao phải kiểm tra rỗng trước khi chia?”

    Học sinh

    HS trình bày. Dự kiến trả lời: “Vì len(a)=0 thì phép chia sẽ lỗi.”

  4. Giáo viên

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

    Nhận xét sản phẩm, khen cách kiểm thử và xử lí trường hợp biên; nhắc HS hoàn thiện và nộp bài.

    Học sinh

    HS tự đánh giá sản phẩm theo tiêu chí và ghi điều cần sửa.

Phiếu học tập

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

Phần A — Truy cập phần tử (dùng ở hoạt động 2)
Cho a=[7,9,5,8,6]. Điền kết quả:

  • len(a) = ...
  • a[0] = ...
  • a[4] = ...
  • Sau lệnh a[1]=10, danh sách a = ...
  • Lệnh print(a[5]) báo lỗi gì? Vì sao? ...
  • Với a=[], len(a) = ...

Phần B — Trace chương trình tính tổng (dùng ở hoạt động 3)
Chương trình: a=[4,7,2]; s=0; for x in a: s+=x; print(s)
Bảng cần điền:

  • Vòng 1: x = ..., s sau cộng = ...
  • Vòng 2: x = ..., s sau cộng = ...
  • Vòng 3: x = ..., s sau cộng = ...
  • Kết quả in ra: ...

Câu hỏi kết luận:

  • Khi nào nên duyệt trực tiếp phần tử (for x in a)?
  • Khi nào nên duyệt theo chỉ số (for i in range(len(a)))?

Hướng dẫn về nhà

  • Hoàn thành nhiệm vụ “Tính điểm trung bình lớp em”: viết chương trình, chạy thử với dữ liệu mẫu và với danh sách rỗng, lưu tệp .py và nộp theo hướng dẫn của GV.
  • Ôn lại quy tắc chỉ số đầu 0, chỉ số cuối len(a)-1 và lỗi IndexError; tự làm lại bảng trace của chương trình tính tổng mà không nhìn bài.
  • Vào trang bài học NeoEdu (neoedu.vn/learn/10/informatics/bai-22-kieu-du-lieu-danh-sach), làm lại các bài tập tương tác để tự kiểm tra và ghi lại câu còn sai để hỏi GV.

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.