Sách giáo khoa python lớp 8

60% found this document useful (5 votes)

5K views

58 pages

Original Title

SGK Tin hoc 8 Python

Copyright

© © All Rights Reserved

Share this document

Did you find this document useful?

60% found this document useful (5 votes)

5K views58 pages

SGK Tin Hoc 8 Python

Original Title:

SGK Tin hoc 8 Python

You're Reading a Free Preview
Pages 9 to 32 are not shown in this preview.

You're Reading a Free Preview
Pages 38 to 41 are not shown in this preview.

You're Reading a Free Preview
Pages 48 to 54 are not shown in this preview.

Tác giả viết 2 quyển sách này với mong muốn giúp thầy cô giáo có tài liệu tham khảo để giảng dạy cho học sinh một cách đơn giản và hiệu quả nhất trong giai đoạn chuyển tiếp từ chương trình cũ sang chương trình GHPT 2018.

Sách viết bám sát theo sách giáo khoa hiện hành lớp 8 và lớp 11 nên thầy cô sẽ dễ dàng nắm bắt trên nền tảng kiến thức đã có – day được thể hiện, diễn giải bằng ngôn ngữ lập trình Python.

Sách không in mà publish file mềm (pdf), hiện có 2 phiên bản:

  • Bản giới hạn: Cho phép in ở độ phân giải 150dpi và không cho copy nội dung.
  • Bản full: Cho phép in chất lượng cao và có thể copy nội dung sách.

Xin trân trọng cám ơn bạn đã quan tâm !

Download sách

Tải bản giới tại đây:

  • Sách giáo khoa Python Tin học 8 (75 trang)
  • Sách giáo khoa Python Tin học 11 (102 trang)

Tải bản full theo hình thức “Sách tự định giá” tại đây:

  • Sách giáo khoa Python Tin học 8.
  • Sách giáo khoa Python Tin học 11.

Sách tự định giá là sách người đọc tự định giá khi nhận .

Thông tin tiếp nhận :

Số tài khoản: 107004051617Ngân hàng: VietinBank (TMCP Công thương Việt Nam) Chi nhánh: Bình Phước (hội sở)

Nội dung chuyển: SGK, email nhận sách
Ví dụ: [email protected] thì ghi: nglevi gmail com

Quét mã QR

     

Ruby School Python TIN HỌC

Python là gì ? Python là một ngôn ngữ lập trình bậc cao do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991. Python vừa hướng thủ tục (procedural- oriented), vừa hướng đối tượng (object-oriented) đồng thời có thể nhúng vào ứng dụng như một giao tiếp kịch bản (scripting interface). Thế mạnh của Python là rất gần gũi với ngôn ngữ tự nhiên (tiếng Anh), cấu trúc rõ ràng, dễ đọc, dễ học. Python hiện nay là ngôn ngữ lập trình phổ biến rộng rãi ở châu Âu, châu Mỹ và được coi như ngôn ngữ lập trình trường học. Python được dùng để phát triển các ứng dụng web, game, khoa học dữ liệu (tính toán, phân tích, khai thác dữ liệu), máy học và trí tuệ nhân tạo, … Tài liệu dùng kèm Sách giáo khoa Tin học 11 của Bộ Giáo dục và Đào tạo (NXB. Giáo Dục - Tái bản lần thứ 4, năm 2009). Tài liệu được trình bày theo cấu trúc Sách giáo khoa Tin học 11. Các ví dụ và bài tập, bài thực hành trong sách giáo khoa được trình bày lại bằng ngôn ngữ lập trình Python một cách chi tiết, đầy đủ. Bổ sung một số kiến thức, kỹ thuật lập trình cần thiết để sử dụng ngôn ngữ lập trình Python trong dạy và học chương trình Tin học 11.

MỤC LỤC TRƯỚC KHI BẮT ĐẦU ...................................................................... 1 1. Hướng dẫn đọc ...................................................................... 1 2. Cài Python ............................................................................. 1 3. Cài chương trình soạn thảo ................................................... 1 Chương 1. MỘT SỐ KHÁI NIỆM ...................................................... 3 §1. KHÁI NIỆM VỀ LẬP TRÌNH VÀ NGÔN NGỮ LẬP TRÌNH .... 3 Lưu ý ......................................................................................... 3 §2. CÁC THÀNH PHẦN CỦA NGÔN NGỮ LẬP TRÌNH................ 3 Các thành phần cơ bản .............................................................. 3 Một số khái niệm ...................................................................... 3 Chương 2. CHƯƠNG TRÌNH ĐƠN GIẢN ........................................ 6 §3. CẤU TRÚC CHƯƠNG TRÌNH ..................................................... 6 Câu trúc chung .......................................................................... 6 Các thành phần của chương trình ............................................. 6 Ví dụ chương tình đơn giản ...................................................... 7 §4. MỘT SỐ KIỂU DỮ LIỆU CHUẨN............................................... 8 Kiểu nguyên .............................................................................. 8 Kiểu thực................................................................................... 8 Kiểu kí tự .................................................................................. 8 Kiểu logic .................................................................................. 9 §5. KHAI BÁO BIẾN ......................................................................... 10 §6. PHÉP TOÁN, BIỂU THỨC, CÂU LỆNH GÁN ......................... 11 Phép toán................................................................................. 11 Biểu thức số học...................................................................... 12 Hàm số học chuẩn ................................................................... 12 Biểu thức quan hệ ................................................................... 12 Biểu thức logic ........................................................................ 12

