TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI TIN HỌC BẬC THCS CHUYÊN ĐỀ 1 CĂN BẢN NGÔN NGỮ LẬP TRÌNH PYTHON 3 x Tác giả NGƯT Nguyễn Tấn Phong Đơn vị Trường THCS Đồng Nai, huyện Cát Tiên, tỉnh Lâm Đồng PHẦN I TÌM HIỂU NGÔN NGỮ LẬP TRÌNH PYTHON I Python là gì? Môi trường IDE để lập trình python? 1 Python là gì? Python là một ngôn ngữ lập trình, tương tự như những ngôn ngữ lập trình mà chúng ta đã biết như Pascal, CC++, Scratch, mBlock Về lý thuyết thì tất cả các NNLT đều với mục đích là trung gian giao tiếp.
Trang 1CHUYÊN ĐỀ 1:
CĂN BẢN NGÔN NGỮ LẬP TRÌNH PYTHON 3.x
Tác giả: NGƯT Nguyễn Tấn Phong Đơn vị: Trường THCS Đồng Nai, huyện Cát Tiên, tỉnh Lâm Đồng
PHẦN I: TÌM HIỂU NGÔN NGỮ LẬP TRÌNH PYTHON
I Python là gì? Môi trường IDE để lập trình python?
1 Python là gì?
Python là một ngôn ngữ lập trình, tương tự như những ngôn ngữ lập trình mà chúng
ta đã biết như Pascal, C/C++, Scratch, mBlock
Về lý thuyết thì tất cả các NNLT đều với mục đích là trung gian giao tiếp giữa
người và máy tính, mỗi NNLT có những quy ước riêng để con người “diễn đạt” những
“suy nghĩ, chỉ thị” cho máy tính Ví dụ thế này nhé: người Việt Nam, người Mỹ, người Trung Quốc, … đều là con người nhưng mỗi quốc gia lại có một loại “chữ viết và tiếng nói” khác nhau do con người quốc gia đó “quy ước”, nôm na hiểu “chữ viết và tiếng nói” giống như là một NNLT vậy
Về góc độ khoa học máy tính thì NNLT là công cụ để con người giải các bài toán thực tế trên máy tính thông qua cấu trúc dữ liệu/cơ sở dữ liệu và các thuật toán/thuật giải Đứng ở quan điểm này thì thuật toán/thuật giải ít chịu ảnh hưởng đến loại NNLT mà ta chọn lựa, nhưng cấu trúc dữ liệu/cơ sở dữ liệu thì lại chịu ảnh hướng rất lớn từ NNLT mà
ta chọn lựa Điều đó lý giải tại sao hiện nay có nhiều loại NNLT như vậy? Bởi vì mỗi loại NNLT điều có những ưu điểm vượt trội của nó ở cấu trúc dữ liệu/cơ sở dữ liệu và về tính hướng đối tượng Chẳng hạn: Ưu điểm của NNLT Pascal là các câu lệnh được diễn đạt tường minh theo ngôn ngữ nói, nhược điểm là phạm vi cấu trúc dữ liệu nhỏ, tính hướng đối tượng cũng như cơ sở dữ liệu không rõ ràng Ngược lại, NNLT C++ lại có cấu trúc
dữ liệu lớn, tính hướng đối tượng và CSDL tốt hơn nhưng câu lệnh lại diễn đạt không tường minh NNLT Scratch thì khắc phục được nhược điểm của Pascal/C++ và lại có thêm nhiều ưu điểm về lập trình ứng dụng đa nền tảng nhưng lại có nhược điểm là diễn đạt các thuật toán phức tạp hơn nhiều so với Pascal/C++
Python được xem là một ngôn ngữ bậc cao phổ biến nhất hiện nay, chỉ xét ở góc
độ dạy học trong chương trình phổ thông bậc THCS và THPT thì Python là NNLT khắc phụ được những hạn chế của NNLT Pascal và C/C++ Điều đó thể hiện rõ nhất ở 3 điểm:
+ Câu lệnh được diễn đạt tường minh theo ngôn ngữ nói
+ Phạm vi dữ liệu lớn, tính hướng đối tượng tường minh
+ Khả năng lập trình đa nền tảng
2 Môi trường IDE để lập trình python?
Hiểu đơn giản như thế này nhé! Con người chỉ hiểu ngôn ngữ của người (lời nói,
cử chỉ, hành vi, chữ viết, …) Máy tính chỉ hiểu ngôn ngữ máy (dạng nhị phân, tương ứng với trạng thái có (1) và không có (0) dòng điện đi qua một dãy song song 8 mạch điện, 0 hoặc 1 gọi là 1 bit, mỗi chữ viết của con người tương ứng 8 bit = 1 byte) Vậy muốn con người giao tiếp với máy tính thì cần có một đối tượng trung gian làm “phiên dịch” gọi
là một trình biên dịch (hoặc trình thông dịch – khái niệm mới xuất hiện gần đây)
Về cơ bản, trình biên dịch và trình thông dịch đều có chung nhiệm vụ “phiên dịch”
Trang 2nhất là, trình biên dịch sẽ dịch toàn bộ chương trình trước khi thực thi (tức gửi cho CPU thực thi), còn trình thông dịch sẽ dịch và thực thi tuần tự từng câu lệnh từ trên xuống dưới Do vậy, trình thông dịch sẽ mất nhiều thời gian hơn trình biên dịch
Ví dụ: chương trình có 1000 câu lệnh, ở câu lệnh thứ 1000 bị lỗi cú pháp, nếu trình biên dịch nó sẽ báo lỗi ngay khi tiến hành thực thi nhưng trình thông dịch nó vẫn thực thi
999 câu lệnh phía trước, đến câu lệnh thứ 1000 nó mới báo lỗi
Và một trình biên dịch/thông dịch tối thiểu cần 3 thành phần sau:
- Một trình soạn thảo: để “diễn đạt” những “suy nghĩ, chỉ thị” của con người cho
máy tính, ta gọi là mã nguồn (source code)
- Một trình dịch (compiler): Để dịch mã nguồn của con người sang hệ nhị phân
cho máy tính hiểu
- Một trình soát lỗi (debugger): giúp tìm ra lỗi “diễn đạt” của con người trong mã
nguồn khi dịch sang ngôn ngữ máy
Một công cụ bao gồm cả 3 thành phần như trên gọi là môi trường lập trình IDE
(integreted development environment, dịch nôm na là môi trường phát triển tích hợp)
Một NNLT có thể có nhiều môi trường lập trình IDE khác nhau, các IDE này luôn đảm bảo những cấu trúc của NNLT và mỗi IDE khác nhau sẽ có thêm những ưu điểm khác nhau Ví dụ: NNLT Pascal có các IDE như Turbo Pascal, Borland Pascal, Pascal for Dos, Pascal for win, Free Pascal, Lazarus Pascal, olalaPascal, …; NNLT C++ có các IDE như Turbo C++, Borland C++, Code::Blocks, DevC++, Visual C++, Eclipse C++, … Python có rất nhiều môi trường lập trình IDE và rất đa dạng hiện nay như Python 3.x.x
Shell, Sublime Text 3, notepad++, PyCharm,… tùy vào sở thích của từng lập trình viên
mà chọn IDE phù hợp
2.1 Hướng dẫn cài đặt Python 3.x.x Shell
a Tải phần mềm Python 3.x.x Shell
Địa chỉ: https://www.python.org/downloads/
Chú ý quan trọng: Python hiện nay có hai phiên bản là 2.x và 3.x; phiên bản 2.x
đã dừng hỗ trợ vào 01.01.2020; phiên bản 3.x thì vẫn tiếp tục được phát triển với nhiều thư viện Việc chọn lựa phiên bản 2.x hay 3.x cũng có những sự khác biệt về cách trình bày câu lệnh và khả năng hỗ trợ lập trình đa nền tảng khác nhau
(Hình trên là tải python 3.10.0 cho hệ điều hành windows)
Trang 3b Cài đặt Python 3.x.x
(.x.x là phiên bản phát triển hiện tại, ví dụ trong hình là phiên bản 3.10.0, các phiên bản này thường xuyên được cập nhật theo thời gian do nhà phát triển cung cấp; phiên bản sau luôn được tích hợp thêm điểm mới)
Khi tải được tập tin có chữ “python-3.x.x.exe” về, hãy nhấp đôi chuột vào tập tin
đề cài đặt Việc cài đặt rất đơn giản và nhanh chóng Hãy để tất cả các option mặc định
và chạy chương trình
Khi cài đặt xong trên menu Start của Windows có icon như hình:
(Hình trên là python 3.10 cho hệ điều hành windows 64bit)
+ IDLE (Python 3.10 64-bit) là môi trường lập trình kết hợp viết code thành các
tập tin *.py và viết lệnh thực thi ngay (trong chuyên đề này chỉ làm việc với môi trường
IDLE)
+ Python 3.8 (64-bit) là môi trường lập trình viết lệnh thực thi ngay (gọi là interactive mode)
c Giao diện của IDLE (Python 3.10 64-bit)
c.1 Giao diện interactive mode (viết lệnh thực thi ngay)
Trong cửa sổ bên trên chúng ta thấy có 2 phần chính:
(1)Thanh công cụ (menu): nó bao gồm rất nhiều, nhưng chỉ một số chúng sẽ được
sử dụng thường xuyên
(2) Phần trung tâm soạn thảo lệnh: đây là nơi bạn viết code python ở chế độ chạy
lệnh trực tiếp (interactive mode) và xem kết quả thực thi chương trình (bao gồm kết quả tính toán và thông báo lỗi)
Trang 4c.2 Giao diện coding mode (viết lệnh thành tập tin)
Từ giao diện interactive mode, hãy chọn File => New (hoặc Ctrl + N) Khi đó,
giao diện coding mode (viết lệnh thành tập tin) sẽ được mở như hình Đây là giao diện giúp lập trình viên sắp xếp các lệnh thành một tập tin *.py để thực thi tuần tự
Hãy gõ những dòng lệnh như hình
Bây giờ nhấn File => Save (hoặc Ctrl + S)
Gõ vào tên chương trình là ctdautien.py
Hãy nhấn phím F5 và xem kết quả ở cửa sổ interactive mode
Hãy đặc biệt ghi nhớ là ấn F5 để dịch và chạy chương trình.
c.3/ Tìm hiểu “chương trình đầu tiên” có gì?
Hãy quan sát nội dung đoạn code mà bạn đã tạo như hình:
Câu lệnh trong python Giải thích
Viết chú thích trong tập tin *.py; Các chú thích chỉ để người dùng dễ hiểu, không phải là lệnh thực thi của chương trình
Khai báo biến ten, chờ nhận dữ liệu từ bàn phím
In ra dòng chữ: Xin chào bạn …
Trang 5PHẦN II: LẬP TRÌNH PYTHON CƠ BẢN
I CÁC KIỂU DỮ LIỆU CƠ BẢN TRONG PYTHON
Python có các kiểu dữ liệu cơ bản sau:
Kiểu dữ liệu cơ bản
python
Từ khóa Ví dụ Phạm vi giá trị
Số nguyên int -7; 8; 9; 125478 Vô hạn, cấp phát động
Số thực float 2.56; -56.52 Vô hạn, cấp phát động
Lô gíc bool True; False true/false
Chuỗi kí tự str ‘abcd123EFG’ Vô hạn, cấp phát động
Trong Python kiểu dữ liệu cơ bản có phạm vi giá trị rất lớn, nó có cấu trúc bộ nhớ cho dữ liệu dạng động, khác hoàn toàn trong Pascal và C/C++ là dạng tĩnh Hiểu đơn giản
là bộ nhớ chứa/lưu dữ liệu sẽ tự thay đổi phù hợp với giá trị mà nó nhận, bộ nhớ máy tính càng lớn phạm vi giá trị trong python càng lớn
II KHAI BÁO BIẾN TRONG PYTHON
Thông thường các NNLT sẽ yêu cầu khai báo biến đi kèm với kiểu dữ liệu của biến
và kiểu dữ liệu có tính tĩnh trong suốt quá trình thực thi, nhưng Python thì cho phép khai báo biến tùy thích ở bất kỳ vị trí nào mà người lập trình muốn, không cần phải khai báo kèm kiểu dữ liệu, chương trình tự nhận diện kiểu dữ liệu theo giá trị mà nó đang nhận, kiểu dữ liệu của biến là động, kể cả trong các thủ tục/hàm hoặc cấu trúc lặp
Cú pháp: biến = <giá trị khởi tạo>
Ví dụ: a = 10 -> biến a là kiểu int
a = 10.0 -> biến a là kiểu float
a = '10' -> biến a là kiểu str
Ví dụ: Ở hình trên biến st thay đổi kiểu dữ liệu tính từ khi nó được nhận giá trị mới
Chú ý:
- Lệnh type(biến) để kiểm tra kiểu dữ liệu hiện tại của biến trong python
- Tên biến được đặt theo qui tắc phải bắt đầu bằng chữ cái, không có khoảng trắng
và không trùng với từ khoá; python phân biệt chữ cái in hoa và in thường
Ví dụ: dongia, Dongia, donGia, … là các biến khác nhau
Trang 6III PHÉP TOÁN, BIỂU THỨC VÀ CÂU LỆNH TRONG PYTHON
1 Phép “gán”
Trong python phép “gán” là tạo ra một giá trị mới cho một biến, dùng dấu “=” để chỉ phép gán Chú ý quan trọng: Trong python có phân biệt chữ hoa và thường của biến
Ví dụ:
a = 10 → Gán số 10 là giá trị trong bộ nhớ của biến a
b = 20 → Gán số 20 là giá trị trong bộ nhớ của biến b
c = a + b → Gán kết quả phép tính a+b = 30 là giá trị trong bộ nhớ của biến c
Chú ý: Biến lần đầu tiên xuất hiện trong chương trình hoặc chương trình con thì
khi đó dấu “=” được hiểu là khai báo giá trị khởi đầu cho biến Từ lần sau trở đi, dấu ‘=’
b Chuyển đổi kiểu dữ liệu/Ép kiểu trong Python
Python qui ước tất cả chữ số “0 9” được nhập vào từ bán phím mặc định là kiểu chuỗi (tức là không thể thực hiện các phép toán số học với giá trị đó), muốn thực hiện được các phép tính thì phải chuyển dữ liệu (còn gọi là ép kiểu)
Trang 7Lớn hơn hoặc bằng >= 4>=4 -> 1
Bé hơn < 3<4 -> 1
Bé hơn hoặc bằng <= 3<=4 -> 1
d Các phép toán lô gíc (luận lý):
Hai toán hạng của loại phép toán này phải có kiểu lôgic tức chỉ nhận một trong hai giá trị "đúng" (được thể hiện bởi các số nguyên khác 0) hoặc "sai" (thể hiện bởi 0) Khi
đó giá trị trả lại của phép toán là 1 hoặc 0 và được cho trong bảng sau:
Và and (3 > 1) and (7<2) -> 0 Hoặc or 5 or (4 >= 6) -> 1 Không, phủ định not not (4 + 3 < 7) -> 1
2 Biểu thức:
Biểu thức là dãy kí hiệu kết hợp giữa các toán hạng, phép toán và cặp dấu () theo một qui tắc nhất định Các toán hạng là hằng, biến, hàm Biểu thức cung cấp một cách thức để tính giá trị mới dựa trên các toán hạng và toán tử trong biểu thức
Ví dụ: (x + y) * 2 - 4 ; 3 - x + sqrt(y) ; (-b + sqrt(delta)) / (2*a) ;
3 Câu lệnh đơn/ghép:
a Lệnh đơn: là một câu lệnh trong python được thiết lập từ các từ khoá và các
biểu thức …
b Lệnh ghép (hay khối lệnh): Một số câu lệnh được gọi là lệnh có cấu trúc, tức
bên trong nó lại chứa dãy lệnh khác
Trong Python, những khối lệnh ghép sẽ được nhận biết thông qua thụt lề Đó là lý
do vì sao thụt lề trong Python vô cùng quan trọng, nếu bạn thụt hoặc thò nhầm là sẽ bị báo lỗi ngay
Quan trọng: chỉ dùng dấu “;” nếu các câu lệnh đó trong cùng một khối lệnh nhưng
b Một số hàm toán học trong module math
Mặc định, python chỉ có một số phép toán và hàm toán học cơ bản Ngoài ra thư viện (module) math có thêm nhiều hàm nâng cao thêm trên số
Trang 8Để dùng mudule math thì đầu chương trình phải import thư viện math vào Cú pháp: import math
IV NHẬP XUẤT DỮ LIỆU MỀM
1 Khái niệm dữ liệu:
a Khái niệm: Về cơ bản dữ liệu đối với một NNLT (Pyhton, C/C++, Pascal, Scratch, …) được hiểu là những chữ, số và các ký tự đặc biệt có trên bàn phím
Như vậy, NNLT sẽ có ba dạng dữ liệu cơ bản sau:
- Kiểu số: gồm số nguyên và số thực
- Kiểu ký tự: là gồm 1 chữ (gọi là ký tự) nhìn thấy được trên bàn phím, bao gồm:
chữ cái thường, chữ cái in hoa, chữ số, ký tự đặc biệt (như dấu phẩy, dấu #, dấu cách, dấu
!, @, &, …) Một chữ thì là kiểu kí tự, nhiều ký tự là kiểu xâu kí tự
- Kiểu lô gíc: là kiểu dữ liệu dạng logic (thường viết là bool, chỉ có 2 giá trị là
True/False) dùng để xác định tính đúng hoặc sai của các phép toán, gồm các phép toán so
sánh (>, >=, <, <=, ==, !=) và các phép toán quan hệ (and, or, not) Như vậy, kiểu lô gíc
không thể nhập được từ bàn phím mà chỉ có thể nhận giá trị trong các phép toán logic
Chú ý: Để đọc được dữ liệu ta bắt buộc phải khai báo “biến” nhớ thuộc kiểu dữ
liệu nào thì khi đó NNLT mới hiểu để xử lý (tất cả các ngôn ngữ lập trình phương thức coding hiện nay đều tuân thủ nguyên tắc này)
b Dữ liệu mềm (nhập/xuất chuẩn): Nếu dữ liệu được nhập trực tiếp từ bàn phím
(còn gọi là đọc dữ liệu từ bàn phím) hoặc xuất ra màn hình để xem (còn gọi là ghi dữ liệu
ra màn hình) thì gọi là thao tác vào/ra dữ liệu mềm (hay nhập/xuất chuẩn)
Ưu điểm: Thao tác nhanh gọn, giúp thử các chương trình nhanh chóng
Nhược điểm: Dữ liệu sẽ bị mất sau khi trở về môi trường viết code
Ví dụ: Viết chương trình nhập vào 5 số nguyên từ bàn phím, xuất ra màn hình tổng
của 5 số đó?
Kết quả hiển thị ra màn hình:
Trang 9c Dữ liệu cứng: Nếu các dữ liệu được đọc vào từ một tập tin (file) hoặc xuất ra/ghi
vào một tập tin (file) thì gọi là dữ liệu cứng
Ưu điểm: Dữ liệu không bị mất khi trở về màn hình viết code, chứa được các dữ
liệu lớn, lưu trữ được trên các thiết bị lưu trữ (ổ cứng, usb, …)
Nhược điểm: Phải nắm kỹ các thao tác và câu lệnh đọc/ghi dữ liệu
Chú ý: Đối với các kì thi chọn học sinh giỏi dữ liệu vào/ra bắt buộc từ file
Ví dụ:
Với câu lênh trên ta dùng hàm int() để chuyển chuỗi số '125' được nhập từ bàn phím thành số nguyên có giá trị là 125 Nếu ta nhập một kí tự nào khác các chữ số từ '0'
đến '9' lệnh trên sẽ báo lỗi sai kiểu
V CÂU LỆNH ĐIỀU KIỆN if: elif: else:
Dạng thức if
lệnh/khối lệnh
Trang 10Ví dụ: Viết chương trình xếp loại học lực học kỳ của học sinh dựa trên điểm thi
giữa kỳ, điểm thi cuối kỳ được nhập từ bàn phím
Điểm trung bình môn học kỳ = (2*điểm thi cuối kỳ + điểm thi giữa kỳ)/3;
- Nếu Điểm trung bình môn học kỳ >= 8.0 thì xếp loại “Hoàn thành tốt”
- Nếu 5.0 <= Điểm trung bình môn học kỳ < 8.0 thì xếp loại “Hoàn thành”
- Nếu Điểm trung bình môn học kỳ < 5.0 thì xếp loại “Có nội dung chưa hoàn thành”
<biến> là một biến tuỳ ý, dùng để nhận
lần lượt các phần tử trong <danh sách
Trong python, cấu trúc lặp có thêm trường hợp rẽ nhánh else Điểm mạnh của
python là với cấu trúc lặp for có một phạm vi và điều kiện thực hiện lặp rất lớn và tiện dụng Trong tài liệu chuẩn python, cú pháp for được mô tả như sau:
for variable_1, variable_2, variable_n in sequence :
# for-block
else:
# else-block
Với mô tả như trên thì sau for có rất nhiều biến điều khiển và “sequence” được
hiểu là một dãy tuần tự/trình tự có cấu trúc, nó có thể là một chuỗi, một dãy số, một danh
sách, một khoản tuần tự, …
Trang 11*/Lệnh dừng vòng lặp: Hầu hết các NNLT hiện nay điều có câu lệnh để “dừng”
(còn gọi là “bẻ gãy”) một vòng lặp mà không cần điều kiện kết thúc vòng lặp xảy ra
Dạng lệnh
Cú pháp: for i in range(giá trị đầu , giá trị cuối , bước nhảy):
Số lần lặp <= giá trị cuối – (giá trị đầu + bước nhảy)
Ví dụ: range(5) -> lặp 5 lần (khuyết giá trị đầu và bước nhảy, mặc định là 0)
(giá trị 1,giá trị 2, …,giá trị n) :
Số lần lặp = số phần tử có trong list hay tuple
Ví dụ: [1,’1’,’teo’,’ti’,[1,5]] -> lặp 5 lần
Chú ý: Trong Python, kiểu danh sách list và tuple giống nhau là các phần tử có
kiểu dữ liệu tùy ý, khác nhau là phần tử trong list thì thay đổi giá trị được, tuple thì không thay đổi được
2 Một số ví dụ về vòng lặp for và while trong python
Ví dụ 2.1: Viết chương trình nhập vào một số nguyên dương n Xuất ra màn hình
tổng các số nguyên chẵn trong phạm vi từ 0 đến n?
Chẳng hạn: Nhập n = 10; Xuất ra màn hình: 30
Nhập n = -10; Xuất ra màn hình: -30