Đối bậc trung học phổ thông là giai đoạn giáo dục hướng nghề nghiệp nên ngay từ lớp 10 đã đưa vào Chủ đề F: “Giải quyết vấn đề với sự trợ giúp của máy tính” trong đó có đưa ngôn ngữ lập
NỘI DUNG
Cơ sở lý luận
1.1 ý luận về chương trình phổ thông mới
Chương trình môn Tin học ở cấp trung học phổ thông nhằm củng cố và nâng cao năng lực tin học của học sinh, phát triển từ giai đoạn giáo dục cơ bản Đồng thời, chương trình cũng cung cấp kiến thức định hướng nghề nghiệp trong lĩnh vực tin học và ứng dụng tin học cho học sinh.
Bài viết nhằm giúp học sinh nắm vững kiến thức cơ bản về hệ thống máy tính, các kỹ thuật thiết kế thuật toán, tổ chức dữ liệu và lập trình Qua đó, học sinh sẽ củng cố và phát triển tư duy giải quyết vấn đề, khả năng đưa ra ý tưởng và giao nhiệm vụ cho máy tính thực hiện một cách hiệu quả.
Học sinh sẽ được trang bị kỹ năng ứng dụng tin học, giúp tạo ra các sản phẩm số phục vụ cộng đồng và nâng cao hiệu quả công việc Bên cạnh đó, các em còn có khả năng lựa chọn, sử dụng và kết nối các thiết bị số, dịch vụ mạng, truyền thông, phần mềm và các tài nguyên số khác.
Giúp học sinh phát triển khả năng hòa nhập và thích ứng với xã hội số bằng cách ứng dụng công nghệ thông tin và truyền thông trong học tập và tự học Học sinh cần biết cách tìm kiếm và trao đổi thông tin một cách phù hợp, tuân thủ pháp luật, có đạo đức, ứng xử văn hóa và có trách nhiệm Đồng thời, việc trang bị kiến thức về các ngành nghề liên quan cũng rất quan trọng để học sinh có cái nhìn tổng quát hơn về thị trường lao động.
5 vực tin học, chủ động và tự tin trong việc định hướng nghề nghiệp tương lai của bản thân
1.2 ý luận dạy học về dạy học lập trình Python
Python là một ngôn ngữ lập trình kịch bản do Guido van Rossum phát triển, với phiên bản đầu tiên ra mắt vào năm 1991 và hiện tại đã có các phiên bản 3.x.x Được biết đến là một ngôn ngữ lập trình cấp cao và linh hoạt, Python có khả năng chạy trên nhiều nền tảng như Windows, Mac OS, Linux và Raspberry Pi Những tính năng nổi bật của Python đã góp phần làm cho ngôn ngữ này trở nên phổ biến trong cộng đồng lập trình.
Cú pháp Python rất đơn giản, điều này khiến nó dễ sử dụng cho người mới bắt đầu Nhiều người cho rằng cách hiệu quả nhất để học Python cơ bản là bắt tay vào việc viết chương trình ngay lập tức Hầu hết cú pháp của Python mang tính logic cao, giúp người học nhanh chóng phát triển chương trình của riêng mình.
Python được nhiều lập trình viên coi là ngôn ngữ lập trình dễ học nhất, và hiện nay nó đang được giảng dạy rộng rãi trong các trường học trên toàn cầu.
Những tính năng trên đã khiến Python trở nên phổ biến trên toàn thế giới
Nó được sử dụng trong nhiều lĩnh vực khác nhau như:
Phát triển trang web Back-end
Khoa học dữ liệu và phân tích
Phát triển ứng dụng di động
Robot và AI (Trí tuệ nhân tạo)
Cùng với một số ưu điểm thì Python có một số hạn chế trong lĩnh vực hiệu suất Sau đây là một một số nhược điểm của Python:
Python là một ngôn ngữ lập trình thông dịch, điều này khiến cho tốc độ thực thi của nó chậm hơn so với các ngôn ngữ biên dịch như C, C++ và Java.
Python tiêu thụ bộ nhớ lớn do các cấu trúc của nó yêu cầu nhiều không gian lưu trữ hơn Vì vậy, ngôn ngữ này không phù hợp cho việc phát triển trong môi trường có hạn chế về bộ nhớ.
Kiểm tra mã Python gặp khó khăn do ngôn ngữ này dựa trên trình thông dịch, khiến các lỗi chỉ xuất hiện trong thời gian chạy Điều này làm cho việc kiểm tra các đoạn mã viết bằng Python trở nên phức tạp hơn.
Cơ sở thực tiễn
Thực trạng chung: a, Đối với học sinh
Cấu trúc đề thi học sinh giỏi môn Tin học hiện nay được thiết kế để phù hợp với kỳ thi tốt nghiệp trung học phổ thông Quốc gia, cho phép học sinh lựa chọn môn thi Theo đề thi minh họa của Bộ Giáo dục và Đào tạo, phần I bao gồm các câu hỏi trắc nghiệm và phần II có câu hỏi đúng sai, giúp đánh giá toàn diện kiến thức của học sinh.
II Như vậy khi các em cần nắm vững kiến thức các chủ đề để làm tốt bài thi Cùng với đó Sở giáo dục đào tạo Nghệ An cũng có dự thảo về phương án cấu trúc đề thi học sinh giỏi tỉnh theo cấu trúc mới gồm 3 phần: Phần I ( Câu hỏi nhiều lựa chọn); phần II ( Lựa chọn đúng/ sai); phần III ( Tự luận) Trong đó bài toán về số và dãy số được ứng dụng nhiều Vì vậy học sinh cần hiểu rõ được thuật toán đồng thời cần nắm vững cấu trúc của câu lệnh với các kiểu dữ liệu phù hợp Tuy nhiên đa số học sinh ở cấp THCS biết đến với ngôn ngữ lập trình nâng cao C++ Trong đó dữ liệu cấu trúc bên C++ khác với Python, nhất là dữ liệu kiểu danh sách
Trong chương trình học cấp THCS, nhiều học sinh vẫn theo chương trình cũ và chỉ một số trường dạy tin học cho lớp 8 và lớp 9 với ngôn ngữ lập trình Pascal hoặc C++ Tuy nhiên, do cơ sở vật chất hạn chế, nhiều học sinh không có cơ hội tiếp cận môn tin học, dẫn đến việc không biết đến ngôn ngữ lập trình bậc cao Trong khi đó, học sinh lớp 10 và 11 học chương trình mới đã làm quen với ngôn ngữ Python Những học sinh đã biết Pascal hay C++ thường đặt câu hỏi về cách xử lý dữ liệu trong Python, liệu chúng có dễ viết và dễ sử dụng hay không Đối với học sinh đội tuyển, họ băn khoăn về việc liệu Python có hỗ trợ kiểu dữ liệu mảng như C++ để giải quyết các bài toán dạng dãy có cùng giá trị, và cách xử lý khi dãy không có các giá trị cùng kiểu.
Nhiều học sinh thường cho rằng môn tin lập trình là khó khăn, vì yêu cầu không chỉ nắm vững ngôn ngữ lập trình mà còn phải hiểu rõ các khái niệm toán học cơ bản Họ cũng cần phải tìm ra thuật toán tối ưu để giải quyết các bài toán một cách hiệu quả.
Giáo viên dạy đội tuyển cơ bản đã nỗ lực tìm tòi và đầu tư thời gian, tuy nhiên, họ vẫn gặp khó khăn trong việc tiếp cận ngôn ngữ lập trình Python do kinh nghiệm còn hạn chế.
Cấu trúc đề thi học sinh giỏi cấp huyện và cấp tỉnh yêu cầu giáo viên bồi dưỡng nhiều chuyên đề cho học sinh Trong đó, chuyên đề về dãy các giá trị cùng kiểu hoặc khác kiểu là một trong những nội dung thường gặp trong các đề thi học sinh giỏi môn Tin học Đây là loại bài toán dạng danh sách, rất quan trọng để học sinh nắm vững kiến thức và kỹ năng cần thiết.
- Tài liệu về ôn thi đội tuyển thật sự rất khó tìm để phù hợp cả học sinh và giáo viên
Chương trình giáo dục phổ thông mới đã chọn ngôn ngữ lập trình Python làm công cụ giảng dạy lập trình Điều này giúp giáo viên có cơ hội tiếp cận và làm quen với ngôn ngữ này Tuy nhiên, trong quá trình giảng dạy, giáo viên chủ yếu vẫn phải tự tìm hiểu và khám phá ngôn ngữ Python.
Kiểu dữ liệu danh sách trong Python cho phép lưu trữ các giá trị có cùng hoặc khác kiểu dữ liệu Do đó, khi làm việc với các giá trị khác kiểu, người dùng cần hiểu rõ các phép toán tương ứng để xử lý hiệu quả Điều này thường là thách thức đối với cả giáo viên và học sinh.
Môn tin học lần đầu tiên được đưa vào lựa chọn thi tốt nghiệp và đại học, gây không ít bỡ ngỡ cho cả học sinh và giáo viên do thiếu kinh nghiệm trong việc tổ chức và chuẩn bị cho kỳ thi này.
Để đạt kết quả cao trong các kỳ thi học sinh giỏi cấp tỉnh và huyện, giáo viên cần trang bị kiến thức lý thuyết đầy đủ cho tất cả các chủ đề và biết vận dụng để giải quyết bài toán thực tiễn trong phần tự
Giải pháp thực hiện
3.1 ột số kiến thức cơ bản về kiểu dữ liệu danh sách
3.1.1.Kiểu dữ liệu danh sách
Python cung cấp các cấu trúc dữ liệu đặc biệt gọi là cấu trúc tuần tự, cho phép lưu trữ nhiều phần tử được đánh số thứ tự, giúp việc truy xuất trở nên dễ dàng hơn.
- Danh sách là một trong những kiểu dữ liệu tuần tự được sử dụng phổ biến nhất của Python
- Danh sách (list) là một kiểu dữ liệu đa năng trong python có thể chứa một danh sách các phần tử ( Có thể khác kiểu)
3.1.2 Các thao tác trong kiểu dữ liệu danh sách (list) a hởi tạo danh sách ( list) a.1 Dạng liệt kê:
= [, ,…,]
Ví dụ: Tạo xâu r ng s1 s1 = “”
Tạo xâu s2 s2 = “Viet Nam” Có s2[0] = “V”, s2[1] = “i”, …., s2[7] = “m”
- Duyệt qua từng phần tử của xâu: s = “Ha Noi Viet Nam” for i in s: print(i,end=“ “)
Xuất ra màn hình dòng chữ: H a N o i V i e t N a m
– Hàm len() trả về số phần tử của danh sách
+ Nối danh sách: +
Ví dụ: list = A +C thì list gồm 8 phần tử
+ Nhân bản phần tử: *
Ví dụ: lits1 = A * 3 thì list1 gồm 12 phần tử a.2 Dạng mô tả (list comprehension):
[ for in ] ưu ý: ở đây có thể là list, range hoặc str
- Tạo danh sách A gồm 4 phần tử và A[0] = 1, A[1] =2, A[2] = 3, A[3] = 4
- Tạo danh sách D gồm 4 phần tử, D[0] = 2, D[1] = 4, D[2] = 9, D[3] = 16
Ví dụ 3: s = “2 3 5 8 10” c = [int(x) for x in s.split()]
-Tạo danh sách c gồm 5 phần tử, có giá trị là 2, 3, 5, 8, 10
Ví dụ 4: d = [x for x in range(0,11,2)]
-Tạo danh sách d gồm 6 phần tử, có giá trị lần lượt là 0, 2, 4, 6, 8, 10
Ví dụ 5: s = "12345" e = [int(x) for x in s]
Tạo danh sách e gồm 5 phần tử, có giá trị lần lượt là 1, 2, 3, 4, 5
Ví dụ 6: s = “2 3 5 8 10” d = list(map(int,s.split()))
Để tạo danh sách d gồm 5 phần tử với các giá trị 2, 3, 5, 8, 10, bạn có thể nhập dữ liệu từ bàn phím Phương pháp nhập dữ liệu từng phần tử thường áp dụng khi bạn đã biết trước số lượng phần tử của mảng.
Ví dụ: Nhập dữ liệu vào danh sách số nguyên a gồm có n phần tử từ bàn phím
- Nhập số phần tử của danh sách n = int(input(“Mời nhập số phần tử: “));
-Khởi tạo danh sách r ng a = []
- Xuất dòng thông báo for i in range(0,n): print(“Phần tử thứ”,i+1,”là:”,end=“ “)
- Lấy giá trị nhập vào và chuyển sang kiểu số nguyên temp = int(input())
Để thêm phần tử vào cuối danh sách trong Python, bạn có thể sử dụng phương thức a.append(temp) Điều này cho phép bạn nhập toàn bộ phần tử vào danh sách, ngay cả khi số lượng phần tử chưa được xác định trước.
Nhập dữ liệu vào danh sách số nguyên a từ bàn phím bằng cách sử dụng câu lệnh: a = list(map(int, input("Mời nhập các phần tử của danh sách: ").split())) Các số trong danh sách được phân cách bởi dấu cách.
3.1.3 Một số lệnh làm việc kiểu danh sách
Hàm append dùng để bổ sung đối tượng vào cuối danh sách, ví dụ: a.append() Hàm clear giúp xóa dữ liệu trong danh sách, biến danh sách a thành rỗng với cú pháp a.clear() Hàm copy cho phép trả về một danh sách mới có giá trị giống danh sách a, được sử dụng với cú pháp a.copy().
Hàm `extend(a)` cho phép mở rộng danh sách `a` bằng cách thêm một đối tượng vào cuối danh sách Hàm `index(a)` sẽ trả về chỉ số đầu tiên của giá trị trong danh sách `a` Cuối cùng, hàm `insert(a)` cho phép chèn một đối tượng vào danh sách `a` tại vị trí chỉ định.
Chèn vào danh sách ở trước vị trí index remove a.remove() Xóa đi phần tử đầu tiên có giá trị bằng
Hàm `reverse()` trong Python được sử dụng để đảo ngược thứ tự các phần tử trong danh sách `a` Trong khi đó, hàm `sort()` cho phép sắp xếp danh sách `a` theo thứ tự tăng dần hoặc giảm dần, tùy thuộc vào tham số `reverse`, với giá trị `True` cho sắp xếp giảm và `False` cho sắp xếp tăng.
3.2 Sự giống và khác nhau kiểu dữ liệu danh sách trong Python và kiểu mảng trong C++
- ưu trữ nhiều phần tử: Cả hai đều được sử dụng để lưu trữ nhiều phần tử trong một cấu trúc dữ liệu duy nhất
- Truy cập phần tử: Cả hai đều cho phép truy cập vào các phần tử trong danh sách/mảng thông qua chỉ số
- Phép toán cơ bản: Cả hai h trợ các phép toán cơ bản như thêm, xóa, cập nhật phần tử
- iểu dữ liệu phần tử:
+ Python: Danh sách trong Python có thể chứa các phần tử với các kiểu dữ liệu khác nhau, kể cả các danh sách khác
Trong C++, mảng thường chỉ chứa các phần tử cùng kiểu dữ liệu Người dùng có thể sử dụng mảng 2 chiều để mô phỏng cấu trúc dữ liệu tương tự như danh sách trong Python, mặc dù điều này không phải là mặc định.
+ Python: Danh sách trong Python có thể thay đổi kích thước linh hoạt theo nhu cầu mà không cần khai báo trước kích thước
+ C++: Mảng trong C++ cần phải khai báo kích thước tĩnh hoặc sử dụng các cấu trúc dữ liệu động như std::vector để có thể thay đổi kích thước
+ Python: Danh sách trong Python h trợ các phương thức như append, remove, pop, để điều chỉnh nội dung của danh sách một cách linh hoạt
Trong C++, việc quản lý mảng thường yêu cầu triển khai các hàm riêng để thêm và xóa phần tử Mặc dù có thể sử dụng các cấu trúc dữ liệu như std::vector, nhưng vẫn cần sự hỗ trợ từ thư viện chuẩn để thực hiện các thao tác này hiệu quả.
3.3.1 Các bài toán về kiểu dữ liệu danh sách cùng kiểu dữ liệu
Trong lập trình, có nhiều bài toán và thuật toán liên quan đến kiểu dữ liệu danh sách, còn được gọi là mảng hoặc vector Dưới đây là một số ví dụ minh họa cho các ứng dụng của kiểu dữ liệu này.
Trong bài toán này, bạn cần xác định xem trong một dãy số nguyên gồm N phần tử có tồn tại phần tử nào có giá trị bằng số nguyên k hay không Nếu tìm thấy, hãy trả về vị trí của phần tử đó; nếu không, hãy trả về -1.
Hàm linear_search thực hiện việc tìm kiếm giá trị k trong mảng arr bằng phương pháp tuần tự Khi giá trị được tìm thấy, hàm sẽ trả về chỉ số của phần tử tương ứng Ngược lại, nếu không tìm thấy, hàm sẽ trả về -1.
Trong hàm main, người dùng nhập vào một dãy số nguyên cùng với giá trị k Sau đó, hàm linear_search được gọi để tìm kiếm giá trị k trong dãy số Kết quả của quá trình tìm kiếm sẽ được hiển thị trên màn hình.
The provided program implements a linear search algorithm in Python It defines a function called `linear_search` that takes an array and a target value `k` as inputs The function iterates through the array to find the index of the target value, returning its position if found, or -1 if not The user is prompted to input a sequence of integers and a target value, and the program then calls the `linear_search` function If the target value is found, it outputs the index; otherwise, it notifies the user that the value is not present in the array.
Bài toán yêu cầu viết chương trình để nhập vào từ bàn phím một danh sách số nguyên Chương trình sẽ đếm và hiển thị số lượng phần tử lớn hơn phần tử đứng ngay trước và ngay sau nó Để thực hiện, người dùng sẽ nhập một dãy số nguyên, và chương trình sẽ sử dụng vòng lặp để kiểm tra các điều kiện cần thiết.
ết quả đạt được
Đánh giá Tính khả thi của các giải pháp đã đề xuất
1 - Sử dụng chuyên đề số trong bồi dưỡng học sinh giỏi
2 - Giải quyết bài toán lập trình bằng việc lựa chọn ngôn ngữ phù hợp khi tìm hiểu về C++ và Python 33.8 Khả thi
Kết quả khảo sát cho thấy cả học sinh và giáo viên đều đánh giá đề tài này rất khả thi với điểm trung bình đạt 3.24 Điều này chứng minh rằng đề tài sẽ trở thành tài liệu hữu ích trong việc dạy học, ôn thi và bồi dưỡng học sinh giỏi.
Học sinh lớp 10 và 11 không chỉ tìm hiểu ngôn ngữ lập trình Python mà còn nhận biết được những điểm mạnh của nó Các em được tiếp cận với các bài toán từ cơ bản đến nâng cao, đặc biệt là các ứng dụng liên quan đến kiểu dữ liệu danh sách Trong năm học 2023-2024, trường tôi đã có 2 học sinh tham gia thi và đạt thành tích đáng tự hào với 1 giải nhì và 1 giải ba.
Giáo viên có tài liệu trong bồi dưỡng học sinh giỏi, có tài liệu về chuyên đề dữ liệu danh sách trong ngôn ngữ lập trình Python
5.3 hả năng mang lại lợi ích thiết thực của sáng kiến
Là tài liệu cho học sinh và giáo viên trong việc ôn thi và bồi dưỡng học sinh giỏi cấp trường, huyện, tỉnh
Đề tài này tập hợp các bài toán sử dụng kiểu dữ liệu danh sách trong Python, giúp giáo viên nhận diện ưu nhược điểm của ngôn ngữ này Đã được áp dụng trong giảng dạy bồi dưỡng học sinh giỏi tại trường THPT Thái Hòa và chia sẻ với giáo viên các trường THPT Nghệ An, đề tài đã mang lại kết quả tích cực Học sinh nắm vững các bài toán vận dụng kiểu dữ liệu danh sách, từ đó cải thiện kỹ năng lập trình và thành tích trong các kỳ thi học sinh giỏi.