Câu lệnh gán............................................................................ 12 §7. CÁC THỦ TỤC CHUẨN VÀO RA ĐƠN GIẢN ........................ 14 Nhập dữ liệu vào từ bàn phím................................................. 14 Đưa dữ liệu ra màn hình.......................................................... 14 §8. SOẠN THẢO, DỊCH, THỰC HIỆN VÀ HIỆU CHỈNH CHƯƠNG TRÌNH .......................................................................................... 16 BÀI TẬP VÀ THỰC HÀNH 1........................................................... 18 Mục đích, yêu cầu ................................................................... 18 Nội dung.................................................................................. 18 CHƯƠNG III. CẤU TRÚC RẼ NHÁNH VÀ LẶP ........................... 20 §9. CẤU TRÚC RẼ NHANH ............................................................. 20 Rẽ nhánh ................................................................................. 20 Câu lệnh if............................................................................... 20 Câu lệnh ghép.......................................................................... 21 Một số ví dụ ............................................................................ 22 §10. CẤU TRÚC LẶP ........................................................................ 24 Lặp .......................................................................................... 24 Lặp với số lần biết trước ......................................................... 24 Lặp với số lần chưa biết trước................................................. 25 BÀI TẬP VÀ THỰC HÀNH 2........................................................... 27 CHƯƠNG IV. KIỂU DỮ LIỆU CÓ CẤU TRÚC.............................. 31 §11. KIỂU MẢNG .............................................................................. 31 Kiểu mảng một chiều .............................................................. 31 Kiểu mảng hai chiều ............................................................... 37 Các thao tác xử lý list.............................................................. 39 BÀI TẬP VÀ THỰC HÀNH 3........................................................... 42 BÀI TẬP VÀ THỰC HÀNH 4........................................................... 44 §12. KIỂU XÂU.................................................................................. 46 Khai báo .................................................................................. 46

Các thao tác xử lý xâu............................................................. 46 Một số ví dụ ............................................................................ 52 BÀI TẬP VÀ THỰC HÀNH 5........................................................... 54 §13. KIỂU BẢN GHI.......................................................................... 55 Khai báo .................................................................................. 55 Gán giá trị................................................................................ 55 Các thao tác cơ bản với kiểu dict ............................................ 57 CÂU HỎI VÀ BÀI TẬP ..................................................................... 59 CHƯƠNG V. TỆP VÀ THAO TÁC VỚI TỆP .................................. 64 §14. KIỂU DỮ LIỆU TỆP .................................................................. 64 Vai trò của kiểu tệp ................................................................. 64 Phân loại tệp và thao tác với tệp ............................................. 64 §15. THAO TÁC VỚI TỆP ................................................................ 65 Khai báo .................................................................................. 65 Thao tác với tệp....................................................................... 65 §16. VÍ DỤ LÀM VIỆC VỚI TỆP ..................................................... 68 CHƯƠNG VI. CHƯƠNG TRÌNH CON ............................................ 70 §17. CHƯƠNG TRÌNH CON VÀ PHÂN LOẠI ............................... 70 Khái niệm chương trình con ................................................... 70 Phân loại và cấu trúc của chương trình con ............................ 71 §18. VÍ DỤ CÁCH VIẾT VÀ SỬ DỤNG CHƯƠNG TRÌNH CON.75 BÀI TẬP VÀ THỰC HÀNH 6........................................................... 77 Mục đích, yêu cầu ................................................................... 77 Nội dung.................................................................................. 77 BÀI TẬP VÀ THỰC HÀNH 7........................................................... 78 Mục đích, yêu cầu ................................................................... 78 Nội dung.................................................................................. 78 §19. THƯ VIỆN CHƯƠNG TRÌNH CON CHUẨN ......................... 82

Module .................................................................................... 82 Package ................................................................................... 83 Thư viện đồ họa Turtle............................................................ 83 BÀI TẬP VÀ THỰC HÀNH 7........................................................... 85 Mục đích, yêu cầu ................................................................... 85 Nội dung.................................................................................. 85 Tìm hiểu thêm về Python .................................................................... 89

TRƯỚC KHI BẮT ĐẦU 1. Hướng dẫn đọc Sách này dùng kèm với sách giáo khoa Tin học 11 của Bộ Giáo dục và Đào tạo, Nhà xuất bản Giáo dục Việt Năm tái bản lần thứ 2, năm 2009 (SGK). Những phần chỉ có tiêu đề, không có nội dung nghĩa là sử dụng nguyên văn nội dung được trình bày trong SGK (các nội dung được trình bày trong SGK là phù hợp với Python). Nội dung sách này bám sát theo đúng cấu trúc của SGK. Vì vậy sách chỉ trình bày và giải quyết các vấn đề được SGK nêu - đó chỉ là một phần rất cơ bản của lập trình và ngôn ngữ lập trình. Để có thể lập trình và làm chủ ngôn ngữ lập trình Python thì chúng ta cần nghiên cứu thêm các tài liệu khác (có giới thiệu ở cuối sách). 2. Cài Python Tải về từ https://www.python.org/downloads/ và tiến hành cài đặt (chọn phiên bản 3.8 trở lên). Sau khi hoàn tất cài đặt có thể kiểm tra: - Nhấnphím Windowsgõcmd  Enter - Gõ: python --version  Enter Lúc này sẽ hiển thị phiên bản Python đã cài đặt trên máy tính. 3. Cài chương trình soạn thảo Để lập trình theo một ngôn ngữ nào đó ta đều cần có chương trình cho phép gõ các câu lệnh và ra lệnh thực thi các câu lệnh đó. Trong các trường học, để lập trình với Pascal ta thường sử dụng FreePascal, với C ta thường dùng CodeBlock, … Với Python, ta có nhiều lựa chọn. Dưới đây là một số gợi ý: 1

1) Notepad++ Tải về tại đây: https://notepad-plus-plus.org/downloads/ Đặc điểm: Đơn giản, dễ sử dụng. Nhược điểm: Phải cài thêm plugin để debug. 2) Thonny Tải về tại đây: https://thonny.org/ Thonny có giao diện đơn giản, cấu hình nhẹ (trên cùng một máy khởi động nhanh hơn nhiều so với Pycham hay Spyder). Hỗ trợ debug trực quan giúp ta dễ theo dõi và hình dung quá trình thực thi chương trình. Sử dụng thư viện / module chuẩn của Python phát hành (không bổ sung hay import sẵn module). 3) PyCharm Educational Edition Tải về tại đây: https://www.jetbrains.com/pycharm-edu/ PyCharm là môi trường phát triển tích hợp đa nền tảng (IDE) được phát triển bởi Jet Brains và được thiết kế đặc biệt cho Python. Tuy nhiên PyCharm khởi động khá nặng nề và yêu cầu làm việc với project. Như vậy, tùy nhu cầu sử dụng và kỹ năng lập trình mà chúng ta lựa chọn trình soạn thảo cho phù hợp. Đối với người mới bắt đầu học Python thì nên dùng Thonny để thực hành. 2

