Sáng kiến kinh nghiệm THPT: Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh khá giỏi trong ngôn ngữ lập trình Python
lượt xem 1
download
Đề tài "Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh khá giỏi trong ngôn ngữ lập trình Python" tập trung vào việc đưa ra hệ thống lý thuyết về cấu trúc lặp và rèn luyện kỹ năng lập trình với chủ để câu lệnh lặp trong NNLT Python giúp học sinh lĩnh hội tri thức, giúp các em tích cực, chủ động tích lũy kiến thức.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Sáng kiến kinh nghiệm THPT: Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh khá giỏi trong ngôn ngữ lập trình Python
- SỞ GIÁO DỤC VÀ ĐÀO TẠO HÀ TĨNH SÁNG KIẾN Tên đề tài: RÈN LUYỆN KỸ NĂNG LẬP TRÌNH VỚI CHỦ ĐỀ CÂU LỆNH LẶP CHO HỌC SINH LỚP 10 TRONG NNLT PYTHON Môn/Lĩnh vực: Tin học Tổ: Vật lí – Tin – CNCN Giáo viên: Nguyễn Thị Vinh Hà Tĩnh, tháng 12 năm 2024
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh khá giỏi trong NNLT Python” MỤC LỤC PHẦN I: MỞ ĐẦU ........................................................................................................1 I. BỐI CẢNH CỦA ĐỀ TÀI ...........................................................................................................1 II. LÝ DO CHỌN ĐỀ TÀI ...............................................................................................................1 III. PHẠM VI VÀ ĐỐI TƯỢNG NGHIÊN CỨU...........................................................................2 1. PHẠM VI NGHIÊN CỨU ...........................................................................................................2 2. ĐỐI TƯỢNG NGHIÊN CỨU .....................................................................................................2 IV. MỤC ĐÍCH NGHIÊN CỨU .......................................................................................................3 V. NHỮNG ĐIỂM MỚI TRONG KẾT QUẢ NGHIÊN CỨU .....................................................3 PHẦN II: NỘI DUNG ...................................................................................................4 I. CƠ SỞ LÝ LUẬN ........................................................................................................................4 II. THỰC TRẠNG CỦA VẤN ĐỀ ..................................................................................................4 III. CÁC BIỆN PHÁP ĐÃ TIẾN HÀNH ĐỂ GIẢI QUYẾT VẤN ĐỀ .........................................5 1. Hệ thống kiến thức cốt lõi về cấu trúc lặp trong Python ....................................................5 2. Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp ..........................................................9 3. Bài tập áp dụng.....................................................................................................................22 IV. HIỆU QUẢ MANG LẠI CỦA SÁNG KIẾN ...........................................................................23 V. KHẢ NĂNG ỨNG DỤNG VÀ TRIỂN KHAI .........................................................................24 VI. Ý NGHĨA CỦA SÁNG KIẾN ...................................................................................................25 PHẦN III: KẾT LUẬN ...............................................................................................26 I. BÀI HỌC KINH NGHIỆM: .....................................................................................................26 II. KIẾN NGHỊ, ĐỀ XUẤT ............................................................................................................26 TÀI LIỆU THAM KHẢO...........................................................................................28
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” DANH MỤC CHỮ CÁI VIẾT TẮT 1. THPT: Trung học phổ thông 2. GDPT: Giáo dục phổ thông 3. NNLT: Ngôn ngữ lập trình 4. SKKN: Sáng kiến kinh nghiệm 5. NXB: Nhà xuất bản 6. SGK: Sách giáo khoa
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” PHẦN I: MỞ ĐẦU I. BỐI CẢNH CỦA ĐỀ TÀI Đề tài này được tôi xây dựng, vận dụng vào giảng dạy bộ môn Tin học lớp 10 trong học kỳ 1 năm học 2023-2024 và công tác bồi dưỡng cho học sinh khá giỏi tham gia kì thi chọn học sinh giỏi các cấp môn Tin học 10. Sáng kiến kinh nghiệm với các nội dung nghiên cứu: - Làm rõ cơ sở lý luận, cơ sở thực tiễn và tính cấp thiết của đề tài. - Hệ thống lý thuyết về cấu trúc lặp và ứng dụng cấu trúc lặp giải các bài toán nhằm rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python. - Thực nghiệm sư phạm đánh giá tính khả thi và hiệu quả của đề tài. - Rút ra kết luận và đưa ra các kiến nghị cụ thể trong việc nâng cao chất lượng dạy học bộ môn Tin học ở lớp 10 và công tác bồi dưỡng học sinh giỏi môn Tin học lớp 10. Rèn luyện kỹ năng sử dụng cấu trúc lặp trong NNLT Python cho học sinh lớp 10, giúp học sinh lĩnh hội tri thức, giúp các em tích cực, chủ động tích lũy kiến thức. Qua đó, học sinh phát triển được tư duy logic thông qua hệ thống bài tập giúp các em rèn luyện được tính tự giác, tính kỉ luật, thói quen tự học đó là những đức tính rèn luyện tốt của học. II. LÝ DO CHỌN ĐỀ TÀI Năm học 2023 - 2024 bắt đầu áp dụng chương trình giáo dục phổ thông mới (GDPT 2018) cho lớp 10. Điểm mới quan trọng nhất của chương trình giáo dục lớp 10 năm nay là cho phép học sinh được lựa chọn môn học theo năng lực, sở thích của mình và theo xu hướng nghề nghiệp dự định chọn trong tương lai, trong đó môn Tin học được nhiều học sinh lựa chọn. Chương trình môn Tin học lớp 10 kế thừa toàn bộ phẩm chất chung, năng lực chủ yếu chung và năng lực tin học đã được hình thành, phát triển ở giai đoạn giáo dục cơ bản. Nội dung cốt lõi của môn Tin học 10 được mô tả theo từng chủ đề, trong đó chủ đề “Giải quyết vấn đề với sự trợ giúp của máy tính” về Lập trình cơ bản, đây là một chủ đề lớn, quan trọng chiếm phần lớn nội dung cốt lõi của 1
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” môn Tin học ở lớp 10. Nội dung lập trình cơ bản với những nội dung đổi mới rất căn bản: dùng NNLT Python để minh họa và thực hành. Lập trình cơ bản là nội dung chung cho cả hai định hướng Tin học ứng dụng và Khoa học máy tính. Với mục tiêu hình thành và phát triển tư duy máy tính, nội dung Lập trình cơ bản được chọn lọc để thích hợp với tư duy học sinh phổ thông. Trong các NNLT bậc cao đều có câu lệnh thể hiện cấu trúc lặp của thuật toán, với lập trình trên Python thì việc học sinh nắm chắc các vòng lặp là chìa khóa để giải quyết các vấn đề liên quan tới dãy dữ liệu. Là một giáo viên dạy môn Tin học, bên cạnh bên cạnh dạy học các kiến thức phổ thông về tin học thì việc bồi dưỡng học sinh khá giỏi cũng hết sức quan trọng, trách nhiệm của người giáo viên Tin học là tổ chức các hoạt động học tập cho học sinh để phát triển hệ thống năng lực mà một học sinh phổ thông cần phải có. Qua quá trình dạy học, tôi thấy chủ đề “Câu lệnh lặp” là môt nội dung rất quan trọng trong việc tiếp cận NNLT bậc cao, xử lý cấu trúc lặp cũng là yêu cầu trong việc xây dựng các phần mềm ứng dụng thực tiễn, nhưng việc dạy học chủ đề này vẫn còn gặp nhiều khó khăn, hiệu quả chưa cao. Với niềm đam mê chuyên môn, ham học hỏi tôi luôn tìm tòi nghiên cứu và đã có những giải pháp tốt nhất nhằm đem lại hiệu quả cao trong công tác dạy học và bồi dưỡng học sinh khá giỏi và đã đạt được những kết quả như mong đợi. Vì vậy tôi mạnh dạn chia sẻ sáng kiến chủ đề “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python”. III. PHẠM VI VÀ ĐỐI TƯỢNG NGHIÊN CỨU 1. PHẠM VI NGHIÊN CỨU Các vấn đề về cấu trúc lặp trong chương trình Tin học lớp 10 lập trình trên NNLT Python. 2. ĐỐI TƯỢNG NGHIÊN CỨU Đề tài tập trung vào việc đưa ra hệ thống lý thuyết về cấu trúc lặp và rèn luyện kỹ năng lập trình với chủ để câu lệnh lặp trong NNLT Python giúp học sinh lĩnh hội tri thức, giúp các em tích cực, chủ động tích lũy kiến thức. 2
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” IV. MỤC ĐÍCH NGHIÊN CỨU Góp phần đổi mới phương pháp dạy học sinh giỏi môn Tin học theo hướng phát huy tính tích cực, chủ động và sáng tạo của học sinh giúp học sinh tiếp thu tri thức một cách có hiệu quả. Góp phần gây hứng thú học tập môn Tin học cho học sinh, giúp học sinh lĩnh hội tri thức một cách khoa học, củng cố và khắc sâu kiến thức. Qua đề tài này tôi mong muốn cung cấp cho học sinh một những vấn đề mà các em đang gặp phải về kỹ năng sử dụng cấu trúc lặp trong khi lập trình giúp các em chủ động hơn trong học tập, tích luỹ kiến thức, kỹ năng lập trình. V. NHỮNG ĐIỂM MỚI TRONG KẾT QUẢ NGHIÊN CỨU Sáng kiến đã hệ thống lại lý thuyết về cấu trúc lặp và xây dựng các bài toán thành hệ thống theo trình tự logic có sự sắp đặt về ý tưởng giải thuật, phương pháp và quy trình giải bài toán, giúp học sinh dễ dàng tiếp cận với nội dung, cũng cố kiến thức, rèn luyện kỷ năng phát triển tư duy thuật toán và biết áp dụng Tin học vào thực tiễn. Thông qua việc hướng dẫn giải các bài toán giáo viên rèn luyện kỷ năng lựa chọn thuật toán cho học sinh bằng cách định hướng lời giải từng bài tập, qua đó góp phần gây hứng thú học tập môn Tin học cho học sinh, giúp học sinh lĩnh hội tri thức một cách khoa học, củng cố và khắc sâu kiến thức. Việc áp dụng đề tài giúp giáo viên có nhiều lựa chọn trong khâu thiết kế bài dạy, đa dạng các hình thức tổ chức và phương pháp dạy học nhằm rèn luyện kỹ năng sử dụng cấu trúc lặp trong lập trình Python giảng dạy môn Tin học lớp 10 và bồi dưỡng học sinh khá giỏi tham gia kì thi chọn học sinh giỏi các cấp môn Tin học 10. 3
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” PHẦN II: NỘI DUNG I. CƠ SỞ LÝ LUẬN Cấu trúc lặp là những lệnh rất phổ biến khi lập trình không chỉ trong ngôn ngữ Python mà còn trong tất cả các NNLT. Khi ta muốn thực hiện một khối lệnh nào đó trong Python chỉ khi một điều kiện nào đó được thỏa mãn, cấu trúc điều kiện là thứ mà ta cần dùng trong trường hợp này. Còn khi ta muốn thực hiện một khối lệnh nào đó nhiều lần, hoặc với từng phần tử trong một đối tượng mảng, ta sẽ sử dụng tới cấu trúc vòng lặp. Tuy nhiên trước một bài toán lập trình tin học có các thao tác lặp đi lặp lại nhiều học sinh thường lúng túng, không biết nên lựa chọn và sử dụng câu lệnh lặp nào cho phù hợp với yêu cầu bài toán và tối ưu hóa thuật toán? Một số học sinh khá, giỏi có thể sử dụng cấu trúc lặp để mô tả nhưng đa số chưa biết tối ưu hóa thuật toán để giảm số lần lặp và điều đó gây tâm lý chán nản cho các em. Với tình hình ấy để giúp học sinh có kỹ năng tốt hơn trong việc sử dụng cấu trúc lặp để mô tả thuật toán, thì người giáo viên cần tăng cường rèn luyện cho học sinh kỹ năng sử dụng cấu trúc lặp từ các các bài toán cơ bản quen thuộc mà các em đã biết, khai thác các yếu tố đặc trưng của một số bài toán cơ bản để tìm thuật toán cho các bài toán mới, dựa vào đặc điểm cụ thể của từng bài toán để tối ưu hóa thuật toán. Việc rèn luyện kỹ năng lập trình cho học sinh từ những bài toán cơ bản để xây dựng thuật toán cho các bài toán tương tự hoặc các bài toán mở rộng từ các bài toán cơ bản đó là một quá trình giúp học sinh rèn luyện kỹ năng lập trình. II. THỰC TRẠNG CỦA VẤN ĐỀ Năm học 2022 - 2023 bắt đầu áp dụng chương trình giáo dục phổ thông mới 2018 cho lớp 10. Điểm mới quan trọng nhất của chương trình giáo dục lớp 10 năm nay là cho phép học sinh được lựa chọn môn học theo năng lực, sở thích của mình và theo xu hướng nghề nghiệp dự định chọn trong tương lai, trong đó môn Tin học được nhiều học sinh lựa chọn. Chương trình môn Tin học lớp 10 kế thừa toàn bộ phẩm chất chung, năng lực chủ yếu chung và năng lực tin học đã được hình thành, phát triển ở giai đoạn giáo dục cơ bản. Nội dung cốt lõi của môn Tin học 10 được mô tả theo từng chủ đề, trong đó chủ đề “Giải quyết vấn đề với sự trợ giúp của máy tính” về Lập trình cơ bản, đây là một chủ đề lớn, quan trọng chiếm phần lớn nội dung cốt lõi của môn Tin học ở 4
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” lớp 10. Nội dung lập trình cơ bản với những nội dung đổi mới rất căn bản: dùng NNLT Python để minh họa và thực hành. Lập trình cơ bản là nội dung chung cho cả hai định hướng Tin học ứng dụng và Khoa học máy tính. Với mục tiêu hình thành và phát triển tư duy máy tính, nội dung Lập trình cơ bản được chọn lọc để thích hợp với tư duy học sinh phổ thông. Trong các NNLT bậc cao đều có câu lệnh thể hiện cấu trúc lặp của thuật toán, với lập trình trên Python thì việc học sinh nắm chắc các vòng lặp là chìa khóa để giải quyết các vấn đề liên quan tới dãy dữ liệu. Vì vậy giáo viên dạy học chương trình lớp 10 cũng như dạy đội tuyển học sinh giỏi phải bắt đầu rèn luyện cho các em từ những câu lệnh cơ bản nhất. Cơ sở trên đã giúp tôi áp dụng đề tài rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python và áp dụng cho học sinh khá giỏi tham dự kỳ thi chọn học sinh giỏi Tin học 10 các cấp. III. CÁC BIỆN PHÁP ĐÃ TIẾN HÀNH ĐỂ GIẢI QUYẾT VẤN ĐỀ 1. Hệ thống kiến thức cốt lõi về cấu trúc lặp trong Python a. Cấu trúc lặp trong mô tả thuật toán Khi có một (hay nhiều) thao tác cần thực hiện lặp lại một số lần liên tiếp trong quá trình thực hiện thuật toán thì cần dùng cấu trúc lặp. Có những thuật toán ta biết trước được số lần lặp của những thao tác lặp lại. Nhưng cũng có những thuật toán ta không biết trước được số lần lặp mà chỉ đến khi thực hiện thuật toán với những dữ liệu đầu vào cụ thể mới biết được. Trong một số thuật toán có những thao tác phải lặp đi lặp lại một số lần. Một trong các đặc trưng của máy tính có khả năng thực hiện hiệu quả các thao tác lặp. 5
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” Cấu trúc lặp mô tả thao tác lặp và được phân biệt hai loại là lặp với số lần biết trước và lặp với số lần chưa biết trước. Các NNLT đều có các câu lệnh để mô tả cấu trúc điều khiển lặp. b. Câu lệnh lặp với số lần lặp biết trước trong Python - Trong Python, câu lệnh lặp với số lần biết trước có dạng: for biến_chạy in range(m, n): Khối lệnh cần lặp Trong đó: • Hàm range(m, n) dùng để khởi tạo dãy số nguyên từ m đến n – 1 (với m < n). • Trường hợp m = 0, hàm range(m, n) có thể viết gọn là range(n). - Hoạt động: Trong cú pháp trên, range (m,n) là là chuỗi cần lặp, biến_chạy là biến nhận giá trị của từng mục bên trong chuỗi lặp trên mỗi lần lặp. Vòng lặp sẽ tiếp tục cho đến khi nó lặp tới mục cuối cùng trong chuỗi. Hình 2: Sơ đồ hoạt động của câu lệnh for Khối lệnh cần lặp của for được thụt lề để phân biệt với phần còn lại của code. 6
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” * Cách sử dụng hàm range trong Python: + Hàm range được tích hợp sẵn trong Python, hàm này cho phép trả về một chuỗi số bắt đầu từ 0 và tăng dần lên 1 cho đến khi đạt được một số cụ thể. Nói cách khác, hàm này nhận một số nguyên và trả cho bạn một range object. Hàm này thường được sử dụng để lặp lại kiểu trình tự, phổ biến nhất là for và loops. + Tham số của hàm range Dưới đây là một vài tham số range thường được sử dụng trong Python: range(start, stop, step) Trong đó: - start: Đây là tham số bắt đầu, chuỗi sẽ bắt đầu với tham số này. - stop: Là điểm kết thúc của dãy số, dãy số sẽ dừng ngay khi đạt đến tham số dừng. - step: Số nguyên xác định khoảng cách của mỗi số trong chuỗi. Ví dụ: Chương trình sau sẽ cho ra các số chẵn từ 2 cho đến 20. for i in range(2, 20, 2): print(i) + Range đảo ngược trong Python Ví dụ sau đây cho chúng ta thấy cách sử dụng hàm đảo ngược phạm vi trong Python. Kết quả nhận được sẽ là danh sách 5 số tự nhiên theo thứ tự đảo ngược (5, 4, 3, 2, 1,). for i in range(5, 0, -1): print(i, end=", ") c. Câu lệnh lặp với số lần lặp không biết trước trong Python - Trong Python, câu lệnh lặp với số lần không biết trước có dạng: while : Câu lệnh hay nhóm câu lệnh 7
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” Trong đó: là biểu thức nhận giá trị logic là True hoặc False - Hoạt động: Trong vòng lặp while, sẽ được kiểm tra đầu tiên, nếu nó là True, thì khối lệnh của vòng lặp sẽ được thực thi. Sau một lần lặp, sẽ được kiểm tra lại và quá trình lặp này sẽ chỉ dừng cho đến khi điều kiện là False. Trong Python mọi giá trị khác 0 đều là True, None và 0 được hiểu là False. Đặc điểm này có thể dẫn đến trường hợp là while có thể không chạy vì ngay lần lặp đầu tiên đã False. Khi đó, khối lệnh của while sẽ bị bỏ qua và phần code dưới khối lệnh while sẽ được thực thi. Hình 3: Sơ đồ hoạt động của câu lệnh while Lưu ý: Vòng lặp while sẽ không biết chính xác tổng số lần lặp là bao nhiêu nên điều này rất nguy hiểm, vì nó có thể gây ra lặp vô hạn và dẫn đến ứng dụng bị chết, nên bạn phải tính toán thật kĩ điều kiện dừng vòng lặp. Nếu chạy mà không thoát được thì hãy nhấn CTR + C để thoát ra khỏi chương trình. Giống như if hay vòng lặp for, khối lệnh của while cũng được xác định thông qua thụt lề. Khối lệnh bắt đầu với thụt lề đầu tiên và kết thúc với dòng không thụt lề đầu tiên liền sau khối. * Câu lệnh while cũng có thể thực hiện được cấu trúc lặp với số lần lặp biết trước. 8
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” d. Vòng lặp lồng nhau và các từ khóa tác động đến vòng lặp - NNLT Python cho phép sử dụng một vòng lặp bên trong một vòng lặp khác hay còn gọi là vòng lặp lòng nhau trong Python. Vòng lặp lồng nhau là vòng lặp đặt bên trong 1 vòng lặp khác. Vòng lặp trong cùng sẽ được thực hiện cho mỗi lần lặp của vòng lặp ngoài. for bien_chay_vong_lap_1 in day_seq_1: for bien_chay_vong_lap_2 in day_seq_2: // khối lệnh // khối lệnh while : while : // Khối lệnh được lặp lại cho đến khi điều kiện 2 = False // Khối lệnh được lặp lại cho đến khi điều kiện 1 = False - Trong Python, các câu lệnh break và continue có thể thay đổi luồng thực thi của một vòng lặp thông thường. Câu lệnh break dùng để thoát ra khỏi vòng lặp ngay kể cả khi điều kiện lặp còn đúng. Bất cứ những lệnh nào trong vòng lặp đứng sau break đều bị bỏ qua. Câu lệnh continue được sử dụng để bỏ qua các câu lệnh còn lại chưa được thực hiện trong vòng lặp, chuyển đến vòng lặp tiếp theo. 2. Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp Bài luyện tập 1: Mục tiêu: Rèn luyện kỹ năng lựa chọn, sử dụng các câu lệnh lặp để áp dụng giải từng bài toán cụ thể trong Python. Bài toán 1.1: Viết chương trình nhập vào số nguyên n và in ra các số nguyên dương lẻ không lớn hơn n theo thứ tự tăng dần. 9
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” • Ý tưởng tưởng giải thuật: Với bài này có thể có nhiều cách viết vòng lặp. Cách 1: Sử dụng vòng lặp for: Dãy số lẻ cần in ra là 0 × 2 + 1, 1 × 2 + 1, 2 × 2 + 1, … , 𝑘 × 2 + 1, trong đó k là giá trị số nguyên lớn nhất thỏa mãn: 𝑘 × 2 + 𝑛−1 1 ≤ 𝑛, tức là 𝑘 = [ ]. 2 • Tham khảo chương trình sau: n= int (input ("n = ")) for k in range ((n-1)//2+1): print (k*2+1) Cách 2: Sử dụng vòng lặp for nhưng sửa lại khai báo các tham số trong range(…) để mỗi bước giá trị số in ra tăng lên 2 đơn vị. • Tham khảo chương trình sau: n= int (input ("n = ")) for k in range (1,n+1,2): print (k) Cách 3: Sử dụng vòng lặp while: Khởi tạo 𝑥 = 1 là số nguyên dương lẻ nhỏ nhất, cho đến khi 𝑥 ≤ 𝑛 ta in ra x sau đó tăng x lên 2 đơn vị. • Tham khảo chương trình sau: x = int (input ("n = ")) x=1 while x
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” • Ý tưởng tưởng giải thuật: Tương tự Bài toán 1 nhưng in ra theo thứ tự giảm dần, với bài này cũng có thể có nhiều cách viết vòng lặp. Số nguyên dương chẵn lớn nhất không vượt quá n là hiệu của n với số dư của phép chia n cho 2. Số nguyên dương chẵn nhỏ nhất là 2. Cách 1: Sử dụng vòng lặp while: Khởi tạo 𝑥 = 𝑛 − 𝑛%2 cho đến khi 𝑥 > 0 ta in ra x sau đó giảm giảm x đi 2 đơn vị. • Tham khảo chương trình sau: n = int (input ("n=")) x=n-n%2 while x > 0 : print (x) x=x–2 Cách 2: Sử dụng vòng lặp for • Tham khảo chương trình sau: n = int (input ("n = ")) k = n // 2 for i in range(k): print ((k-i)*2) Cách 3: Sử dụng vòng lặp for nhưng sửa lại khai báo các tham số trong range(…) để mỗi bước giá trị số in ra giảm đi 2 đơn vị. • Tham khảo chương trình sau: n= int (input ("n=")) for k in range (n - n % 2, 0, -2): print (k) Bài toán 1.3: Viết chương trình nhập vào số nguyên n và in ra tổng các chữ số trong biểu diễn thập phân của n. • Ý tưởng tưởng giải thuật: Thuật toán có thể áp dụng cho bài này là “tách” từng chữ số của n, với mỗi chữ số được tách ra, ta cộng dồn vào một biến S. Cụ thể: 11
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” - Khởi tạo S=0. - Lặp cho đến khi nconf chữ số. - Lấy chữ số hàng đơn vị của n, gọi là d. (ta có thể dùng phép tính d= n % 10) - Đặt S=S+d. - Loại bỏ chữ số hàng đơn vị của n. (ta có thể gán lại n=n//10) Với quy tắc tính như vậy, điều kiện “n còn chữ số” có thể viết thành n==0. Bởi khi n chỉ còn một chữ số thù phép gán n=n//10 sẽ cho n==0. Do số lần lặp chưa biết trước (tùy thuộc n nhập vào) nên ta sử dụng câu lệnh lặp while. • Tham khảo chương trình sau: n = int (input("n = ")) S=0 while n != 0: d = n % 10 S = S +d n = n // 10 print (" Tổng các chữ số của n là =", S) Bài toán 1.4: Viết chương trình nhập vào một số nguyên dương n và in ra giá trị giai thừa của n. Ý tưởng tưởng giải thuật: Giai thừa của n (ký hiệu n!) là tích các số tự nhiên từ 1 đến n. Ta cũng có thể định nghĩa quy nạp như sau: 1, 𝑛ế𝑢 𝑛 = 0 𝑛! = { 𝑛 × ( 𝑛 − 1)!, 𝑛ế𝑢 𝑛 > 0 Lưu ý: 0! = 1, đây là quy ước của hàm giai thừa. Để tính n!, ta có thể khởi tạo một biến số nguyên GT = 0 tương ứng với giá trị 0! Sau đó với mỗi i từ 2 tới n, ta nhân GT lên i lần (GT=GT*i). Với số lần lặp xác định được nên ta có thể dùng vòng lặp for. 12
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” • Tham khảo chương trình sau: n = int (input("n = ")) GT = 1 for i in range(1, n+1): GT = GT*i print (n,"! = ", GT) Bài toán 1.5: Viết chương trình nhập vào hai số tự nhiên a, b không đồng thời bằng 0 và in ra ước chung lớn nhất của a, b. • Ý tưởng tưởng giải thuật: Ước chung lớn nhất là một khái niệm quan trọng của số học và nhiều lĩnh vực khác. Mục đích của bài toán là tìm số nguyên d lớn nhất đồng thời là ước của cả 2 số a và b. Với bài toán này ta sử dụng thuật toán Euclid như sau: Lặp cho đến khi 𝑏 ≠ 0: - Tính r là số dư của phép chia a cho b. - Thay cặp số (a,b) bởi cặp số (b,r). Kết thúc: Giá trị a sau vòng lặp là ước chung lớn nhất của hai số ban đầu. Với số lần lặp chưa xác định được nên ta có thể dùng vòng lặp while. • Tham khảo chương trình sau: a = int (input("a = ")) b = int (input("b = ")) while b !=0: (a, b) = (b, a % b) print ("UCLN = ", a) Bài toán 1.6: Viết chương trình nhập vào một số nguyên n và in ra tất cả các ước số của n. 13
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” • Ý tưởng tưởng giải thuật: Cách 1: Một trong những giải pháp đơn giản là dùng vòng lặp thử mọi giá trị số nguyên d từ 1 đến n, mỗi khi gặp một giá trị d là ước số của n thì in ra ngay giá trị d đó. • Tham khảo chương trình sau: n = int (input("n = ")) for d in range(1, n+1): if n % d == 0: print (d, end = " ") Cách 2: Cách làm trên khá chậm khi gặp giá trị n lớn. Một cải tiến nhỏ là dựa 𝑛 vào nhận xét: Ngoại trừ ước d = n, tất cả các ước số khác của n đều không vượt quá , 2 𝑛 vì vậy ta chỉ cần dùng thử d trong phạm vi [1; ] còn riêng ước d = n sẽ được in sau. 2 Mặc dù tốc độ chương trình cải thiện gấp đôi, phương pháp này vẫn còn chậm. • Tham khảo chương trình sau: n = int (input("n = ")) for d in range(1, (n+1)//2+1): if n % d == 0: print (d, end =" ") print (n) 𝑛 Cách 3: Dựa vào nhận xét: Nếu d là ước số của n thì cũng là ước số của n. 𝑑 𝑛 Trong hai ước d và , chắc chắn có một số nhỏ hơn hoặc bằng √𝑛. Vì thế ta chỉ cần 𝑑 thử d trong phạm vi [1; √𝑛], khi tìm thấy một ước d của n trong phạm vi này, ta in ra d 𝑛 và in ra luôn cả ước . 𝑑 𝑛 Trong trường hợp 𝑑 = (n là số chính phương), ta chỉ được in ra một ước để 𝑑 tránh trùng lặp. 14
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” • Tham khảo chương trình sau: n = int (input("n = ")) for d in range(1, (n+1)//2): if n % d == 0: print (d, end = " ") print (n) Bài toán 1.7: Dãy số fibonaci được định nghĩa như sau: f1 = 1, f2=1 fn = fn-1 + fn-2 Viết chương trình in ra số fibonaci thứ n với n nhập từ bàn phím. • Ý tưởng giải thuật - Nếu n 2: Dựa vào công thức truy hồi của dãy fibonaci ta có thể dẽ dàng tính được fn dựa vào fn-1 và fn-2. Sử dụng biến f để tính fi ứng với mỗi giá trị của i (i= 3..n) , theo công thức truy hồi ta có f = f1+f2, sau đó f1 và f2 được thay đổi giá trị để tính phần tử tiếp theo của dãy. • Tham khảo chương trình sau: n = int (input("n = ")) if n
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” Bài toán 1.8: Viết chương trình tính tổng 𝑆 = √2 + √4 + ⋯ + √2𝑛 , với n là một số tự nhiên nhập từ bàn phím. n dấu căn • Ý tưởng giải thuật Đặt 𝑆 𝑖 = √2𝑖 + √2(𝑖 + 1) + ⋯ + √2𝑛 ta có công thức truy hồi sau: 𝑆 𝑛+1 = 0, 𝑆 𝑛 = √2𝑛 { 𝑆𝑖 = √2𝑖 + 𝑆 𝑖+1 Tổng cần tính là Si. Công thức truy hồi là truy hồi ngược (vì tính Si qua Si+1) nên dùng câu lệnh for là thích hợp nhất. • Tham khảo chương trình sau: import math n= int (input ("n=")) S=0 for i in range (n, 0, -1): S = math.sqrt(2*i + S) print (S) Bài toán 1.9: Viết chương trình tính tổng sau: S = 1 + 2 + 3 + .. + n + … cho đến khi S > 105 • Ý tưởng giải thuật Ta có thể mô tả thuật toán giải bài toán trên bằng cách liệt kê như sau: B1: Gán S ← 0, i ← 0; B2: Nếu S>105 thì chuyển đến B5; B3: i ← i+1; B4: S = S+i, rồi quay lại B2; 16
- “Rèn luyện kỹ năng lập trình với chủ đề câu lệnh lặp cho học sinh lớp 10 trong NNLT Python” B5: Đưa ra S rồi kết thúc. Số lần lặp chưa biết trước (phụ thuộc vào tổng S) nên ta sử dụng cấu trúc lặp while • Tham khảo chương trình sau: S=0 i=0 while S < 100000 : i = i+1 S = S +i print (S) Bài luyện tập 2: Mục tiêu: Rèn luyện kỹ năng sử dụng câu lệnh lặp lồng nhau để áp dụng giải các bài toán liên quan. Bài toán 2.1: Viết chương trình nhập vào số nguyên dương n và in ra các số hoàn hảo nhỏ hơn n. Một số có tổng các ước thực sự (là các ước không kể chính nó) bằng chính nó được gọi là số hoàn hảo. Ví dụ: Số nguyên 6 có các ước thực sự là 1, 2, 3. Tổng là 1 + 2 + 3 = 6. • Ý tưởng giải thuật - Sử dụng 2 vòng lặp for lồng nhau để kiểm tra tính hoàn hảo và in ra các số hoàn hảo từ 1 đến n-1. - Để kiểm tra số x là hoàn hảo thì + Dùng biến x lưu số cần xét. + Biến S lưu trữ tổng các ước thực sự, khởi tạo S= 0; + Sử dụng vòng lặp for với biến chạy i chạy từ 1 đến x-1, nếu i là ước của x thì cộng thêm i vào S. - Nếu S = x thì in số x. - Quay lại kiểm tra giá trị tiếp theo (x+1). 17
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Sáng kiến kinh nghiệm THPT: Phương pháp rèn luyện kĩ năng sử dụng Atlat và thực hành biểu đồ Địa lí lớp 12
26 p | 159 | 15
-
Sáng kiến kinh nghiệm THPT: Một số biện pháp tổ chức hoạt động trải nghiệm, nhằm phát huy tính tích cực, sáng tạo của học sinh trong dạy học môn Công nghệ trồng trọt 10
12 p | 31 | 9
-
Sáng kiến kinh nghiệm THPT: Rèn kỹ năng cảm thụ văn xuôi Việt Nam hiện đại trong chương trình Ngữ văn 12
27 p | 42 | 9
-
Sáng kiến kinh nghiệm THPT: Giải pháp rèn luyện kĩ năng điều chỉnh và quản lí cảm xúc nhằm hình thành khả năng ứng phó với căng thẳng của học sinh trường THPT Kim Sơn C
50 p | 18 | 9
-
Sáng kiến kinh nghiệm THPT: Sử dụng phiếu học tập dưới dạng đề kiểm tra sau mỗi bài học, để học sinh làm bài tập về nhà, làm tăng kết quả học tập môn Hóa
13 p | 28 | 8
-
Sáng kiến kinh nghiệm THPT: Rèn luyện kỹ năng phát âm thông qua hoạt động lồng tiếng phim tiếng Anh cho học sinh lớp 10A4 trường THPT Yên Mô B
32 p | 25 | 7
-
Sáng kiến kinh nghiệm THPT: Một số hình thức tổ chức rèn luyện kỹ năng vận dụng kiến thức phần Sinh học tế bào – Sinh học 10, chương trình Giáo dục Phổ thông 2018 vào thực tiễn cho học sinh lớp 10 trường THPT Vĩnh Linh
23 p | 18 | 7
-
Sáng kiến kinh nghiệm THPT: Giáo dục kỹ năng sống và sử dụng ngôn ngữ cho học sinh THPT qua tác phẩm Chí Phèo
19 p | 29 | 7
-
Sáng kiến kinh nghiệm THPT: Một số phương pháp giáo dục kỹ năng sống hiệu quả khi dạy phần đạo đức môn Giáo dục công dân lớp 10
11 p | 121 | 7
-
Sáng kiến kinh nghiệm THPT: Hệ thống bài tập Hóa học rèn kĩ năng vận dụng kiến thức vào thực tiễn trong chương trình Hóa học THPT
47 p | 18 | 6
-
Sáng kiến kinh nghiệm THPT: Hướng dẫn học sinh khai thác có hiệu quả kênh hình trong sách giáo khoa Địa lí 11
28 p | 69 | 6
-
Sáng kiến kinh nghiệm THPT: Hướng dẫn học sinh lớp 12 một số kĩ năng học và làm bài thi trắc nghiệm khách quan môn Vật lí trong kì thi Trung học phổ thông quốc gia
14 p | 30 | 6
-
Sáng kiến kinh nghiệm THPT: Dạy học theo nhóm góp phần giáo dục và rèn luyện kĩ năng sống cho học sinh
10 p | 16 | 5
-
Sáng kiến kinh nghiệm THPT: Một số kinh nghiệm rèn kĩ năng viết đoạn văn nghị luận xã hội cho học sinh lớp 12 ở trường THPT Vĩnh Linh
20 p | 16 | 5
-
Sáng kiến kinh nghiệm THPT: Vận dụng dạy học STEM phần hóa học phi kim lớp 11 nhằm phát triển năng lực và phẩm chất cho học sinh
71 p | 16 | 5
-
Sáng kiến kinh nghiệm THPT: Rèn luyện kỹ năng giải toán bằng phương pháp lượng giác hóa
39 p | 19 | 4
-
Sáng kiến kinh nghiệm THPT: Rèn kĩ năng làm bài đọc hiểu văn bản trong đề thi trung học phổ thông Quốc gia
61 p | 18 | 4
-
Sáng kiến kinh nghiệm THPT: Rèn luyện kĩ năng giải các bài toán cực trị hàm số cho học sinh lớp 12 THPT
49 p | 34 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn