Sách giáo khoa tin học 11 được biên soạn lại theo ngôn ngữ lập trình Python Có bổ sung thêm một số kiên thức Python phù hợp với chuẩn kiến thức, kỹ năng học sinh thpt Các bài tập được viết lại bằng NNLT Python
BIÊN SOẠN THEO SGK TIN HỌC 11 NHÀ XUẤT BẢN GIÁO DỤC Python TIN HỌC Dương Thành Long - 2021Python ? Python ngơn ngữ lập trình bậc cao Guido van Rossum tạo lần đầu 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 nhúng vào ứng dụng giao tiếp kịch (scripting interface) Thế mạnh Python 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 ngơn ngữ lập trình phổ biến rộng rãi châu Âu, châu Mỹ coi ngôn ngữ lập trình trường học Python dùng để phát triển ứng dụng web, game, khoa học liệu (tính tốn, phân tích, khai thác liệu), máy học trí tuệ nhân tạo, … Tài liệu dùng kèm Sách giáo khoa Tin học 11 Bộ Giáo dục Đào tạo (NXB Giáo Dục - Tái lần thứ 4, năm 2009) Tài liệu trình bày theo cấu trúc Sách giáo khoa Tin học 11 Các ví dụ tập, thực hành sách giáo khoa trình bày lại ngơn ngữ lập trình Python cách chi tiết, đầy đủ Bổ sung 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 dạy học chương trình Tin học 11 MỤC LỤC TRƯỚC KHI BẮT ĐẦU Hướng dẫn đọc Sách dùng kèm với sách giáo khoa Tin học 11 Bộ Giáo dục Đào tạo, Nhà xuất Giáo dục Việt Năm tái lần thứ 2, năm 2009 (SGK) Những phần có tiêu đề, khơng có nội dung nghĩa sử dụng nguyên văn nội dung trình bày SGK (các nội dung trình bày SGK phù hợp với Python) Nội dung sách bám sát theo cấu trúc SGK Vì sách trình bày giải vấn đề SGK nêu - phần lập trình ngơn ngữ lập trình Để lập trình làm chủ ngơn ngữ lập trình Python cần nghiên cứu thêm tài liệu khác (có giới thiệu cuối sách) Cài Python Tải từ https://www.python.org/downloads/ tiến hành cài đặt (chọn phiên 3.8 trở lên) Sau hồn tất cài đặt kiểm tra: Nhấn phím Windows gõ cmd → Enter Gõ: python version → Enter Lúc hiển thị phiên Python cài đặt máy tính Cài chương trình soạn thảo Để lập trình theo ngơn ngữ ta cần có chương trình cho phép gõ câu lệnh lệnh thực thi câu lệnh Trong 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 số gợi ý: Notepad++ 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 Thonny Tải đây: https://thonny.org/ Thonny có giao diện đơn giản, cấu hình nhẹ (trên máy khởi động nhanh nhiều so với Pycham hay Spyder) Hỗ trợ debug trực quan giúp ta dễ theo dõi hình dung trình thực thi chương trình Sử dụng thư viện / module chuẩn Python phát hành (không bổ sung hay import sẵn module) PyCharm Educational Edition Tải đây: https://www.jetbrains.com/pycharm-edu/ PyCharm mơi trường phát triển tích hợp đa tảng (IDE) phát triển Jet Brains thiết kế đặc biệt cho Python Tuy nhiên PyCharm khởi động nặng nề yêu cầu làm việc với project Như vậy, tùy nhu cầu sử dụng kỹ lập trình mà lựa chọn trình soạn thảo cho phù hợp Đối với người bắt đầu học Python nên dùng Thonny để thực hành Chương 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 Khái niệm lập trình Lập trình việc sử dụng cấu trúc liệu lệnh ngôn ngữ lập trình cụ thể để mơ tả liệu diễn đạt thao tác thuật toán Khái niệm phân loại ngơn ngữ lập trình Là ngơn ngữ dùng để diễn tả thuật tốn cho máy tính hiểu thực Có loại NNLT: - Ngơn ngữ máy : Các lệnh mã hóa kí hiệu – Chương trình viết ngơn ngữ máy nạp vào nhớ thực - Hợp ngữ: sử dụng từ viết tắt tiếng Anh để diễn tả câu lệnh - Ngôn ngữ bậc cao : Các lệnh mã hóa ngơn ngữ gần với ngơn ngữ Tiếng Anh Chương trình viết ngơn ngữ bậc cao phải chuyển đổi thành chương trình ngơn ngữ máy thực Phải sử dụng chương trình dịch để chuyển đổi Lập trình ngơn ngữ bậc cao dễ viết lệnh mã hóa gần với ngơn ngữ tự nhiên Lập trình ngơn ngữ máy khó, thường chun gia lập trình lập trình Chương trình dịch a Biên dịch (compiler) : Bước : Duyệt, phát lỗi, kiểm tra tính đắn lệnh chương trình nguồn Bước : Dịch tồn chương trình nguồn thành chương trình ngơn ngữ máy (Thuận tiện cho chương trình ổn định cần thực nhiều lần) b Thông dịch (interpreter): Bước : Kiểm tra tính đắn lệnh chương trình nguồn Bước : Chuyển lệnh thành ngơn ngữ máy Bước : Thực câu lệnh vừa chuyển đổi (phù hợp với môt trường đối thoại người máy) Lưu ý: nhiệm vụ quan trọng chương trình dịch phát lỗi cú pháp chương trình nguồn §2 CÁC THÀNH PHẦN CỦA NGƠN NGỮ LẬP TRÌNH Các thành phần Mỗi ngơn ngữ lập trình thường có ba thành phần bản: bảng chữ cái, cú pháp ngữ nghĩa a Bảng chữ cái: Là tập kí hiệu dùng để viết chương trình Python sử dụng mặc định mảng mã Unicode thay ASCII Pascal Như vậy, khái niệm “bảng chữ cái” Python ký tự bảng mã Unicode Tên biến đối tượng chương trình Python có để đặt tiếng Việt có dấu b Cú pháp: qui tắc dùng để viết chương trình cho ta biết cách viết chương trình hợp lệ c Ngữ nghĩa: xác định ý nghĩa thao tác cần phải thực hiên , ứng với tổ hợp kí tự dựa vào ngữ cảnh - Cú pháp cho biết cách viết chương trình hợp lệ , ngữ nghĩa xác định ý nghĩa tổ hợp kí tự chương trình - Lỗi cú pháp chương trình dịch phát thơng báo cho người lập chương trình biết , có chương trình khơng cịn lỗi cú pháp dịch sang ngơn ngữ máy - Lỗi ngữ nghĩa phát thực chương trình liệu cụ thể Một số khái niệm a) Tên Trong Python, Tên đối tượng đặt ký tự thường (a- z), ký tự in hoa (A-Z), chữ số (0-9) dấu gạch _ Tên đối tượng không bắt đầu chữ số, không dùng ký tự đặc biệt !, @, #, … phân biệt chữ hoa, chữ thường Tên Python không giới hạn độ dài Tuy nhiên nên đặt tên có tính gợi nhớ đối tượng Ví dụ đặt tên biến để lưu giá trị đếm số lần thực thi nên đặt “dem” hay “count”,… Tên dành riêng Tên dành riêng hiểu Từ khóa (keyword) Python Từ khóa định nghĩa sẵn để sử dụng Chúng ta dùng từ khóa để đặt tên biến, tên hàm đối tượng chương trình Tất từ khóa Python viết thường, trừ 03 từ khóa: True, False, None Ví dụ số từ khóa: True, False, await, else, import, pass, break, except, in, and, or, … Thực tế khơng cần nhớ từ khóa gõ trình soạn thảo có gợi ý từ khóa (tránh đặt tên đối tượng trùng với từ khóa gợi ý) đặt trùng tên từ khóa chạy chương trình báo lỗi Tên chuẩn Tên chuẩn tên định nghĩa (tên module) thuộc thư viện chuẩn Python Ví dụ: math (module hàm tốn học thông dụng sin, cos, tan, sqr, sqrt, …) b) Biến Biến Biến đại lượng (đối tượng) đặt tên, dùng để lưu trữ giá trị giá trị dược thay đổi trình thực chương trình Biến Python khơng cần khai báo trước, không thiết phải khai báo kiểu liệu Khi đặt tên gán giá trị Python tự động nhận dạng tùy biến theo kiểu liệu gán Hằng Hằng loại biến đặc biệt, giá trị không đổi suốt chương trình sau lần gán giá trị Tên viết hoàn toàn CHỮ HOA dấu gạch (nếu cần) c) Chú thích Chú thích Python sử dụng cách sau: # dùng dấu thăng đầu dịng thích dịng ''' dùng ba dấu nháy đơn nháy kép thích nhiều dịng ''' Chương 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ó Ta thay phần khai báo ghi chương trình Các thành phần chương trình 2.1 Phần khai báo Phần thay dịng ghi tên chương trình Ví dụ: # giải phương trình bậc Python khơng cần thiết phải khai báo biến, phần khai báo mà dùng đến đối tượng khai báo đối tượng Ví dụ: Khai báo thư viện (module) hàm toán học: import math # khai báo dùng thư viện hàm toán học Khai báo biến: a= Khai báo hằng: TONG = 100 2.2 Phần thân chương trình Phần thân chương trình Python câu lệnh thực thi Ví dụ chương trình đơn giản Ví dụ 1: print(‘Xin chào bạn!’) 10 f.write("Ghi dong chu vao file ra.txt") Lưu ý: Để ghi liệu vào file text ta chuyển kiểu xâu trước ghi (nếu liệu số) Chương trình sau báo lỗi: a = "Ghi dong chu vao file ra.txt" b = 994 with open("ra.txt",'w') as f: f.write(a + '\n') f.write(b) Ta sửa lỗi sau: a = "Ghi dong chu vao file ra.txt" b = 994 with open("ra.txt",'w') as f: f.write(a + '\n') f.write(str(b)) §16 VÍ DỤ LÀM VIỆC VỚI TỆP Ví dụ from math import sqrt with open("TRAI.txt") as f: a = f.read() a = a.split(' ') _len = len(a) tr = for i in range(0,_len,2): d = sqrt(int(a[i])**2+int(a[i+1])**2) _d = round(d,2) tr += print(f"Khoảng cách đến trại {tr} là: {_d}") Ví dụ 64 with open("RESIST.DAT") as f1: tem = f1.read() #print(tem) a = tem.split('\n') # cắt xâu theo dòng để tạo list lena = len(a) for i in range(lena): #cắt xâu theo khoảng trắng tạo list: a[i] = a[i].split(' ') #print(a) lenai = len(a[1]) with open('RESIST.EQU','w') as f2: for i in range(lena): for j in range(lenai): a[i][j] = int(a[i][j]) # chuyển str thành int để tính tốn r1 = a[i][0] r2 = a[i][1] r3 = a[i][2] r01 = r1*r2*r3/(r1*r2+r1*r3+r2*r3) r02 = r1*r2/(r1+r3) +r2 r03 = r1*r3/(r1+r3) +r2 r04 = r2*r3/(r2+r3) +r1 r05 = r1+r2+r3 # ghi vào file f2.write(str(r01)+' ') f2.write(str(r02)+' ') f2.write(str(r03)+' ') f2.write(str(r04)+' ') f2.write(str(r05)+'\n') print('Hoàn thành ghi liệu vào file!') CHƯƠNG VI CHƯƠNG TRÌNH CON VÀ LẬP TRÌNH CĨ CẤU TRÚC §17 CHƯƠNG TRÌNH CON VÀ PHÂN LOẠI Khái niệm chương trình Chương trình dãy lệnh mơ tả số thao tác định thực (được gọi) từ nhiều vị trí chương trình Chương trình Python gồm packpage, module hàm xây dựng sẵn (build-in) người lập trình tự xây dựng Packpage tập hợp nhiều module, module tập hợp nhiều hàm (một packpage có module, module có hàm – khơng làm thế) Module Python tương tự thư viện Pascal Module file chứa hàm liên quan Ví dụ, module math file có tên math.py chứa hàm 65 toán học chuẩn; module random file random.py chứa hàm sinh liệu ngẫu nhiên Ý nghĩa: Giải toán lớn phức tạp thành toán nhỏ đơn giản Lợi ích sử dụng chương trình con: + Tránh lập lại dãy lệnh Khi cần dùng gọi lại chương trình + Hỗ trợ việc thực chương trình lớn phức tạp + Phục vụ q trình trừu tượng hố Người lập trình sử dụng kết chương trình mà ko cần quan tâm đến chương trình cài đặt + Mở rộng khả ngơn ngữ lập trình thành thư viện cho nhiều người dùng + Thuận tiện cho phát triển nâng cấp chương trình Chương trình ví dụ trang 92 SGK Thay nhập số từ bàn phím, ta điều chỉnh yêu cầu đề để ứng dụng kỹ thuật thao tác với file, string, list sau: Cho file input.txt có dịng, dịng gồm biến: a,b,c,d; dòng gồm biến: m,n,p,q Các biến cách dấu phẩy def luythua(a,b): return a**b with open('input.txt') as f: l1 = f.readline().replace('\n','') l2 = f.readline().replace('\n','') a = l1.split(',') b = l2.split(',') tong = for i in range(len(a)): a[i] = float(a[i]) b[i] = int(b[i]) tong += luythua(a[i],b[i]) print(tong) Phân loại cấu trúc chương trình 2.1 Phân loại Python khơng phân biệt thủ tục với hàm Pascal 66 Trong Python phân làm loại chương trình (1) chương trình xây dựng sẵn (build-in) (2) chương trình người lập trình tự xây dựng Về cấu trúc, hàm Python chia làm loại (1) hàm thông thường, đặt tên (2) “hàm ẩn danh”, khơng có tên (hàm lambda) Về quy mơ ta phân thành loại: hàm, module packpage 2.2 Cấu trúc Cấu trúc hàm Python: def (): """docstring (ghi chức hàm/ hàm khơng thiết phải có docstring)""" Hàm ẩn danh = lambda < tham biến>: Ví dụ Hàm tính tổng số def tong1(x,y,z): t=x+y+z return t def tong2(x,y,z): return x + y + z tong3 = lambda x,y,z: x + y + z a=5 b=6 c=7 print(tong1(a,b,c)) print(tong2(a,b,c)) print(tong3(a,b,c)) Kết quả: lệnh print có kết 18 2.3 Thực chương trình Đối với hàm: () 67 Những hàm khơng có tham số khơng cần truyền tham số Ví dụ: sum(a,b) abs(a) # tính tổng a, b # lấy giá trị tuyệt đối a Đối với module import # from import # from import * # import tất hàm Ví dụ, để sử dụng hàm khai bậc hai số ta phải dùng hàm sqrt() từ module math, ta khai báo trước sử dụng sau: import math # from math import sqrt Đối với Packpage Ví dụ tạo sử dụng package với module/hàm module: Tạo thư mục import os os.mkdir("dnx") Đặt module khác package: module1.py def inra(): print("Được in từ hàm inra module 1") module9.py def msg(): print("Dòng in từ hàm msg module 9") def msg2(): print("Dòng in từ hàm msg2 module 9") Tạo init .py file # file init trống import dnx.module1 import dnx.module9 68 Import package gọi hàm từ module from dnx import * module1.inra() module9.msg2() module9.msg() Kết là: Được in từ hàm inra module Dòng in từ hàm msg2 module Dòng in từ hàm msg module Lưu ý thêm: Ta viết hàm trực tiếp file init py 69 §18 VÍ DỤ CÁCH VIẾT VÀ SỬ DỤNG CHƯƠNG TRÌNH CON Chương trình vẽ hình chữ nhật (SGK,Tr.96) def vehcn(): print('*'*50) for i in range(10): print('*'+' '*48+'*') print('*'*50) vehcn()# gọi hàm Chương trình vẽ hình chữ nhật có tham số (SGK.Tr.98) def vehcn(a,b): print('*'*a) for i in range(b): print('*' + ' '*(a-2) + '*') print('*'*a) a = int(input('Nhập chiều dài: ')) b = int(input('Nhập chiều rộng: ')) vehcn(a,b) Chương trình hốn đổi biến (SGK Tr.100) a = int(input('Nhập a: ')) b = int(input('Nhập b: ')) print('Trước đổi:', a, b) a,b = b,a print('Sau đổi :', a, b) Ví dụ (SGK, Tr.101) a = int(input('Nhập tử : ')) b = int(input('Nhập mẫu: ')) def ucln(a,b): while b != 0: t=a%b a=b b=t return a x = ucln(a,b) if x >1: a = a // x 70 b = b // x print(f'Phân số rút gọn {a}/{b}') Ví dụ (SGK, Tr.102) # Python cung cấp sẵn hàm min() a = int(input('Nhập a: ')) b = int(input('Nhập b: ')) c = int(input('Nhập c: ')) m = min(a,b,c) print(f'Giá trị nhỏ {a}, {b}, {c} {m}') 71 BÀI TẬP VÀ THỰC HÀNH Mục đích, yêu cầu Bỏ yêu cầu chữ chạy hình Nội dung Python cung cấp sẵn phương thức đảo ngược xâu, list Ví dụ: a = "HỌC LẬP TRÌNH PYTHON" b = a[::-1] print(a) print(b) Kết quả: HỌC LẬP TRÌNH PYTHON NOHTYP HNÌRT PẬL CỌH Viết chạy thử ví dụ thao tác xử lý xâu phần §12.2 72 BÀI TẬP VÀ THỰC HÀNH 7&8 Mục đích, yêu cầu Nội dung Chương trình SGK, Tr.106 from math import sqrt def nhapdiem(): ma = [] for i in range(3): ma.append([]) x = int(input('Nhập x: ')) y = int(input('Nhập y: ')) ma[i].append(x) ma[i].append(y) return ma def kh_cach(a,b): return sqrt((a[0]-b[0])**2 + (a[1]-b[1])**2) def daicanh(x): a = kh_cach(x[0],x[1]) b = kh_cach(x[1],x[2]) c = kh_cach(x[0],x[2]) return a, b, c def chuvi(x): cv = for i in daicanh(x): cv += i return cv def dientich(x): p = chuvi(x)/2 dc = daicanh(x) s = sqrt(p*(p-dc[0])*(p-dc[1])*(p-dc[2])) return s def tinhchat(x): tc = '' d = daicanh(x) if (d[0] == d[1]) and (d[1] == d[2]): tc = 'Tam giác đều' 73 elif (d[0] == d[1]) or (d[1] == d[2]): tc = 'cân' elif (d[0]**2+ d[1]**2 == d[2]**2) or (d[0]**2+ d[2]**2 == d[1]**2) or (d[1]**2+ d[2]**2 == d[0]**2): tc = 'Tam giác vuông' else: tc = 'Tam giác thường' return tc tg = nhapdiem() print('Tọa độ đỉnh tam giác là: ', tg) print('Tính chất:', tinhchat(tg)) print('Chu vi tam giác = ', round(chuvi(tg),3)) print('Diện tích tam giác =', round(dientich(tg),3)) input() Câu c, SGK, Tr.108 from math import sqrt with open('TAMGIAC.DAT') as f: n = int(f.readline()) a = f.read() a = a.split('\n') for i in range(n): a[i] = a[i].split(' ') for j in range(6): a[i][j] = int(a[i][j]) def kh_cach(xa,ya,xb,yb): return sqrt((xa-xb)**2 + (ya-yb)**2) def daicanh(x): a = kh_cach(x[0],x[2],x[1],x[3]) b = kh_cach(x[2],x[4],x[3],x[5]) c = kh_cach(x[0],x[2],x[3],x[5]) return a, b, c def chuvi(x): cv = for i in daicanh(x): cv += i return cv def dientich(x): p = chuvi(x)/2 dc = daicanh(x) 74 s = sqrt(p*(p-dc[0])*(p-dc[1])*(p-dc[2])) return s def tinhchat(x): tc = '' d = daicanh(x) if (d[0] == d[1]) and (d[1] == d[2]): tc = 'đều' elif (d[0] == d[1]) or (d[1] == d[2]): tc = 'cân' elif (d[0]**2+ d[1]**2 == d[2]**2) or (d[0]**2+ d[2]**2 == d[1]**2) or (d[1]**2+ d[2]**2 == d[0]**2): tc = 'vuông' else: tc = 'thường' return tc deu = can = vuong = thuong = for i in range(n): tg = a[i] t = tinhchat(tg) if t == 'đều': deu += elif t == 'cân': can += elif t == 'vuông': vuong += else: thuong += with open('TAMGIAC.OUT','w') as fo: fo.writelines(str(deu)) fo.write('\n') fo.write(str(can)) fo.write('\n') fo.write(str(vuong)) fo.write('\n') fo.write(str(thuong)) 75 CÂU HỎI VÀ BÀI TẬP Câu Python không phân biệt Câu Hàm in hình xâu Câu Hàm trả nhiều giá trị Câu from math import sqrt def ucln(a,b): while b > 0: t=a%b a=b b=t return a def bcnn(a,b): t = a*b // ucln(a,b) return t a = int(input('Nhập a: ')) b = int(input('Nhập b: ')) print(f'Ước chung lớn {a} {b} {ucln(a,b)}') print(f'Bội chung nhỏ {a} {b} {bcnn(a,b)}') 76 77 Tìm hiểu thêm Python Nội dung trình bày tài liệu phần bám sát Sách giáo khoa Tin học 11 nhằm phục vụ thầy cô giáo bạn học sinh lớp 11 chuyển đổi ngơn ngữ lập trình, tiếp cận chương trình Giáo dục phổ thơng 2018 Vì vậy, để có hiểu thấu đáo sử dụng Python lập trình cần tiếp tục tìm hiểu tài liệu khác Tài liệu tiếng Anh: https://www.python.org/ https://www.w3schools.com/python/default.asp https://www.programiz.com/python-programming Các tài liệu tác giả có website: www.songlamtech.com 78