Chương 1. MỘT SỐ KHÁI NIỆM VỀ LẬP TRÌNH & NGÔN NGỮ LẬP TRÌNH §1. KHÁI NIỆM VỀ LẬP TRÌNH VÀ NGÔN NGỮ LẬP TRÌNH Lưu ý Python là một ngôn ngữ lập trình phiên dịch (Interpreter Language), tức là không cần build thành file thực thi mà chạy trực tiếp. (Pascal và C++ phải build trước khi thực thi). Các nội dung còn lại được trình bày của phần này trong SGK Tin học 11 là phù hợp với Python. §2. CÁC THÀNH PHẦN CỦA NGÔN NGỮ LẬP TRÌNH Các thành phần cơ bản Nội dung trình bày của phần này trong SGK Tin học 11 là phù hợp với Python. Lưu ý thêm: Python sử dụng mặc định mảng mã Unicode thay vì ASCII như Pascal. Như vậy, khái niệm “bảng chữ cái” trong Python là các ký tự trong bảng mã Unicode. Tên biến và các đối tượng trong chương trình Python có để đặt bằng tiếng Việt có dấu. Một số khái niệm a) Tên Trong Python, Tên các đối tượng được đặt bằng các ký tự thường (a- z), ký tự in hoa (A-Z), chữ số (0-9) và dấu gạch dưới _ . 3

Tên đối tượng không bắt đầu bằng chữ số, không dùng các ký tự đặc biệt như !, @, #, … và được phân biệt chữ hoa, chữ thường. Tên trong Python không giới hạn độ dài. Tuy nhiên nên đặt tên có tính gợi nhớ về đối tượng. Ví dụ đặt tên biến để lưu giá trị đếm số lần thực thi thì nên đặt là “dem” hay “count”,… Tên dành riêng Tên dành riêng được hiểu là Từ khóa (keyword) trong Python. Keyword được định nghĩa sẵn để sử dụng. Chúng ta không thể dùng keyword để đặt tên biến, tên hàm hoặc bất kỳ đối tượng nào trong chương trình. Tất cả các keyword trong Python đều được viết thường, trừ 03 keyword: True, False, None. Ví dụ một số keyword: True, False, await, else, import, pass, break, except, in, and, or, …. Thực tế thì không cần nhớ keyword vì khi gõ trình soạn thảo sẽ có gợi ý các keyword (ta tránh đặt tên đối tượng trùng với các keyword được gợi ý) và nếu đặt trùng tên keyword thì khi chạy chương trình sẽ báo lỗi. Tên chuẩn Tên chuẩn là những tên đã được định nghĩa (tên module) thuộc thư viện chuẩn của Python. Ví dụ: math (module các hàm toán học thông dụng như sin, cos, tan, sqr, sqrt,…). b) Hằng và biến Trong phần này ta nên nói về biến trước khi nói về hằng. Biến Biến là đại lượng (đối tượng) được đặt tên, dùng để lưu trữ giá trị và giá trị có thể dược thay đổi trong quá trình thực hiện chương trình. 4

Biến trong Python không cần khai báo trước, không nhất thiết phải khai báo kiểu dữ liệu. Khi đặt tên và gán giá trị Python tự động nhận dạng và tùy biến theo kiểu dữ liệu được gán. Hằng Hằng là một loại biến đặc biệt, giá trị của hằng là không đổi trong suốt chương trình sau lần gán giá trị đầu tiên. Tên hằng được viết hoàn toàn bằng CHỮ HOA và dấu gạch dưới (nếu cần). c) Chú thích Chú thích trong Python có thể sử dụng các cách sau: # dùng dấu thăng đầu dòng khi chú thích trên một dòng. ''' dùng ba dấu nháy đơn hoặc nháy kép Khi chú thích trên nhiều dòng ''' 5

Chương 2. CHƯƠNG TRÌNH ĐƠN GIẢN §3. CẤU TRÚC CHƯƠNG TRÌNH Câu trúc chung Trong Python không cần có <phần khai báo> Ta có thể thay phần khai báo bằng một ghi chú về chương trình. Các thành phần của chương trình 2.1 Phần khai báo Phần này có thể thay bằng một dòng ghi chú về tên chương trình Ví dụ: # giải phương trình bậc 2 Python không cần thiết phải khai báo biến, hằng trong phần khai báo mà khi nào dùng đến đối tượng nào thì khai báo đối tượng ấy. Ví dụ. Khai báo thư viện (module) các hàm toán học: import math # khai báo dùng thư viện các hàm toán học Khai báo biến: a= 0 Khai báo hằng: TONG = 100 6

2.2 Phần thân chương trình Phần thân chương trình Python là các câu lệnh thực thi. Ví dụ chương tình đơn giản Ví dụ 1. print(‘Xin chào các bạn!’) Ví dụ 2. print(‘xin chào các bạn!’) print(‘Mời các bạn làm quen với Python’) Xin lưu ý, code trong Python mặc định xâu ký tự ở chuẩn unicode nên có thể gõ tiếng Việt có dấu thoải mái. 7

§4. MỘT SỐ KIỂU DỮ LIỆU CHUẨN Trong Python có 5 kiểu dữ liệu chuẩn gồm: Numers, String, List, Tuple, Dictionary. Trong bài này chúng ta tìm hiểu các kiểu dữ liệu được trình bày trong Bài 4, SGK Tin học 11. Những kiểu dữ liệu khác sẽ được trình bày trong bài khác hoặc phần đọc thêm cuối sách. Kiểu nguyên Kiểu nguyên (int) trong Python không giới hạn số ký tự mà chỉ phụ thuộc vào bộ nhớ máy tính. Khi gán một giá trị là số nguyên cho một biến thì biến đó tự động được gán kiểu số nguyên. a = int(5.5) b = 120 # gán cho biến a một số nguyên có giá trị là 5.5 ➔ a sẽ nhận giá trị là 5. Kiểu thực Kiểu thực (float) trong Python có giới hạn tối đa 15 chữ số phần thập phân. Khi gán một giá trị là số thực cho một biến thì biến đó tự động được gán kiểu số thực. a = float(5) b = 3.14 # gán cho a số thực có giá trị là 5 ➔ a sẽ nhận giá trị là 5.0 Kiểu kí tự 8

