1. Trang chủ
  2. » Giáo án - Bài giảng

SGK tin học 11 using python3

87 92 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Biên tập Nguyễn Tiến Đức Sách giáo khoa Tin học lớp 11 (Phiên dùng NNLT Python 3) Hịa Bình, tháng 10 năm 2020 i MỤC LỤC Chương 1: Một số khái niệm lập trình ngơn ngữ lập trình Bài Khái niệm lập trình a) Thông dịch b) Biên dịch Bài đọc thêm Bài Các thành phần ngơn ngữ lập trình Các thành phần Một số khái niệm Câu hỏi tập Bài đọc thêm Chương 2: Chương trình đơn giản Bài Cấu trúc chương trình Cấu trúc chung Các thành phần chương trình Ví dụ chương trình đơn giản Bài Một số kiểu liệu chuẩn 11 Kiểu số 11 Kiểu logic 11 Bài Khai báo biến 12 Bài Phép toán, biểu thức, lệnh gán 13 Phép toán 13 Biểu thức số học 14 Hàm số học chuẩn 15 Biểu thức quan hệ 15 Biểu thức lôgic 16 Câu lệnh gán 17 Bài Các hàm chuẩn vào/ra đơn giản 18 Nhập liệu vào từ bàn phím 18 Đưa liệu hình 19 Bài Soạn thảo, dịch, thực hiệu chỉnh chương trình 22 Bài tập thực hành 26 Mục đích, yêu cầu 26 Nội dung 26 Câu hỏi tập 27 Chương Cấu trúc rẽ nhánh lặp 28 Bài Cấu trúc rẽ nhánh 28 Rẽ nhánh 28 ii Câu lệnh if 29 Câu lệnh ghép 30 Một số ví dụ 31 Bài 10 Cấu trúc lặp 32 Lặp 32 Lặp có số lần lặp biết trước câu lệnh lặp for 32 Lặp với số lần chưa biết trước câu lệnh lặp while 34 Bài tập thực hành 37 Mục đích, yêu cầu 37 Nội dung 37 Câu hỏi tập 38 Chương Kiểu liệu có cấu trúc 40 Bài 11 Kiểu danh sách 40 Danh sách chiều 40 Kiểu mảng hai chiều 48 Bài tập thực hành 51 Mục đích, yêu cầu 51 Nội dung 51 Bài tập thực hành 53 Mục đích, yêu cầu 53 Nội dung 53 Bài 12 Kiểu xâu ký tự 55 Khai báo 56 Các thao tác xâu 56 3) Một số ví dụ 61 Bài tập thực hành 64 Mục đích, yêu cầu 64 Nội dung 64 Câu hỏi tập 65 Chương Tệp thao tác với tệp 67 Bài 14 Kiểu liệu tệp 67 Vai trò kiểu tệp 67 Phân loại tệp thao tác với tệp 67 Bài 15 Kiểu tệp 68 Khai báo 68 Thao tác với tệp 68 Bài 16 Ví dụ làm việc với tệp 70 Ví dụ 70 iii Ví dụ 71 Câu hỏi tập 72 Chương Hàm lập trình có cấu trúc 73 Bài 17 Chương trình phân loại 73 Khái niệm chương trình 73 Phân loại cấu trúc chương trình 75 Bài 18 Ví dụ cách định nghĩa sử dụng hàm 77 Cách định nghĩa hàm 77 Một số ví dụ hàm 77 Vấn đề tham số hàm Python 79 Bài tập thực hành 81 Mục đích, yêu cầu 81 Nội dung 81 Bài tập thực hành 82 Mục đích, yêu cầu 82 Nội dung 82 Chương 1: Một số khái niệm lập trình ngơn ngữ lập trình Bài Khái niệm lập trình Như ta biết, tốn có thuật tốn giải máy tính điện tử Khi giải tốn máy tính điện tử, sau bước xác định toán xây dựng lựa chọn thuật tốn khả thi bước lập trình Lập trình sử dụng cấu trúc liệu câu lệnh ngơn ngữ lập trình cụ thể để mơ tả liệu diễn đạt thao tác thuật tốn Chương trình viết ngơn ngữ lập trình bậc cao nói chung khơng phụ thuộc vào loại máy, nghĩa chương trình thực nhiều loại máy tính khác Chương trình viết ngơn ngữ máy nạp trực tiếp vào nhớ thực ngay, cịn chương trình viết ngơn ngữ lập trình bậc cao phải chuyển đổi thành chương trình ngơn ngữ máy thực Chương trình đặc biệt có chức chuyển đổi chương trình viết ngơn ngữ lập trình bậc cao thành chương trình thực máy tính cụ thể gọi chương trình dịch Chương trình dịch nhận đầu vào chương trình viết ngơn ngữ lập trình bậc cao (chương trình nguồn), thực chuyển đổi sang ngơn ngữ máy (chương trình đích) Hình 1.1 - Minh họa q trình chuyển đổi chương trình nguồn thành chương trình đích Xét ví dụ, bạn biết tiếng Việt cần giới thiệu trường cho đồn khách đến từ nước Mĩ, biết tiếng Anh Có hai cách để bạn thực điều Cách thứ nhất: Bạn nói tiếng Việt người phiên dịch giúp bạn dịch sang tiếng Anh Sau câu vài câu giới thiệu trọn ý, người phiên dịch dịch sang tiếng Anh cho đồn khách Sau đó, bạn lại giới thiệu tiếp người phiên dịch lại dịch tiếp Việc giới thiệu bạn việc dịch người phiên dịch luân phiên bạn kết thúc nội dung giới thiệu Cách dịch trực tiếp gọi thông dịch Cách thứ hai: Bạn soạn nội dung giới thiệu giấy, người phiên dịch dịch tồn nội dung sang tiếng Anh đọc trao văn dịch cho đoàn khách đọc Như vậy, việc dịch thực sau nội dung giới thiệu hồn tất Hai cơng việc thực hai khoảng thời gian độc lập, tách biệt Cách dịch gọi biên dịch Sau kết thúc, với cách thứ khơng có văn để lưu trữ, cịn với cách thứ hai có hai giới thiệu tiếng Việt tiếng Anh lưu trữ để dùng lại sau Tương tự vậy, chương trình dịch có hai loại thơng dịch biên dịch a) Thông dịch Thông dịch (interpreter) thực cách lặp lại dãy bước sau: • Kiểm tra tính đắn câu lệnh chương trình nguồn; • Chuyển đổi câu lệnh thành hay nhiều câu lệnh tương ứng ngơn ngữ máy; • Thực câu lệnh vừa chuyển đổi Như vậy, trình dịch thực câu lệnh luân phiên Các chương trình thơng dịch dịch thực câu lệnh Loại chương trình dịch đặc biệt thích hợp cho môi trường đối thoại người hệ thống Tuy nhiên, câu lệnh phải thực lần phải dịch nhiêu lần Các ngôn ngữ khai thác hệ quản trị sở liệu, ngôn ngữ đối thoại với hệ điều hành, sử dụng trình thơng dịch b) Biên dịch Biên dịch (compiler) thực qua hai bước: • Duyệt, kiểm tra, phát lỗi, kiểm tra tính đắn câu lệnh chương trình nguồn; • Dịch tồn chương trình nguồn thành chương trình đích thực máy lưu trữ để sử dụng lại cần thiết Như vậy, thơng dịch, khơng có chương trình đích để lưu trữ, biên dịch chương trình nguồn chương trình đích lưu trữ lại để sử dụng vềsau Thơng thường, với chương trình dịch cịn có số dịch vụ liên quan biên soạn, lưu trữ, tìm kiếm, cho biết kết trung gian, Toàn dịch vụ tạo thành môi trường làm việc ngôn ngữ lập trình cụ thể Ví dụ, Turbo Pascal 7.0, Free Pascal1.2, Visual Pascal 2.1, ngôn ngữ Pascal, Turbo C++, Visual C++, ngôn ngữ C++ Các mơi trường lập trình khác dịch vụ mà cung cấp, đặc biệt dịch vụ nâng cấp, tăng cường khả cho ngôn ngữ lập trình Bài đọc thêm Có thể sử dụng viết từ địa : https://vi.wikipedia.org/wiki/Ngôn ngữ lập trình Bài Các thành phần 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ảng chữ cái, cú pháp ngữ nghĩa a) Bảng chữ Là tập kí tự dùng để viết chương trình Khơng phép dùng kí tự ngồi kí tự quy định bảng chữ Trong Python, bảng chữ bao gồm kí tự: • Các chữ in thường chữ in hoa bảng chữ tiếng Anh: a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z • 10 chữ số thập phân Ả Rập: • Các kí tự đặc biệt: + ; # * ^ / $ = @ & < ( Dấu cách (mã ASCII 32) > ) [ { ] } : , ' _ Bảng chữ ngơn ngữ lập trình nói chung khơng khác nhiều Ví dụ, bảng chữ ngơn ngữ lập trình Python khác Pascal có sử dụng thêm kí tự dấu nháy kép ("), nháy ba ('''), dấu sổ ngược (\), dấu chấm than (!) b) Cú pháp Là quy tắc để viết chương trình Dựa vào chúng, người lập trình chương trình dịch biết tổ hợp kí tự bảng chữ hợp lệ tổ hợp khơng hợp lệ Nhờ đó, mơ tả xác thuật tốn để máy thực 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 Ví dụ Phần lớn ngơn ngữ lập trình sử dụng dấu cộng (+) để phép cộng Xét biểuthức: A + B I + J (1) (2) Giả thiết A, B đại lượng nhận giá trị thực I, J đại lượng nhận giá trị chuỗi ký tự Khi dấu "+" biểu thức (1) hiểu cộng hai số thực, dấu "+" biểu thức (2) hiểu phép nối hai chuỗi Như vậy, ngữ nghĩa dấu "+" hai ngữ cảnh khác khác Tóm lại, cú pháp cho biết cách viết chương trình hợp lệ, cịn ngữ nghĩa xác định ý nghĩa tổ hợp kí tự chương trình Các lỗi cú pháp chương trình dịch phát thơng báo cho người lập trình biết Chỉ có chương trình khơng cịn lỗi cú pháp dịch sang ngơn ngữ máy Các lỗi ngữ nghĩa khó phát Phần lớn 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 (Identifiers) Mọi đối tượng chương trình phải đặt tên theo quy tắc ngơn ngữ lập trình chương trình dịch cụ thể Trong Python, tên dãy liên tiếp có số kí tự tùy ý bao gồm chữ số, chữ dấu gạch bắt đầu chữ dấu gạch Ví dụ, ngơn ngữ Python: • Các tên đúng: A R21 P21_c _45 • Các tên sai: A BC 6Pq X#Y (chứa kí tự trắng) (bắt đầu chữ số) (chứa kí tự "#" không hợp lệ) Ngôn ngữ Python phân biệt chữ hoa, chữ thường tên Khác với NNLT Pascal không phân biệt chữ hoa, chữ thường Vídụ, AB Ab hai tên khác Python, lại tên Pascal Nhiều ngơn ngữ lập trình, có Python, phân biệt hai loại tên: • Tên dành riêng; • Tên người lập trình đặt Tên dành riêng Là loại tên ngôn ngữ lập trình quy định dùng với ý nghĩa xác định, người lập trình khơng sử dụng với ý nghĩa khác Những tên gọi tên dành riêng (còn gọi từ khố) Ví dụ Một số tên dành riêng: Trong Python: while, else, import, True, if, def, for Trong C++: main, include, if, while, void Tên người lập trình đặt Tên người lập trình đặt dùng với ý nghĩa riêng, xác định cách khai báo trước sử dụng Các tên khơng trùng với tên dành riêng Ví dụ Tên người lập trình đặt: A1 DELTA CT_Vidu b) Hằng biến Hằng (constants) Hằng đại lượng có giá trị khơng thay đổi q trình thực chương trình Trong ngơn ngữ lập trình thường có số học, lơgic, xâu • Hằng số học số nguyên hay số thực (dấu phẩy tĩnh dấu phẩy động), có dấu khơng có dấu • Hằng lơgic giá trị sai tương ứng với True False • Hằng xâu chuỗi kí tự bảng chữ Khi viết, chuỗi kí tự đặt cặp dấu nháy (Python dùng dấu nháy đơn nháy kép, C++ dùng dấu nháy kép) Ví dụ - Hằng số học: 1.5 -2.236E01 -22.36 1.0E-6 -5 +3.14159 +18 0.5 - Hằng lôgic: + Trong Python: (chú ý viết in hoa chữ đầu) True False - Hằng xâu: + Trong Python: 'Informatic' "TIN HOC" + Trong C++: "Informatic" "TIN HOC" Chú ý: Với Python bạn tùy ý viết nháy đơn nháy kép Biến (variables) Biến đại lượng đặt tên, dùng để lưu trữ giá trị giá trị thay đổi trình thực chương trình Trong chương trình Python, khơng u cầu bạn khai báo biến kiểu biến trước dùng Python xác định kiểu biến sau bạn gán giá trị cho biến Việc sử dụng biến trình bày phần sau c) Chú thích (comments) Có thể đặt đoạn thích chương trình nguồn Các thích giúp cho người đọc chương trình nhận biết ngữ nghĩa chương trình dễ Chú thích khơng ảnh hưởng đến nội dung chương trình nguồn chương trình dịch bỏ qua Trong Python có hai loại thích: thích dịng, thích gồm nhiều dịng • Chú thích dịng bắt đầu dấu # Ví dụ: Dịng sau thích trình phiên dịch Python bỏ qua # Hello everybody • Chú thích nhiều dòng bắt đầu kết thúc cách viết dấu nháy đơn kép Ví dụ: Các dịng sau thích trình phiên dịch Python bỏ qua """ This is also a perfect example of multi-line comments """ TĨM TẮT • Cần có chương trình dịch để chuyển chương trình nguồn thành chương trình đích • Có hai loại chương trình dịch: thơng dịch biên dịch • Các thành phần ngơn ngữ lập trình: bảng chữ cái, cú pháp ngữ nghĩa • Mọi đối tượng chương trình phải đặt tên: o Tên dành riêng: Được dùng với ý nghĩa riêng, không dùng với ý nghĩa khác o Tên người lập trình đặt: cần khai báo trước sử dụng • Hằng: Đại lượng có giá trị khơng thay đổi q trình thực chương trình • Biến: Đại lượng đặt tên Giá trị biến thay đổi q trình thực chương trình Câu hỏi tập Tại người ta phải xây dựng ngơn ngữ lập trình bậc cao? Chương trình dịch gì? Tại cần phải có chương trình dịch? Biên dịch thông dịch khác nào? Hãy cho biết điểm khác tên dành riêng tên người dùng đặt 69 = .read() • Cách 2: đọc lần dịng từ tệp lệnh readline() Cú pháp: = .readline() • Cách 3: đọc lần danh sách, phần tử danh sách dòng tệp lệnh readlines() Cú pháp: = .readlines() c) Mở tệp để ghi liệu Cú pháp: = open(,"w",[endcoding = "xxx"] ) Ý nghĩa: Việc mở tệp để ghi liệu khác với việc mở để đọc tham số thứ hàm open(), chữ "w" (write) Nếu tệp chưa tồn tạo đĩa, tệp tồn bị ghi đè d) Ghi liệu vào tệp mở chế độ ghi Python hỗ trợ cách ghi liệu vào tệp văn bản: • Cách 1: Ghi xâu văn vào tệp lệnh write() Cú pháp: .write() • Cách 3: Ghi lần danh sách xâu văn vào tệp lệnh writelines() Cú pháp: .writelines() e) Đóng tệp mở Sau kết thúc phiên làm việc với tệp ta cần đóng tệp giải phóng tài ngun Giả sử tệp mở gắn với biến tệp f ta cần sử dụng lệnh f.close() để đóng tệp 70 Bài 16 Ví dụ làm việc với tệp Ví dụ Tính điện trở tương đương Cho ba điện trở R1, R2, R3 Sử dụng ba điện trở ta tạo năm điện trở tương đương cách mắc sơ đồ nêu hình 5.1 R1 R1 R3 R2 R2 R3 Sơ đồ II Sơ đồ I R3 R1 R1 R2 R3 R2 Sơ đồ III Sơ đồ IV R1 R2 R3 Sơ đồ V Hình 5.1 - Sơ đồ mắc điện trở Mỗi cách mắc cho điện trở tương đương khác Ví dụ, mắc theo sơ đồ I điện trở tương đương là: R=𝑅 𝑅1 ∗𝑅2 ∗𝑅3 ∗𝑅2 +𝑅1 ∗𝑅3 + 𝑅2 ∗𝑅3 Còn mắc theo sơ đồ V R = R1 + R2 + R3 Cho tệp văn RESIST.DAT gồm nhiều dòng, dòng chứa ba số thực R1, R2 R3, số cách dấu cách, < R1, R2, R3 ≤ 105 Chương trình sau đọc liệu từ tệp RESIST.DAT, tính điện trở tương đương ghi kết tệp văn RESIST.EQU, dòng ghi năm điện trở tương đương ba điện trở dòng liệu vào tương ứng # Mở tệp để đọc liệu f1 = open("resist.dat") # Mở tệp để ghi liệu f2 = open("resist.equ", "w") # Khai báo danh sách có phần tử a = [0]*5 # Lặp vô hạn, dừng lệnh break while True: # Đọc dòng từ tệp vào biến xâu s, cắt bỏ dấu cách thừa 10 s = f1.readline().strip() 11 # Nếu s rỗng dừng vịng lặp while 12 if not s : 13 break 14 # tách xâu s đổi thành số thực gán cho r1, r2, r3 15 r1, r2, r3 = map(float, s.split()) 16 a[0] = r1*r2*r3/(r1*r2 + r1*r3 + r2*r3) 17 a[1] = r1*r2/(r1+r2) + r3 18 a[2] = r1*r3/(r1+r3) + r2 71 19 a[3] = r3*r2/(r3+r2) + r1 20 a[4] = r1 + r2 + r3 21 # ghi danh sách a[i] tệp với định dạng số thực 22 for i in range(5): 23 f2.write("%9.3f" % a[i]) 24 # xuống dịng tệp 25 f2.write("\n") 26 # đóng tệp 27 f1.close() 28 f2.close() Ví dụ Thầy hiệu trưởng tổ chức cho giáo viên học sinh trường cắm trại, sinh hoạt trời vườn quốc gia Cúc Phương Để lên lịch đến thăm khu trại lớp, thầy Hiệu trưởng cần biết khoảng cách từ trại (ở vị trí có toạ độ (0;0)) đến trại giáo viên chủ nhiệm lớp Mỗi lớp có khu trại, vị trí trại thầy chủ nhiệm có tọa độ nguyên (x ; y), ghi vào tệp văn TRAI.TXT (như vậy, tệp TRAI.TXT chứa cặp số nguyên liên tiếp, số cách dấu cách không kết thúc dấu xuống dịng) Chương trình sau đọc từ tệp TRAI.TXT cặp toạ độ, tính đưa hình khoảng cách (với độ xác hai chữ số sau dấu chấm thập phân) từ trại giáo viên chủ nhiệm lớp đến trại thầy hiệu trưởng import math f = open('trai.txt') while True: # Đọc dòng liệu tệp vào chuỗi s # dùng hàm strip() cắt bỏ dấu cách thừa hai đầu xâu s = f.readline().strip() # s rỗng (hết tệp) dừng lặp if not s : 10 break 11 # tách s thành chuỗi phân cách dấu cách 12 # chuyển chuỗi thành danh sách số nguyên 13 l = list(map(int, s.split())) 14 n = len(l) 15 # duyệt danh sách l lấy cặp x, y để tính khoảng cách 16 for i in range(0, n, 2): 17 x = l[i] 18 y = l[i+1] 19 d = math.sqrt(x**2 + y**2) 20 print("%10.2f" % d, end ='') 21 f.close() 72 TÓM TẮT • Việc trao đổi liệu với nhớ ngồi thực thơng qua kiểu liệu tệp; • Để làm việc với tệp cần phải gắn tệp với biến tệp; • Mỗi ngơn ngữ lập trình có chương trình chuẩn để làm việc với tệp; • Các thao tác với tệp văn bản: o Cách khai báo biến tệp, mở tệp đóng tệp o Đọc/ghi: tương tự làm việc với bàn phím hình Câu hỏi tập Nêu số trường hợp cần phải dùng tệp Khi cần nhập liệu từ tệp phải dùng thao tác nào? Tại cần phải mở tệp trước đọc/ghi tệp? Tại phải dùng câu lệnh đóng tệp sau kết thúc ghi liệu vào tệp? 73 Chương Hàm lập trình có cấu trúc Bài 17 Chương trình phân loại Khái niệm chương trình Các chương trình giải tốn phức tạp thường dài, gồm hàng trăm, hàng nghìn lệnh Khi đọc chương trình dài, khó nhận biết chương trình thực cơng việc việc hiệu chỉnh chương trình khó khăn Vì vậy, vấn đề đặt phải cấu tạo chương trình chương trình dễ đọc, dễ hiệu chỉnh, nâng cấp Mặt khác, việc giải toán phức tạp thường địi hỏi nói chung phân thành tốn Xét tốn tính tổng bốn luỹ thừa: TLuythua = an + bm + cp+ dq Bài tốn bao gồm bốn tốn tính an, bm, cp, dq, giao cho bốn người, người thực Giá trị TLuythua tổng kết bốn tốn Với toán phức tạp hơn, toán lại phân chia thành tốn nhỏ Q trình phân rã làm "mịn" dần toán gọi cách thiết kế từ xuống Tương tự, lập trình để giải tốn máy tính phân chia chương trình (gọi chương trình chính) thành khối (môđun), khối bao gồm lệnh giải tốn Mỗi khối lệnh xây dựng thành chương trình Sau đó, chương trình xây dựng từ chương trình Có thể xem chương trình chương trình xây dựng từ chương trình khác Cách lập trình dựa phương pháp lập trình có cấu trúc chương trình xây dựng gọi chương trình có cấu trúc 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 Ví dụ, Mỗi mơn Văn, Tốn, Anh có số điểm Bạn cần viết chương trình nhập vào điểm, tính in điểm trung bình mơn Điểm mơn nhập dòng cách dấu cách Thứ tự, dòng thứ điểm Văn, dòng thứ hai điểm Tốn, dịng thứ ba điểm Anh Chương trình viết Python sau: van = list(map(float, input('Nhập điểm văn: ').split())) m = len(van) toan = list(map(float, input('Nhập điểm toán: ').split())) n = len(toan) anh = list(map(float, input('Nhập điểm anh: ').split())) 74 k = len(anh) tvan = 0.0 10 for i in range(m): 11 tvan += van[i] 12 13 ttoan = 0.0 14 for i in range(n): 15 ttoan += toan[i] 16 17 = 0.0 18 for i in range(k): 19 += anh[i] 20 21 print("%6.1f%6.1f%6.1f" % (tvan/m, ttoan/n, tanh/k)) Trong chương trình có ba đoạn lệnh tương tự (dòng 9-11, dòng 13-15, dòng 17-19) việc lặp lại đoạn lệnh tương tự làm cho chương trình vừa dài vừa khó theo dõi Để nâng cao hiệu lập trình, ngơn ngữ lập trình bậc cao cung cấp khả xây dựng chương trình dạng tổng quát "đại diện" cho nhiều đoạn lệnh tương tự nhau, chẳng hạn để tính điểm trung bình mơn học ta viết hàm Average(l) gửi cho hàm danh sách điểm cần tính l, hàm tính trả giá trị trung bình cho ta Cụ thể chương trình viết lại sau: def Average(l): m = len(l) t = 0.0 for i in range(m): t += l[i] print("%6.1f" % (t/m)) van = list(map(float, input('Nhập điểm văn: ').split())) toan = list(map(float, input('Nhập điểm toán: ').split())) 10 anh = list(map(float, input('Nhập điểm anh: ').split())) 11 Average(van) 12 Average(toan) 13 Average(anh) Lợi ích việc sử dụng chương trình • Tránh việc phải viết lặp lặp lại dãy lệnh tương tự ví dụ tính trung bình Ngơn ngữ lập trình cho phép tổ chức dãy lệnh thành chương trình (hàm) Sau đó, chương trình cần đến dãy lệnh cần gọi thực chương trình • Khi phải viết chương trình lớn hàng nghìn, hàng vạn lệnh, cần huy động nhiều người tham gia, giao cho người (hoặc nhóm) viết chương trình con, sau lắp ghép chúng lại thành chương trình Ví dụ, với toán mà việc tổ chức liệu vào không đơn giản thường người ta chia toán thành ba toán nhập, xử lí xuất liệu, viết chương trình tương ứng 75 • Phục vụ cho trình trừu tượng hố: Người lập trình sử dụng kết thực chương trình mà quan tâm đến việc thao tác cài đặt Trừu tượng hoá tư tưởng chủ đạo để xây dựng chương trình nói chung chương trình có cấu trúc nói riêng • Các ngơn ngữ lập trình thường cung cấp phương thức đóng gói chương trình nhằm cung cấp câu lệnh (tương tự lệnh gọi thực hàm thủ tục chuẩn) cho người lập trình sử dụng mà khơng cần biết mã nguồn • Thuận tiện cho phát triển, nâng cấp chương trình Do chương trình tạo thành từ chương trình nên chương trình dễ đọc, dễ hiểu, dễ kiểm tra hiệu chỉnh Việc nâng cấp, phát triển chương trình đó, chí bổ sung thêm chương trình nói chung khơng gây ảnh hưởng đến chương trình khác • Hiện nay, ngày có nhiều thiết bị kĩ thuật số tiện ích máy quay phim, máy ảnh, máy ghi âm, thiết bị âm thanh, hình màu độ phân giải cao, kết nối với máy tính Việc thiết kế chương trình thực giao tiếp với thiết bị cần thiết giúp mở rộng khả ứng dụng ngôn ngữ Phân loại cấu trúc chương trình a) Phân loại Trong NNLT Python, chương trình hàm, hàm chia làm hai loại: • Hàm có kết (Fruitful functions) loại hàm thực số thao tác trả số giá trị theo sau lệnh return Ví dụ hàm tốn học hay hàm xử lí xâu: sin(x) nhận vào giá trị thực x trả giá trị sinx, sqrt(x) nhận vào giá trị x trả giá trị bậc hai x, len(x) nhận vào xâu danh sách x trả độ dài xâu danh sách x, • Hàm khơng có kết (Void functions) hàm thực số thao tác định không trả giá trị Ví dụ hàm print(), write() b) Cấu trúc hàm Hàm có cấu trúc tương tự chương trình, thiết phải có tên, phần đầu dùng để khai báo tên, phần thân chứa lệnh: Phần đầu khai báo tên hàm danh sách tham số hình thức Phần thân có khai báo biến cho liệu vào, biến dùng hàm Thành phần chủ yếu thân hàm dãy câu lệnh thực để từ liệu vào ta nhận liệu hay kết mong muốn, hàm có kết chứa lệnh return trả kết 76 Tham số hình thức Các biến khai báo cho liệu vào/ra gọi tham số hình thức hàm Các biến khai báo để dùng riêng thân hàm gọi biến cục Ví dụ, hàm Average(l) l tham số hình thức m, t biến cục Nói chung, chương trình hàm khác khơng nhìn thấy biến cục hàm hàm sử dụng biến chương trình Do vậy, biến chương trình gọi biến tồn cục Ví dụ, biến van, toan, anh khai báo chương trình ví dụ biến tồn cục Hàm có khơng có tham số hình thức biến cục c) Thực hàm Tham số thực Để thực (gọi) hàm, ta cần phải có lệnh gọi nó, tương tự lệnh gọi hàm dựng sẵn Python, bao gồm tên hàm với tham số (nếu có) biến chứa liệu vào tương ứng với tham số hình thức đặt cặp ngoặc ( ) Các biến gọi tham số thực Hình 6.1 - Minh họa hàm tham số thực Khi thực hàm, tham số hình thức để nhập liệu vào nhận giá trị tham số thực tương ứng, tham số hình thức để lưu trữ liệu trả giá trị cho tham số thực tương ứng Ví dụ, thực tính trung bình cần ba lần gọi hàm Average(l) với tham số (van), (toan), (anh) tham số tham số thực tương ứng với tham số hình thức (l) Sau hàm kết thúc, lệnh dứng sau lệnh gọi hàm thực 77 Bài 18 Ví dụ cách định nghĩa sử dụng hàm Các ngơn ngữ lập trình có quy tắc viết sử dụng chương trình Trong mục xét cách viết sử dụng hàm Python Cách định nghĩa hàm Định nghĩa hàm có cú pháp sau: def ([danh sách tham số]) : [] [return ] Dòng định nghĩa hàm từ khóa def, tên hàm, sau cặp ngoặc đơn kết thúc dấu hai chấm (:) Danh sách tham số (nếu có) liệt kê cặp ngoặc đơn phân cách dấu phảy Phần thân hàm dãy câu lệnh viết thụt lề so với dịng đầu định nghĩa hàm Chú ý • Dùng định nghĩa hàm có tham số hình thức hay khơng cặp ngoặc đơn thiết phải có cuối dịng phải có dấu hai chấm • Các lệnh thân hàm phải viết thụt lề (thường 3-4 dấu cách phím tab) • Nếu hàm có kết thân hàm có lệnh return theo sau dãy giá trị trả Khác với NNLT Pascal/C++, Python cho phép hàm trả nhiều giá trị thuộc kiểu Một số ví dụ hàm a) Ví dụ hàm khơng có kết Xét ví dụ vẽ hình chữ nhật có dạng sau: * * * * * * * * * * * * * * * * Ta vẽ hình chữ nhật với ba câu lệnh: print('* * * * * * *') print('* *') print('* * * * * * *') Như vậy, chương trình, cần vẽ hình chữ nhật cần phải đưa vào ba câu lệnh Trong chương trình sau, ta đưa ba câu lệnh vào hàm có tên Ve_Hcn (vẽ hình chữ nhật) Mỗi cần vẽ hình chữ nhật ta cần đưa vào câu lệnh gọi hàm Chương trình gọi hàm Ve_Hcn() ba lần để vẽ ba hình chữ nhật Hàm Ve_Hcn() đơn in dịng hình hàm khơng trả giá trị 78 def Ve_hcn(): print('* * * * * * *') print('* *') print('* * * * * * *') Ve_hcn() print('\n\n') Ve_hcn() print('\n\n') 10 Ve_hcn() Hàm Ve_Hcn() ví dụ vẽ hình chữ nhật với kích thước cố định × Giả sử chương trình cần vẽ nhiều hình chữ nhật với kích thước khác Để hàm Ve_Hcn() thực điều đó, cần có hai tham số vào chiều dài, chiều rộng dòng đầu định nghĩa hàm viết lại sau: def Ve_Hcn(dai, rong): Khai báo có nghĩa hàm Ve_Hcn() thực để vẽ hình chữ nhật có kích thước tuỳ theo giá trị tham số dai, rong giá trị tham số dai rong ngun Trong chương trình sau mơ tả đầy đủ hàm Ve_Hcn() với tham số dai, rong sử dụng hàm để vẽ hình chữ nhật có kích thước khác def Ve_Hcn(dai, rong): for i in range(dai): print('*',end=' ') print('') for i in range(rong-2): print('*', end=' '); for j in range(dai-2): print(' ', end=' ') print('*') 10 for i in range(dai): 11 print('*',end=' ') 12 print('') 13 14 Ve_Hcn(25, 10) 15 print('\n\n') 16 Ve_Hcn(5, 10) 17 print('\n\n') 18 a = 19 b = 20 for i in range(4): 21 Ve_Hcn(a,b) 22 a *= 23 b *= Các tham số dai, rong hàm Ve_Hcn() tham số Trong lệnh gọi hàm Ve_Hcn(5, 3) (vẽ hình chữ nhật kích thước × 3) tham số dai thay số nguyên 5, tham số rong thay số nguyên Còn lời gọi hàm Ve_Hcn(a, b) vẽ hình chữ nhật kích thước a × b, tham số dai thay giá trị thời biến a, tham số rong thay giá trị thời biến b 79 b) Ví dụ hàm có kết Ví dụ Xét chương trình thực việc rút gọn phân số, có sử dụng hàm tính ước chung lớn (UCLN) hai số nguyên # Phần định nghĩa hàm def UCLN(x, y): while y != 0: du = x % y x = y y = du return x def DC(x, y): 10 return y, x 11 12 # Phần chương trình 13 tu, mau = map(int, input("Nhập tử số mẫu số: ").split()) 14 a = UCLN(tu, mau) 15 if a > 1: 16 tu //= a 17 mau //= a 18 print("%5d %5d" % (tu, mau)) Chú ý: Trong chương trình này, biến tu, mau a biến toàn cục, cịn biến du biến cục Vì hàm UCLN() có trả kết quả, nên gọi hàm ta thường đặt hàm vào vế phải phép gán để gán giá trị trả hàm cho biến Ví dụ: a = 6*UCLN(tu, mau) + Ví dụ Chương trình sau cho biết chu vi diện tích hình chữ nhật có hai cạnh a, b Trong có sử dụng hàm tính chu vi diện tích hình chữ nhật # định nghĩa hàm def chuvi_dientich(x, y): return (x + y)*2, x*y # chương trình a, b = map(int, input("Nhập độ dài hai cạnh hình chữ nhật: ").split()) cv, dt = chuvi_dientich(a, b) print("%8d%8d" % (cv, dt)) Khi gọi hàm ta thấy vế trái có biến cv (chu vi) dt (diện tích) nhận hết trả về, điểm khác biệt NNLT Python so với Pascal C++ Vấn đề tham số hàm Python Các tham số hàm Python chia làm hai loại: bất biến (immutable), khả biến (mutable) 80 • Kiểu tham số bất biến gồm kiểu: số nguyên, số thực, chuỗi (tuble): Các tham số có kiểu gửi cho hàm tác động thân hàm lên chúng không làm thay đổi giá trị chúng sau hàm kết thúc • Kiểu tham số khả biến gồm kiểu: danh sách (list), tập hợp (set), từ điển (dict): Các tham số kiểu gửi cho hàm tác động thân hàm lên chúng làm thay đổi giá trị chúng sau hàm kết thúc Ví dụ 1: Minh họa tham số bất biến Nhập vào số nguyên, gửi số cho hàm để nhân đôi giá trị biến quan sát xem biến có bị thay đổi giá trị sau gọi hàm hay không def gap_doi(x): x *= a = int(input("Nhập số nguyên: ")) gap_doi(a) print(a) Kết chạy chương trình với giá trị nhập vào sau: Ta thấy, giá trị biến a sau hàm gap_doi() tác động khơng thay đổi Ví dụ 2: Minh họa tham số khả biến Gửi cho hàm dãy số để nhân đơi giá trị phần tử dãy quan sát xem dãy có bị thay đổi giá trị sau gọi hàm hay không def gap_doi(x): for i in range(len(x)): x[i] *= a = list(map(int,input("Nhập dãy nguyên: ").split())) print("Trước gọi hàm: ", a) gap_doi(a) print("Sau gọi hàm: ", a) Kết chạy chương trình với giá trị dãy nhập vào : 4, sau: Ta thấy, giá trị phần tử danh sách a sau hàm gap_doi() tác động thay đổi 81 Bài tập thực hành Mục đích, u cầu • Rèn luyện thao tác xử lí xâu; • Nâng cao kĩ viết, sử dụng hàm Nội dung a) Tìm hiểu việc xây dựng hai hàm sau • Hàm CatDan(S) nhận đầu vào xâu s gồm không 79 kí tự, tạo xâu kết t thu từ xâu s việc chuyển kí tự s xuống cuối xâu Ví dụ s = 'abcd' t = 'bcda' def CatDan(s): t = s[1:]+s[0] return t • Hàm CanGiua(s) nhận đầu vào xâu s gồm không 79 kí tự, bổ sung vào đầu s số dấu cách để đưa hình xâu kí tự s ban đầu dòng gồm 80 kí tự def CanGiua(s): n = len(s) n = (80-n)//2 t = ' '*n + s return t b) Theo dõi cách sử dụng hai hàm trên, ta viết chương trình sau để nhập xâu kí tự từ bàn phím đưa xâu hình có dạng dịng chữ chạy hình văn 25×80 # Bài thực hành import time def CatDan(s): t = s[1:]+s[0] return t def CanGiua(s): n = len(s) n = (80-n)//2 10 t = ' '*n + s 11 return t 12 13 s = input("Nhập xâu s: ") 14 s = CanGiua(s) 15 try: 16 while True: 17 print(s) 18 time.sleep(0.5) # Dừng 0.5 giây 19 s = CatDan(s) 20 print('\n'*30) 21 except KeyboardInterrupt: # Dừng bấm CTRL + C 22 pass 82 Hãy chạy thử chương trình với dịng chữ: ' Mừng nghìn năm Thăng Long - Hà Nội! ' c) Hãy viết hàm ChuChay(s, dong) nhận đầu vào xâu s gồm khơng q 79 kí tự biến nguyên dong, đưa xâu s có dạng chữ chạy dòng dong Viết chạy chương trình có sử dụng hàm Bài tập thực hành Mục đích, u cầu • Nâng cao kĩ viết, sử dụng hàm; • Biết cách viết chương trình có cấu trúc để giải tốn máy tính Nội dung a) Tìm hiểu việc xây dựng hàm thủ tục thực tính độ dài cạnh, chu vi, diện tích, kiểm tra tính chất đều, cân, vng tam giác trình bày Giả thiết tam giác xác định toạ độ ba đỉnh Ta xây dựng hàm: • Hàm nhận liệu vào biến mô tả tam giác R đầu độ dài ba cạnh a, b, c: DaiCanh(R) • Hàm tính chu vi tam giác R: Chuvi(R) • Hàm tính diện tích tam giác R: Dientich(R) • Hàm nhận đầu vào biến mô tả tam giác R đầu tính chất tam giác (Deu hay Can hay Vuong): Tinhchat (R) • Hàm hiển thị toạ độ ba đỉnh tam giác lên hình: Hienthi(R) • Hàm tính khoảng cách hai điểm P, Q: Kh_cach (P, Q) b) Tìm hiểu chương trình nhập vào toạ độ ba đỉnh tam giác sử dụng hàm xây dựng để khảo sát tính chất tam giác import math def Kh_Cach(p, q): return math.sqrt((p[0]-q[0])**2 + (p[1]-q[1])**2) def DaiCanh(r): 83 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 a = Kh_Cach(r[1], r[2]) b = Kh_Cach(r[0], r[2]) c = Kh_Cach(r[0], r[1]) return a, b, c def ChuVi(r): a, b, c = DaiCanh(r) return a + b + c def DienTich(r): a, b, c = DaiCanh(r) p = (a + b + c) / return math.sqrt(p*(p-a)*(p-b)*(p-c)) def HienThi(r): print("Tọa độ print("- Đỉnh print("- Đỉnh print("- Đỉnh đỉnh tam A(%.3f,%.3f" % B(%.3f,%.3f" % C(%.3f,%.3f" % giác là:") (r[0][0], r[0][1])) (r[1][0], r[1][1])) (r[2][0], r[2][1])) def TinhChat(r): a, b, c = DaiCanh(r) tl = '' if a == b == c: t += "đều" if a == b or b == c or a == c: tl += "cân " if a**2 == b**2 + c**2 or \ b**2 == a**2 + c**2 or \ c**2 == a**2 + b**2: tl += "vuông" return tl print("Nhập tam giác") x1, y1 = map(float, input("Nhập tọa độ đỉnh A: ").split()) x2, y2 = map(float, input("Nhập tọa độ đỉnh B: ").split()) x3, y3 = map(float, input("Nhập tọa độ đỉnh C: ").split()) tg = ((x1, y1), (x2, y2), (x3, y3)) HienThi(tg) print("Diện tích: %9.3f" % DienTich(tg)) print("Chu vi: %9.3f" % ChuVi(tg)) print("Tam giác có tính chất tam giác "+TinhChat(tg)) c) Viết chương trình sử dụng hàm thủ tục xây dựng để giải tốn: Cho tệp liệu TAMGIAC.DAT có cấu trúc sau: • Dịng chứa số N; • N dòng tiếp theo, dòng chứa sáu số thực xA, yA, xB, yB, xC, yC toạ độ ba đỉnh A(xA, yA), B(xB, yB), C(xC, yC) tam giác ABC Hãy nhập liệu từ tệp cho Trong số N tam giác đó, đưa tệp TAMGIAC.OUT ba dịng: • Dịng số lượng tam giác đều; • Dịng thứ hai số lượng tam giác cân (nhưng khơng đều); • Dịng thứ ba số lượng tam giác vuông ... 11 Kiểu số 11 Kiểu logic 11 Bài Khai báo biến 12 Bài Phép toán, biểu thức, lệnh gán 13 Phép toán 13 Biểu thức số học. .. dtin gợi nhớ tới ngữ nghĩa biến điểm tốn, điểm tin học sinh • Khơng nên đặt tên biến q ngắn hay dài, dễ mắc lỗi viết nhiều lần tên biến Ví dụ, khơng nên dùng d1, d2 hay diemmontoan, diemmontin... thức số học Trong lập trình, biểu thức số học biến kiểu số số biến kiểu số số liên kết với số hữu hạn phép toán số học, dấu ngoặc đơn ( ) tạo thành biểu thức có dạng tương tự cách viết tốn học với

Ngày đăng: 12/10/2022, 02:01

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w