Python không có kiểu char như Pascal. Một ký tự (kiểu char của pascal) được coi như một xâu có độ dài bằng 1 trong Python. Kiểu xâu (str) hay còn gọi là kiểu chuỗi không giới hạn độ dài. Tuy nhiên, Python cung cấp các hàm chr() và ord() để lấy vị trí của ký tự trong bảng mã Unicode và ngược lại. Chương trình dưới đây cho thấy mã của chữ Â trong bảng mã unicode là 194. print(ord('Â')) print(chr(194)) Kết quả: 194 Â Kiểu logic Kiểu logic (bool) trong Python có giá trị True hoặc False Ngoài ra, Python còn có các kiểu dữ liệu: complex; list, tuple, range; dict; set, frozenset; bytes, bytearray, memoryview. Trong phần sau của chương trình chúng ta sẽ tìm hiểu thêm. 9

§5. KHAI BÁO BIẾN Trong Python một biến không cần khai báo kiểu dữ liệu. Khi ta gán giá trị thì tự động Python sẽ tùy biến kiểu dữ liệu của biến cho phù hợp với dữ liệu được gán vào. Như vậy một biến có thể có nhiều kiểu dữ liệu tùy thuộc vào giá trị mà ta gán. Ví dụ trong cùng một chương trình khai báo như sau biến a sẽ tự động chuyển đổi kiểu để lưu giá trị được gán: a = 'Học Python' # biến a có kiểu xâu a=5 # biến a đổi sang kiểu nguyên a = 5.5 # biến a đổi sang kiểu thực a = True # biến a đổi sang kiểu logic Ta có thể ép kiểu cho biến bằng cách khai báo kiểu cho giá trị gán cho biến. Ví dụ: a = str(5) # a là một biến kiểu xâu b = int(5.5) # b là một biến kiểu nguyên c = float(5) # c là một biết kiểu thực Nếu thực hiện lệnh print(a+b) thì Python sẽ báo lỗi vì không thể cộng một xâu với một số nguyên. 10

§6. PHÉP TOÁN, BIỂU THỨC, CÂU LỆNH GÁN Phép toán Các phép toán số học Toán tử Ý nghĩa Ví dụ + Cộng x + y+ 2 - Trừ x - y- 2 x*y * Nhân x/y x%y / Chia x // y % Lấy phần dư của phép chia (mod) x**y (xy) // Lấy phần nguyên của phép chia (div) ** Lỹ thừa Ví dụ Example Các phép toán quan hệ x>y x<y Toán tử Ý nghĩa x == y x != y Operator Meaning x >= y > Lớn hơn x <= y < Nhỏ hơn == Bằng Ví dụ Example != Khác x and y >= Lớn hơn hoặc bằng x or y <= Nhỏ hơn hoặc bằng not x Các phép toán logic Toán tử Ý nghĩa Operator Meaning and Và: True khi cả hai đều True or Hoặc: True nếu một trong hai là True not Không: True khi False 11

Biểu thức số học Nội dung trình bày của phần này trong SGK Tin học 11 là phù hợp với Python. Riêng phép toán div, mod được thay thế bằng // và %. Hàm số học chuẩn Các hàm số học chuẩn được trình bày trong SGK được định nghĩa trong module math. Để sử dụng các hàm này trong Python chúng ta thực hiện lện import math. Ví dụ. Trước khi dùng hàm sqrt() ta phải thực thiện import module math như sau: import math # lúc này giá trị được gán cho b là 2. b = math.sqrt(a) Lưu ý: Hàm ln(x) được thay bằng math.log(x). Hàm sqr(x) không có mà thay bằng x**2. Hàm abs(x) có sẵn, không thuộc module math. Biểu thức quan hệ Nội dung trình bày của phần này trong SGK Tin học 11 là phù hợp với Python. Biểu thức logic Nội dung trình bày của phần này trong SGK Tin học 11 là phù hợp với Python. Câu lệnh gán 12

Câu lệnh gán trong Python dùng dấu = để gán giá trị bên phải cho biến bên trái. Các lệnh gán trong Python cụ thể như sau: Operator Example Equivalent to = x=5 x=5 += x += 5 x=x+5 -= x -= 5 x=x-5 *= x *= 5 x=x*5 /= x /= 5 x=x/5 %= x %= 5 x=x%5 //= x //= 5 x = x // 5 **= x **= 5 x = x ** 5 &= x &= 5 x=x&5 |= x |= 5 x=x|5 ^= x ^= 5 x=x^5 >>= x >>= 5 x = x >> 5 <<= x <<= 5 x = x << 5 13

§7. CÁC THỦ TỤC CHUẨN VÀO RA ĐƠN GIẢN Nhập dữ liệu vào từ bàn phím Trong Python để nhập liệu từ bàn phím ta dùng hàm input(). Giá trị nhập vào của hàm input() mặc định là kiểu xâu, do đó ta cần chuyển kiểu nếu như muốn lưu trữ giá trị nhập vào không phải kiểu chuỗi. Ví dụ: a = input() # nhập giá trị cho a (mặc định kiểu xâu) b = input('Nhập b: ') # nhập c (kiểu xâu) c = int(input('Nhap c: ')) # nhập giá trị cho c có kiểu số nguyên. Nhập giá trị và nhấn Enter lần lượt cho từng biến. Đưa dữ liệu ra màn hình Python sử dụng hàm print() để hiển thị dữ diệu ra màn hình. Ta cũng có thể in thông báo nhập dữ liệu ra màn hình ngay trong lệnh input(). Ví dụ (tr.30 SGK) Để nhập giá trị M từ bàn phím ta có thể code như sau: print(\"Nhập giá trị M: \") M = input() # sau khi nhập M sẽ được gán giá trị có kiểu str. Hoặc N = int(input(\"Nhập số nguyên dương N <= 100: \")) Ví dụ (tr.31 SGK) n = int(input(\"Lớp bạn có bao nhiêu người? \")) print(\"Vậy bạn có \", n-1, \" người bạn trong lớp.\") 14

print(\"Gõ Enter để kết thúc chương trình.\") input() Định dạng dữ liệu in ra màn hình Ví dụ. Tính tổng 2 số nguyên nhập từ bàn phím num1 = input('Nhập số thứ nhất: ') num2 = input('Nhập số thứ hai: ') s = int(num1) + int(num2) print('IN THÔNG BÁO KẾT QUẢ RA MÀN HÌNH:') print('Tổng của hai số vừa nhập là:', s) print('Cách 2: Tổng của {0} và {1} là {2}'.format(num1, num2, s)) print('Cách 2-2: Tổng của {1} và {0} là {2:.2f}'.format(num1, num2, s)) print(f\"Cách 3: Tổng của {num1} và {num2} là {s}\") print(f\"Cách 3-3: Tổng của {num1} và {num2} là {s:.2f}\") Các lệnh print() trong chương trình trên đều để hiển thị kết quả ra màn hình nhưng khác nhau về cách hiển thị. (hãy code và chạy thử chương trình để quan sát sự khác biệt). 15

§8. SOẠN THẢO, DỊCH, THỰC HIỆN VÀ HIỆU CHỈNH CHƯƠNG TRÌNH … Với Python, ta có thể dùng các phần mềm IDE hoặc tex editor để soạn thảo và hiệu chỉnh chương trình. Để code các chương trình đơn giản, không cần debug thì ta có thể dùng Notepad++ . (lưu ý chọn ngôn ngữ Python từ menu Language) Để được hỗ trợ debug chương trình và các chức năng khác ta dùng các IDE để soạn thảo. Có nhiều IDE hỗ trợ lập trình Python như PyCham, Spyder, Thonny,… Trong chương trình tin học phổ thông chúng ta nên dùng Thonny làm công cụ soạn thảo lập trình Python vì một số yếu tố sau: - Thonny có giao diện đơn giản, cấu hình nhẹ (trên cùng một máy khởi động nhanh hơn nhiều so với Pycham hay Spyder). - Hỗ trợ debug trực quan giúp ta dễ theo dõi và hình dung quá trình thực thi chương trình. 16

- Sử dụng thư viện / module chuẩn của Python phát hành (không bổ sung hay import sẵn module). Để thực thi chương trình (Run): Nhấn F5 Để Debug nhấn Ctrl+F5 Xem thêm thông tin về thonny tại https://thonny.org/ 17

BÀI TẬP VÀ THỰC HÀNH 1 Mục đích, yêu cầu Sử dụng Thonny là trình soạn thảo để thực hành. Nội dung Thực hiện theo các yêu cầu SGK. Lưu ý các phím tắt để chạy chương trình Python trên Thonny là: Chạy chương trình: F5 Kiểm thử - gỡ lỗi (debug): Ctrl+F5 Chương trình giải phương trình bậc 2. from math import sqrt print(\"Nhập a, b, c khác 0: \") a = float(input()) b = float(input()) c = float(input()) d = b**2 - 4*a*c if d < 0: print(\"Phương trình vô nghiệm.\") elif d == 0: print(\"Phương trình có 1 nghiệm: \", -b/2*a) else: x1 = (-b - sqrt(d))/(2*a) x2 = -b/a - x1 print(\"x1 = :\", x1) print(\"x2 = :\", x2) input() 18

CÂU HỎI VÀ BÀI TẬP Câu 4. Lưu ý trong Python biến sẽ tự thay đổi kiểu theo giá trị được gán vào. Câu 5. Python không cấp phát bộ nhớ theo khai báo biến (không cần khai báo kiểu dữ liệu cho biến) mà sẽ tự động tùy biến theo dữ liệu được gán. Câu 6. Lưu ý x3 trong Python có thể viết là x**3 Câu 7. Hàm sqrt() thuộc module math. Khi sử dụng trong chương trình phải thực hiện câu lệnh: from math import sqrt. Câu 9. from math import pi a = float(input(\"Nhập a: \")) s = (pi*a**2)/2 print(\"Diện tích nửa hình tròn là {:.4f}\". format(s)) # Có thể thay pi bằng 3.14, tuy nhiên dùng pi từ module math sẽ cho kết quả chính xác hơn. Câu 10. from math import sqrt h = float(input(\"Nhập độ cao h: \")) g = 9.8 v = sqrt(2*g*h) print(\"Vận tốc khi chạm đất = \", v) 19

CHƯƠNG III. CẤU TRÚC RẼ NHÁNH VÀ LẶP §9. CẤU TRÚC RẼ NHANH Rẽ nhánh Câu lệnh if if <điều kiện>: <câu lệnh> Hoặc if<điều kiện>: <câu hoặc khối lệnh> Ví dụ: if delta == 0: print(\"Phương trình vô nghiệm\") Câu lệnh if … else if<điều kiện>: <câu hoặc khối lệnh> else: <câu hoặc khối lệnh> Ví dụ: a= 9 if (a % 3) == 0: print(\"a chia hết cho 3\") 20

else: print(\"a không chia hết cho 3\") Câu lệnh if…elif…else if<điều kiện>: <câu hoặc khối lệnh> elif<điều kiện n>: <câu hoặc khối lệnh> else: <câu hoặc khối lệnh> Ví dụ: if d < 0: print(\"Phương trình vô nghiệm.\") elif d == 0: print(\"Phương trình có 1 nghiệm: \") else: print(\"Phương tình có 2 nghiệm phân biệt\") Câu lệnh ghép Câu lệnh ghép trong Python hay còn gọi là “khối lệnh” được thụt đầu dòng cùng một khoảng cách như nhau. (không cần dùng ngoặc hay từ khóa begin-end;) Ví dụ: if d < 0: print(\"Phương trình vô nghiệm.\") elif d == 0: print(\"Phương trình có 1 nghiệm: \") 21

else: print(\"Phương tình có 2 nghiệm phân biệt\") print(\"X1 = \", x1) print(\"X2 = \", x2) Một số ví dụ Ví dụ 1. from math import sqrt print(\"Nhập a, b, c khác 0: \") a = float(input()) b = float(input()) c = float(input()) d = b**2 - 4*a*c if d < 0: print(\"Phương trình vô nghiệm.\") elif d == 0: print(\"Phương trình có 1 nghiệm: \", -b/2*a) else: x1 = (-b - sqrt(d))/(2*a) x2 = -b/a - x1 print(\"x1 = :\", x1) print(\"x2 = :\", x2) input() Ví dụ 2. 22

n = int(input(\"Nhập năm: \")) if (n % 400 == 0) or ((n % 4 == 0) and (n%100 != 0)): print(\"Số ngày của năm\", n, \" là 366\") else: print(\"Số ngày của năm \", n, \"là 365\") 23

§10. CẤU TRÚC LẶP Lặp Nội dung trình bày của phần này trong SGK Tin học 11 là phù hợp với Python. Lặp với số lần biết trước Trước khi thực hiện ví dụ này cần cung cấp cho học sinh hàm range() để xác định một biến có các phần tử liên tục trong khoảng nào đó. Range đầy đủ có 3 tham số range(start,end,step). Trong đó star = khởi đầu dãy, end = kết thúc dãy, step = bước nhảy (nếu bỏ trống thì mặc định bước nhảy là 1). Ví dụ: range(100) là dãy từ 0 đến 99. range(2,10) là dãy liên tục từ 2 đến 9. range(2,10,2) là dãy các số 2,4,6,8. range(100,0,-1) là dãy liên tục từ 100 đến 1. Ví dụ 1 (SGK,Tr.44) # ví dụ Bài toán 1 a = int(input(\"Nhập a: \")) s= 0 for i in range(101): s += 1/(a + i) print(s) Ví dụ 2 (SGK,Tr.45) # ví dụ Bài toán 1 24

m = int(input(\"Nhập M: \")) n = int(input(\"Nhập N: \")) mn = range(m,n+1) s= 0 for i in mn: if ((i%3 == 0)or(i%5 == 0)): s += i print(s) Lặp với số lần chưa biết trước Câu lệnh while while <điều kiện >: <câu hoặc khối lệnh> Lưu ý: Để thoát khỏi một vòng lặp vô hạn trong Python ta sử dụng tổ hợp phím Ctrl + C. Ví dụ 1 (SGK,Tr.47) a = int(input(\"Nhập a: \")) s = 1/a n= 0 while not (1/(a+n) < 0.0001): n += 1 s += 1/(a+n) print(\"Tổng = \", s) Ví dụ 2 (SGK,Tr.48) 25

m = int(input(\"Nhập m: \")) n = int(input(\"Nhập n: \")) while m != n: if m > n: m -= n else: n -= m print(\"UCLN =\", m) 26

BÀI TẬP VÀ THỰC HÀNH 2 a = int(input(\"Nhập a: \")) b = int(input(\"Nhập b: \")) c = int(input(\"Nhập c: \")) if (a**2 == b**2+c**2)or(b**2 == a**2+c**2)or(c**2 == a**2+b**2): print(a, b, c, \"là bộ số pitago\") else: print(a, b, c, \"không phải là bộ số pitago\") CÂU HỎI VÀ BÀI TẬP Câu 1. So sánh 3 dạng câu lện if Câu 2. Nêu đặc điểm của khối lệnh trong Python? Câu 3. a = int(input(\"Nhập a: \")) s= 0 n =1 while n <=100: s += 1/(a + n) n +=1 print(s) Câu 4. a. print(\"Nhập x, y:\") x = float(input()) 27

y = float(input()) if (x**2 + y**2 <= 1): z = x**2 + y**2 elif (y >= x): z=x+ y else: z = 0.5 print(z) Câu 4.b. from math import sqrt print(\"Nhập tọa độ x, y:\") x = float(input()) y = float(input()) print(\"Nhập tọa độ tâm O:\") a = float(input()) b = float(input()) r = float(input(\"Nhập bán kính r:\")) d = sqrt((x-a)**2 + (y-b)**2) if r >= d: z = abs(x) + abs(y) else: z = x +y print(\"Z = \", z) Câu 5. a 28

n =1 Y =0 while n <= 50: Y += n/(n+1) n += 1 print(\"Y = {:.3f}\".format(Y)) Câu 5.b. Nên chuyển sang sau bài hàm để xây dựng và gọi hàm tính giai thừa. Câu 6. # gọi for x in range(37): for y in range(26): if (2*x + 4*y == 100) and (x+y == 36): print(\"Số gà - chó là:\", x, y) Câu 7. # dùng while để kiểm tra dữ liệu nhập cha = con = 0 while (cha - con < 25): cha = int(input(\"Nhập tuổi cha: \")) con = int(input(\"Nhập tuổi con: \")) count = 0 while not con*2 == cha: con +=1 cha +=1 count +=1 29

print(count) Câu 8. a = float(input(\"Nhập số tiền gửi: \")) b = float(input(\"Số tiền muốn nhận: \")) lai = 0.003 tg = 1 tong = a+a*lai while tong < b: tg += 1 tong += a*lai print(tg) 30

CHƯƠNG IV. KIỂU DỮ LIỆU CÓ CẤU TRÚC §11. KIỂU MẢNG Mảng là một cấu trúc dữ liệu cơ bản của tất cả các ngôn ngữ lập trình, nó là tập hợp các phần tử của một kiểu dữ liệu duy nhất, ví dụ mảng số nguyên, mảng xâu. Python không có cấu trúc dữ liệu mảng mà sử dụng kiểu “Danh sách” (list) thay cho mảng. Không giống như mảng, mỗi list có thể lưu trữ phần tử với bất kỳ kiểu dữ liệu nào và làm được mọi thứ mà mảng có thể làm. Chúng ta có thể lưu trữ số nguyên, số thập phân, chuỗi trong cùng một list. Vì thế, làm việc với list khá linh hoạt. List được biểu diễn bằng dãy các giá trị, được phân tách nhau bằng dấu phẩy, nằm trong dấu []. Các danh sách có thể chứa nhiều mục với kiểu khác nhau, nhưng thông thường là các mục có cùng kiểu. Kiểu list có dạng: a = [0,9,1,8,91,844,7] Các phần tử trong list có chỉ số bắt đầu từ 0. Ta có thể gọi 1 hay nhiều phần tử trong list bằng các đối số trong ngoặc []. Nâng cao: Ngoài việc xử lý mảng bằng list thuần túy ta có thể dùng module numpy. NumPy là thư viện nhằm phục vụ cho việc tính toán khoa học, hỗ trợ nhiều kiểu dữ liệu đa chiều giúp cho việc tính toán, lập trình, làm việc với các hệ cơ sở dữ liệu thuận tiện hơn. Kiểu mảng một chiều Trong Python, để xử lý dữ liệu mảng 1 chiều ta có thể dùng kiểu dữ liệu list. List trong Python không cần khai báo số phần tử, không cần khai 31

báo kiểu dữ liệu. (biến trong Python tự nhận biết kiểu dữ liệu được gán để tự động thay đổi kiểu cho phù hợp). Chương trình ví dụ trang 53 SGK: print(\"Nhập vào nhiệt độ của 7 ngày: \") t1 = float(input()) t2 = float(input()) t3 = float(input()) t4 = float(input()) t5 = float(input()) t6 = float(input()) t7 = float(input()) tb = (t1+t2+t3+t4+t5+t6+t7)/7 dem = 0 if t1 > tb: dem += 1 if t2 > tb: dem += 1 if t3 > tb: dem += 1 if t4 > tb: dem += 1 if t5 > tb: dem += 1 if t6 > tb: dem += 1 if t7 > tb: dem += 1 print(\"Nhiệt độ trung bình của tuần là: {:.2f}\". format(tb)) print(\"Số ngày có nhiệt độ cao hơn trung bình là: \", dem) Chương trình 2 # ví dụ trang 54 SGK n = int(input(\"Nhập số ngày: \")) a = [] for i in range(n): print(\"Nhập nhiệt độ ngày\", i+1) 32

ai = float(input()) a += [ai] tb = sum(a)/n dem = 0 for j in a: if j > tb: dem +=1 print(\"Nhiệt độ trung bình của tuần là: {:.2f}\". format(tb)) print(\"Số ngày có nhiệt độ cao hơn trung bình là: \", dem) Trong chương trình này ta đã sử dụng biết a có kiểu list để lưu nhiệt độ của các ngày (thay cho mảng một chiều truyền thống). Biến a không cần khai báo mà được khởi tạo bằng cách gán vào a một list rỗng []. 1.1 Khai báo Như đã được học ở các bài trước. Biến trong Python không cần khai báo mà sẽ tự thay đổi kiểu cho phù hợp với giá trị được gán vào. Một số lưu ý: Khởi tạo một biến kiểu list chỉ bằng cách gán vào biến một list rỗng []. Chỉ số các phần tử trong danh sách (list) bắt đầu từ 0 và chiều ngược lại bắt đầu từ -1. Có thể ghép các list với nhau bằng toán tử cộng +. Cần lưu ý học sinh phân biện chỉ số phần tử và giá trị phần tử của list. Ví dụ: manga = ['P', 'Y', 'T', 'H', 'O', 'N'] Phần tử: P Y T HON Chỉ số 012345 Chỉ số âm -6 -5 -4 -3 -2 -1 33

1.2 Một số ví dụ Ví dụ 1, trang 56 SGK n = int(input(\"Nhập số lượng phần tử của dãy số, N = : \")) a = [] for i in range(n): print(\"Nhập phần tử thứ \", i+1) ai = int(input()) a += [ai] Max = a[0] cs = 0 for j in a: if j > Max: Max = j cs_m = cs cs += 1 print(\"Giá trị lớn nhất của dãy là:\", Max) print(\"Chỉ số của Max là: \", cs_m) input() Ví dụ 2 # ví dụ 2, trang 57 SGK n = int(input(\"Nhập số lượng phần tử của dãy số, N = : \")) a = [] for i in range(n): print(\"Nhập phần tử thứ\", i+1) ai = int(input()) a += [ai] 34

i =n while (i > 1): for j in range(n-1): if a[j] > a[j+1]: tam = a[j] a[j] = a[j+1] a[j+1] = tam i -= 1 print(a) input() Trong Python có thể dùng hàm sort() để sắp xếp list mà không cần viết chương trình sắp xếp như trên. Viết lại chương trình trên như sau: # ví dụ 2, trang 57 SGK (cách 2) n = int(input(\"Nhập số lượng phần tử của dãy số, N = : \")) a = [] for i in range(n): print(\"Nhập phần tử thứ\", i+1) ai = int(input()) a += [ai] a.sort() print(a) input() 35

Ví dụ 3 # ví dụ 3, trang 59 SGK n = int(input(\"Nhập số lượng phần tử của dãy số, N = : \")) a = [] for i in range(n): print(\"Nhập phần tử thứ\", i+1) ai = int(input()) a += [ai] k = int(input(\"Nhập số k cần tìm : \")) # a.sort() # thêm dòng này để sắp xếp lại a nếu input chưa sắp xếp dau = 0 cuoi = n-1 tim = False while (dau <= cuoi) and (not tim): giua = (dau+cuoi)//2 if a[giua] == k: tim = True else: if a[giua] > k: cuoi = giua - 1 else: dau = giua + 1 if tim: print(\"Chỉ số tìm được là \", giua) else: print(\"Không tìm thấy\") input() 36

Python cung cấp các hàm in, index để xử lý tìm kiếm trong list. Ta có thể áp dụng cho ví dụ trên như sau: # ví dụ 3, trang 59 SGK (cách 2) n = int(input(\"Nhập số lượng phần tử của dãy số, N = : \")) a = [] for i in range(n): print(\"Nhập phần tử thứ\", i+1) ai = int(input()) a += [ai] k = int(input(\"Nhập số k cần tìm : \")) if k in a: cs = a.index(k) print(\" Chỉ số tìm được là:\", cs) else: print(\"Không tìm thấy\") input() Kiểu mảng hai chiều Mảng 2 chiều có thể hiểu là mảng trong mảng. Giống như mảng một chiều mà trong đó mỗi phần tử của mảng cũng là một mảng một chiều. Python cho phép tạo list trong list (Nested List). Vì vậy ta xử lý dữ liệu mảng 2 chiều bằng list như đã xử lý với mảng 1 chiều. Ví dụ: manga là một mảng 2 chiều có 2 dòng, 3 cột như sau: 123 456 37

Ta tạo manga bằng nested list như sau: manga = [[1,2,3],[4,5,6]] Lưu ý, để thay thế mảng 2 chiều thì các phần tử của list con phải có cùng số phần tử. Ví dụ 1. Tạo và in bảng nhân (SGK,Tr.61) ## tạo bảng 9 dòng x 10 cột a = [] for i in range(1,10): a.append([]) for j in range(1,11): x = i*j a[i-1].append(x) ## in for i in range(0, 9): for j in range(0, 10): print(\"%3d \" % a[i][j], end='') print() input() Ví dụ 2 (SGK,Tr.62) d=5 c=7 a = [] for i in range(d): a.append([]) for j in range(c): 38

x = int(input(\"Nhập phần tử a[{0}][{1}]: \".format(i,j))) a[i].append(x) k = int(input(\"Nhập k:\")) for i in range(d): for j in range(c): if a[i][j] < k: print(\"%3d \" % a[i][j], end='') else: print(\" \", end='') Các thao tác xử lý list Phần nay được bổ sung để cung cấp thêm các thao tác xử lý với dữ liệu kiểu mảng (list). a) Tạo list my_list = [] # list rỗng my_list = [1, 2, 3] # list số nguyên my_list = [1, \"Hello\", 3.4] # list hỗn hợp my_list = [\"mouse\", [8, 4, 6], ['a']] # list lồng hỗn hợp b) Truy xuất phần tử list mang_1c = ['h', 'ọ', 'c', 'p', 'y', 't', 'h', 'o', 'n'] mang_2c = [[1,2,3],[4,5,6]] print(mang_1c[2]) # Output: c print(mang_1c[-2]) # Output: o 39

print(mang_1c[:3]) # Output: ['h', 'ọ', 'c'] print(mang_1c[:-6]) # Output: ['h', 'ọ', 'c'] print(mang_1c[5:]) # Output: ['t', 'h', 'o', 'n'] print(mang_1c[5:9]) # Output: ['t', 'h', 'o', 'n'] print(mang_2c[1][2]) # Output: 6 print(mang_2c[1][0]) # Output: 4 c) Thêm, sửa, xóa phần tử list Thêm: sole = [1, 3, 5] sole.append(7) # Output: [1, 3, 5, 7] print(sole) # Output: [1, 3, 5, 7, 9, 11, 13] sole.extend([9, 11, 13]) # Output: [1, 3, 5, 7, 9, 11, 13, 15, 17] print(sole) sole = sole + [15,17] # Output: [2, 4, 6, 2, 4, 6, 2, 4, 6] print(sole) sochan = [2, 4, 6] sochan = sochan*3 print(sochan) Sửa: songuyen = [1,3,5,7,9,11] songuyen[3] = 19 # Output: [1, 3, 5, 19, 9, 11] print(songuyen) 40

songuyen[2:5] = [101,102,103] print(songuyen) # Output: [1, 3, 101, 102, 103, 11] Xóa: songuyen = [1,3,5,7,9,11] del songuyen[3] print(songuyen) # Output: [1, 3, 5, 9, 11] dayso = [1,3,5,7,9,11] del dayso[3:5] print(dayso) # Output: [1, 3, 5, 11] d) Các phương thức thường dùng với list my_list = [3, 8, 1, 6, 0, 8, 4] print(my_list.index(6)) # Output: 3 (vị trí) print(my_list.count(8)) # Output: 2 (có 2 phần tử = 8) my_list.sort() # Output: [0, 1, 3, 4, 6, 8, 8] print(my_list) my_list.reverse() # Output: [8, 8, 6, 4, 3, 1, 0] print(my_list) your_list = my_list[::-1] print(your_list) # Output: [0, 1, 3, 4, 6, 8, 8] your_list.clear() # Output: [] print(your_list) 41

BÀI TẬP VÀ THỰC HÀNH 3 Bài 1. import random as rd ## Dùng module sinh số ngẫu nhiên n = int(input(\"Nhập n: \")) a = [] for i in range(n): x = rd.randint(-300,300) a.append(x) print(a) k = int(input(\"Nhập số nguyên k: \")) s= 0 for i in a: if i%k == 0: s += i print(\"Tổng cần tính là: \", s) Bài 2. n = int(input(\"Nhập n: \")) a = [] for i in range(n): x = int(input(\"Nhập phần tử a{0}: \".format(i))) a.append(x) print(a) j =1 for i in range(0,n): if a[i] > a[j]: j = i 42

print(\"Phần tử có giá trị lớn nhất là: \", a[j]) print(\"Chỉ số phần tử Max là: \", j) Cách khác, sử dụng hàm có sẵn của Python để tìm max và chỉ số: n = int(input(\"Nhập n: \")) a = [] for i in range(n): x = int(input(\"Nhập phần tử a{0}: \".format(i))) a.append(x) print(a) mx = max(a) cs = a.index(mx) print(\"Phần tử có giá trị lớn nhất là: \", mx) print(\"Chỉ số phần tử Max là: \", cs) input() 43