“MỌI SỰ CỐ GẮNG CHƯA CHẮC ĐÃ GẶT GÁI ĐƯỢC KẾT QUẢ NHƯNG MỖI KẾT QUẢ ĐẠT ĐƯỢC CHẮC CHẮN LÀ CẢ MỘT QUÁ TRÌNH CỐ GẮNG”

Tài liệu Python và IDLE V1

Thứ bảy - 25/03/2023 10:29
 Python là một ngôn ngữ lập trình bậc cao cho các mục đích lập trình đa năng ra mắt vào năm 1991. Python được thiết kế với ưu điểm mạnh là dễ đọc, dễ học và dễ nhớ. Python là ngôn ngữ có hình thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình và là ngôn ngữ lập trình dễ học. được dùng rộng rãi trong phát triển trí tuệ nhân tạo hoặc AI.
Python hoàn toàn tạo kiểu động và dùng cơ chế cấp phát bộ nhớ tự động. Python được phát triển trong một dự án mã mở, do tổ chức phi lợi nhuận Python Software Foundation quản lý.
Là tài liệu cơ bản dành cho học sinh THCS
Tài liệu Python và IDLE V1
  Python là một ngôn ngữ lập trình dạng thông dịch, do đó có ưu điểm tiết kiệm thời gian phát triển ứng dụng vì không cần phải thực hiện biên dịch và liên kết. Trình thông dịch có thể được sử dụng để chạy file script, hoặc cũng có thể được sử dụng theo cách tương tác. Ở chế độ tương tác, trình thông dịch Python tương tự shell của các hệ điều hành họ Unix, tại đó, ta có thể nhập vào từng biểu thức rồi gõ Enter, và kết quả thực thi sẽ được hiển thị ngay lập tức. Đặc điểm này rất hữu ích cho người mới học, giúp họ nghiên cứu tính năng của ngôn ngữ; hoặc để các lập trình viên chạy thử mã lệnh trong suốt quá trình phát triển phần mềm.
Tài liệu này được xây dựng dựa trên các nội dung học sinh đã được học ôn với ngôn ngữ lập trình C++ của các năm học trước để học sinh dễ dàng chuyển từ ngôn ngữ lập trình C++ dùng CodeBlocks viết chương trình  sang ngôn ngữ Python dùng IDLE để viết chương trình.
I. Hướng dẫn cài và sử dụng IDLE Python để thực hành Python.
Click vào đây để xem
II. Tài liệu Python
1. Chủ đề 1. Làm quen với Python.
1.1. Các phép toán số học và một số hàm toán học.
1.2. Xuất dữ liệu mặc định và căn lề  ra màn hình.
1.2.1. Xuất mặc định.
1.2.2. Xuất căn lề.
1.2.3. Số chữ số thập phân. 
2. Chủ đề 2. Kiểu dữ liệu và hằng, biến.
2.1. Một số kiểu dữ liệu cơ bản thường dùng trong Python (dành cho học sinh phổ thông)
2.1.1. Kiểu số nguyên (int).
2.1.2. Kiểu số thực (float).
2.1.3. Kiểu xâu kí tự (str).
2.1.4. Kiểu logic (Kiểu luận lý)
2.1.5. Mảng (array)
2.1.6. Danh sách (list)
2.1.7. Tuple.
2.2. Cách khai báo và sử dụng biến hằng, phép gán.
2.3. Nhập dữ liệu từ bàn phím, từ tệp (đọc tệp) , xuất tệp (ghi tệp).
2.4. Chương trình con-Hàm người dùng tự định nghĩa.
3. Chủ đề 3. Phép so sánh, phép toán logic và câu lệnh điều kiện, lệnh lặp.
3.1. Các phép so sánh và phép toán logic trong Python
3.2. Câu lệnh điều kiện if, switch case ...
3.3. Câu lệnh lặp for, while, do - while.
4. Chủ đề 4. Mảng một chiều (số nguyên, số thực).
4.1.1. Mảng (array)
4.1.2. Danh sách (list)
4.1.3. Tuple.
4.2. Sắp xếp tăng giảm (tự code sắp xếp, sử dụng hàm có sẵn - ưu tiên sử dụng hàm sort có sẵn).
4.2.1. Mảng (array)
4.2.2. Danh sách (list)
4.2.3. Tuple.
4.3. Kiểm tra xem giá trị X có xuất hiện trong mảng hay không? Xuất hiện bao nhiêu lần và các vị trí xuất hiện (nếu có)?
4.3.1. Mảng (array)
4.3.2. Danh sách (list)
4.3.3. Tuple.
4.4. Chèn thêm phần tử X vào mảng (tại vị trí nào đó hoặc mảng đã sắp xếp sao cho vẫn đảm bảo thứ tự sắp xếp).
4.4.1. Mảng (array)
4.4.2. Danh sách (list)
4.4.3. Tuple.
4.5. Xóa phần tử của mảng (tại vị trí nào đó, xóa các phần tử trùng lặp - sau khi xóa, mỗi phần tử trong mảng là duy nhất).
4.5.1. Mảng (array)
4.5.2. Danh sách (list)
4.5.3. Tuple.
4.6. Kiểm tra xem có phải là mảng đối xứng không?
4.6.1. Mảng (array)
4.6.2. Danh sách (list)
4.6.3. Tuple.
4.7. Tìm ƯCLN của mọi phần tử trong mảng.
4.7.1. Mảng (array)
4.7.2. Danh sách (list)
4.7.3. Tuple.
4.8. Tìm BCNN của mọi phần tử trong mảng.
4.8.1. Mảng (array)
4.8.2. Danh sách (list)
4.8.3. Tuple.
5. Chủ đề 5. Xâu kí tự.
5.1. Nhập, xuất xâu.
5.2. Các thao tác cơ bản với xâu.
5.3. Chuyển đổi số kiểu số sang xâu và ngược lại.
5.4. Kiểm tra xem một kí tự trong xâu có phài là chữ số hay không?
5.5. Chuyển đổi chữ HOA - chữ thường.
5.6. Chuẩn hóa xâu.
5.6.1. Xóa kí tự dấu cách thừa trong xâu.
5.6.2. Chuẩn hóa danh từ riêng.
6. Chủ đề 6. Mảng 2 chiều (Bỏ-THCS không học phần này)
6.1. Kiến thức về toán ma trận.
6.2. Mảng hai chiều.

7. Chủ đề 7. Luyện tập-Giải đề.
- Tin 8 cấp cấp huyện các năm
- Tin 9 cấp huyện, tỉnh các năm
- Vào 10 chuyên tin các năm
NỘI DUNG TÀI LIỆU CHI TIẾT.
II. Tài liệu Python
1. Chủ đề 1. Làm quen với Python.
Mục tiêu:
- Ghi chú thích trong Python.
- Các phép toán với dữ liệu kiểu số cơ bản (Toán tử số học): Cộng, trừ, nhân, chia, chia lấy phần dư, chia lấy phần nguyên.
- Xuất ra kết quả gồm mặc định và có định dạng (số nguyên, số thực).
Kiến thức:
- Ghi chú thích trong Python:
+ Chú thích một dòng: Sử dụng ký tự # để bắt đầu một chú thích. Chú thích bắt đầu sau dấu # cho đến khi bắt đầu một dòng mới. Khi thông dịch, Python sẽ bỏ qua những chú thích này.
#Chương trình Python đầu tiênprint('Chao bạn đến với Python')

+ Chú thích nhiều dòng: Sử dụng 3 dấu nháy đơn ' ' ' hoặc nháy kép " " ". Nội dung chú thích năm trong cặp dấu nháy đó.
'''Chương trình Python đầu tiênDùng chú thích cho nhiều dòng'''print('Chao bạn đến với Python')

1.1. Các phép toán số học và một số hàm toán học trong Python (Toán tử số học)
* Các phép toán số học
Kí hiệu Phép toán Kiểu dữ liệu Thứ tự ưu tiên
+ Cộng int, float 6
- Trừ int, float 7
* Nhân int, float 2
/ Chia int, float 3
** Lũy Thừa int, float 1
// Chia Lấy Phần Nguyên int 5
% Chia Lấy Phần Dư int 4
* Một số hàm toán học
TT Tên hàm Ý nghĩa Thư viên
1 max(a,b) Trả về giá trị lớn nhất trong hai số a, b  
2 min(a,b) Trả về giá trị nhỏ nhất trong hai số a, b  
3 pow(x,y) Trả về x mũ y. nếu import math thì math.pow(a,b) 
4 math.sqrt(x) Trả về căn bậc 2 của x. import math
5 abs(x)  trị tuyệt đối của số x kiểu của x  
6 divmod(a,b) để tìm đồng thời phần nguyên và phần dư của phép chia a cho b  
7 sum((a, b, c, ….)) tính tổng của kiểu dữ liệu phức hợp số có thể bộ giá trị hoặc danh sách  
8 math.hypot(x,y) Trả về độ dài cạnh huyền của tam giác vông có 2 cạnh góc vuông là x và y. import math
9 math.gcd(a,b) Trả về UCLN của hai số a và b import math
10 math.factorial(n) Trả về giai thừa n, n>=0 mport math

Ví dụ sử dụng các phép toán số học trong chương trình:
print('Các phép toán số học, ví dụ 9 và 4')print('9 cộng 4: 9+4=',9+4)print('9 trừ 4: 9-4 = ', 9-4)print('9 nhân 4: 9*4 =',9*4)print('9 chia 4: 9/4 = ', 9/4)print('9 lũy thừa 4: 9**4 =',9**4)print('9 chia 4 lấy phần nguyên: 9//4 = ',9//4)print('9 chia 4 lấy phần dư: 9%4 = ',9%4)

1.2. Xuất dữ liệu mặc định và căn lề ra màn hình.
1.2.1. Xuất mặc định.
print('Xuất nội dung ra mặc định xuống dòng')print('Xuất nội dung ra không xuống dòng.', end = '')print('Xuất nội dung ra nối tiếp với nội dung dòng ngay trước')

– Quan sát kết quả ta thấy mặc định lệnh print sẽ xuống dòng mới. Để in và không xuống dòng ta thêm end= ‘’ làm tham số cuối cùng trong lệnh print.

1.2.2. Xuất căn lề.
- Với n là số vị trí (số chỗ).
Phương thức ljust(n): Căn lề trái một chuỗi trong Python
Phương thức center(n): Căn lề giữa một chuỗi trong Python
Phương thức rjust(n): Căn lề phải một chuỗi trong Python
Phương thức zfill(n): Căn lề phải một chuỗi và lấp khoảng trắng trong chuỗi bằng số 0.
print('Xuất nội căn lề phải'.rjust(80))print('Xuất nội căn lề trái.'.ljust(80))print('Xuất nội dung căn giữa'.center(80))

1.2.3. Số chữ số thập phân.
print('%.2f' %(8.1000568941))print ("{0:.2f}".format(8.1000568941))print('%.5f' %(8.1000568941))print ("{0:.5f}".format(8.1000568941))


 
print("Không hiện phần thập phân: %d, Có hiện phần thập phân: %.2f" %(8.1000568941, 8.1000568941))print("Không hiện phần thập phân: %5d, Có hiện phần thập phân: %10.2f" %(8.1000568941, 8.1000568941))


Bài tập Viết chương trình sử dụng các phép toán số học với hai số nguyên (Kết quả của phép chia có định dạng 2 chữ số thập phân)
print('9+5= ',9+5)print('9-5= ',9-5)print('9*5= ',9*5)print('9/5= %.2f' %(9/5))print('9**5= ',9**5)print('9//5= ',9//5)print('9%5= ',9%5)


2. Chủ đề 2. Kiểu dữ liệu và hằng, biến.
2.1. Một số kiểu dữ liệu cơ bản thường dùng trong Python (dành cho học sinh phổ thông).
Từ Python 3.X không sử dụng số bit cố định để biểu diễn như trong các ngôn ngữ khác. Tùy thuộc vào giá trị cụ thể Python sẽ chọn số bit phù hợp. Giá trị nguyên lớn nhất mà Python biểu diễn được chỉ phụ thuộc vào bộ nhớ.
2.1.1. Kiểu số nguyên (int).
Số nguyên bao gồm các số nguyên dương (1, 2, 3, ..), các số nguyên âm (-1, -2, -3) và số 0. Từ Python 3.X, kiểu dữ liệu số nguyên là vô hạn. Điều này cho phép bạn tính toán với những số cực kì lớn.
2.1.2. Kiểu số thực (float).
- Kiểu dữ liệu số thực là tập hợp các số nguyên và số thập phân. Phần nguyên và phần thập phân được tách nhau bởi dấu thập phân là dấu chấm ( . )
- Kiểu số thực Decimal:
+ Thư viện: import decimal
import decimalprint(decimal.Decimal(10) / decimal.Decimal(3))
from decimalimport Decimalprint(Decimal(10) / Decimal(3))


- Phân số gồm hai phần là tử số và mẫu số.
+ Thư viện: import fractions
+ Để tạo phân số trong, sử dụng hàm Fraction với cú pháp sau:
fractions.Fraction(<Tử_số>, <Mẫu_số>)

import fractionsprint(fractions.Fraction(10,3))
from fractionsimport Fractionprint(Fraction(10, 3))

2.1.3. Kiểu xâu kí tự (str).

- Chuỗi ký tự trong python được bao quanh bởi dấu ngoặc kép đơn hoặc dấu ngoặc kép. Python không có kiểu ký tự (character), ký tự đơn giản được coi là một string có độ dài 1. Các ký tự trong string được đánh chỉ số bắt đầu từ 0. Bạn có thể truy cập vào các chuỗi con (substring) thông qua chỉ số.
- Mỗi string được có một địa chỉ lưu trữ trên bộ nhớ (memory). Tất cả các thao tác với string đều tạo ra một đối tượng khác. Chẳng hạn như việc bạn muốn nối (concatenate) một string vào một string khác, hành động này tạo ra một string khác trên bộ nhớ.
- Ví dụ:
print('Python')#Lấy kí tự đầu tênprint('Python'[0])#Lấy từ kí tự thứ 0 đến trước kí tự thứ 3print('Python'[0:3])#Lấy từ kí tự thứ 1 đến trước kí tự thứ 3print('Python'[1:3])#Lấy từ kí tự thứ 2 đến hếtprint('Python'[2:])


- Các phép toán và các hàm, phương thức với chuỗi.
+ Nối (concatenate) 2 string, tạo thành một string mới: "Hello" +"Python" ==> "Hello Python”
+ Tạo một string mới bằng cách nối (concatenate) nhiều lần bản copy của cùng môt string: "Hello"*2 ==> "HelloHello”
+ Lấy kí tự, lấy chuỗi con: Xem ví dụ trên.
+ in Trả về True nếu ký tự tồn tại trong string đã cho.
+ not in Trả về True nếu ký tự không tồn tại trong string đã cho.
+ upper() đổi sang và trả về chữ hoa: 'Python'.upper()
+ lower() đổi sang và trả về chữ thường: 'Python'.lower()
+ capitalize() viết hoa ký tự đầu tiên của chuỗi và chuyển tất cả các chữ hoa khác thành chữ thường và tạo thành chuỗi mới:  'CHÀO CÁC BAN đến VỚi pYThon'.capitalize()
+ title() viết hoa ký tự đầu tiên của cụm từ trong chuỗi và chuyển tất cả chữ hoa khác thành chữ thường (viết hoa danh từ riêng): 'CHÀO CÁC BAN đến VỚi pYThon'.title()
+ swapcase() trong python để chuyển tất cả chữ hoa thành chữ thường và tất cả chữ thường thành chữ hoa.
+ Chuyển chuỗi sang số: int('123'), float('123.25')
+ Chuyển số sang chuỗi: str(): Được sử dụng để chuyển đổi kiểu số thành kiểu chuỗi: str(6), str(123.14)

a= 25.14s= str(a)+str(6)print(s)
+ Kiểm tra một chuỗi có phải là kí tự số hay không: s.isdigit() trả về True nếu là kí tự số, ngược lại trả về False
s= '25'T = s.isdigit()print(T)
+ Tìm vị trí xuất hiện chuỗi con: 
Hàm find() trong Python xác định xem chuỗi s2 có xuất hiện trong chuỗi s1 hoặc chuỗi con đã cho của s1 (nếu bạn cung cấp chỉ mục bắt đầu beg và chỉ mục kết thúc end), nếu xuất hiện thì trả về chỉ mục của s2, còn không thì trả về -1. s1.find(s2, beg=0 end=len(s1))
Hàm index() trong Python xác định xem chuỗi s2 có xuất hiện trong chuỗi s1 hoặc chuỗi con đã cho của s1 (nếu bạn cung cấp chỉ mục bắt đầu beg và chỉ mục kết thúc end), nếu xuất hiện thì trả về chỉ mục của s2, còn không thì tạo ra một ngoại lệ. s1.index(s2, beg=0 end=len(s1))
s1= 'Ngôn ngữ Python's2= 'Python'v1 = s1.find(s2)v2 = s1.index(s2)print(v1)print(v2)

2.1.4. Kiểu logic (Kiểu luận lý)
Python 3 cung cấp sẵn kiểu dữ liệu Boolean. Một đối tượng (object) boolean sẽ nhận 1 trong 2 giá trị True hoặc False.
2.1.5. Mảng (array)
- Mảng là một phần 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, số thực, mảng chuỗi, …
- Thư viện: import array hoặc import array as arr hoặc  from array import *
- Tạo mảng: Tên_mảng = array.array('Mã kiểu dữ liệu',[danh sách các phần tử (có thể rỗng)])
- Bảng mã kiểu dữ liệu.
Mã kiểu C Type Python Type Kích thước tối thiểu tính theo byte
'b' signed char int 1
'B' unsigned char int 1
'u' Py_UNICODE Unicode character 2
'h' signed short int 2
'H' unsigned short int 2
'i' signed int int 2
'I' unsigned int int 2
'l' signed long int 4
'L' unsigned long int 4
'f' float float 4
'd' double float 8
+ Ví dụ: a= array.array('i',[]) hoặc a= array.array('i',[5, 6, 8, 9])
+ Truy cập đến các phần tử của mảng bằng chỉ số (Index) bắt đầu từ 0, ví dụ: a[1] là phần tử thứ hai
+ Truy cập vào một dải phần tử trong mảng, sử dụng toán tử cắt lát là dấu hai chấm (:), ví dụ: 
import array'''Khai báo mang a có 6 phần tử kiểu số nguyên '''a= array.array('i',[5, 6, 8, 9, 6, 7])# Phần tử chỉ số thứ 1 đến trước chỉ số thứ 4print(a[1:4])# Phần tử chỉ số thứ 0 đến trước chỉ số thứ 3print(a[:-3])# Phần tử chỉ số thứ 3 đến hếtprint(a[3:])# Phần tử đầu tiên đến cuối cùngprint(a[:])


- Thay đổi phần tử của mảng: a[chỉ số] = giá trị; a[dải chỉ số] = dãy giá trị 
-  Thêm một phần tử vào vị trí cuối cùng của mảng: a.append(giá trị)
-  Thêm nhiều phần tử từ vị trí cuối cùng của mảng: a.extend([giá trị 1, giá trị 2, giá trị 3, ...])
-  Thêm giá trị x tại vị trí được chỉ định i: insert(i, x)
-  Nối hai mảng bằng toán tử +, ví dụ nối mảng a với mảng b: c = a+b
-  a.pop(i): – Hàm này xóa các phần tử tại vị trí i được đề cập trong đối số của nó và trả về nó.
-  a.remove(giá trị): – Hàm này được sử dụng để xóa giá trị xuất hiện đầu tiên được đề cập trong các đối số của nó. Không trả về.
-  a.index(giá trị) : – Hàm này trả về chỉ mục của lần xuất hiện đầu tiên của giá trị được đề cập trong các đối số.
-  a. reverse() : – Hàm này đảo ngược array lại.
- len(a) độ dài (số lượng phần tử) của mảng a.
- a.count(giá trị) đếm số lần xuất hiện của một giá trị.
- Sắp xếp mảng: sorted(Tên mảng, kiểu sắp xếp). Với hàm này tạo ra một bản sao được sắp xếp chứ không làm thay đổi mảng gốc.
+ Săp xếp tăng dần: sorted(a) hoặc sorted(a, reverse=False)
+ Sắp xếp giảm dần: sorted(a, reverse=True)
+ Nếu muốn sắp xếp xong gán lại cho mảng gốc thì: a= sorted(a) sắp xếp mảng a tăng dần rồi gán lại cho mảng a.
2.1.6. Danh sách (list)

Mảng và lists trong Python có điểm tương đồng khi cùng lưu trữ các giá trị. Tuy nhiên, sự khác biệt nằm ở các giá trị mà chúng lưu trữ. Một list có thể lưu trữ bất kỳ loại giá trị nào như số xen kẽ, chuỗi, v.v. Trong khi đó, mảng lưu trữ các giá trị kiểu dữ liệu đơn lẻ. Ví dụ, bạn có thể có một mảng số nguyên, một mảng chuỗi, v.v.
List trong Python có thể được tạo bằng cách đặt các phần tử bên trong dấu ngoặc vuông []. Ví dụ: List = [] hoặc List = [10, 20, 14] hoặc List = [1, 2, 'Geeks', 4, 'For', 6, 'Geeks']
Index bắt đầu từ 0, nên một list có 5 phần tử sẽ có index từ 0 đến 4. Python cho phép lập chỉ mục âm cho các chuỗi. Index -1 là phần tử cuối cùng, -2 là phần tử thứ 2 từ cuối cùng lên. Nói đơn giản là index âm dùng khi bạn đếm phần tử của chuỗi ngược từ cuối lên đầu.
Phương thức list trong Python.
append(): Thêm phần tử vào cuối list.
extend(): Thêm tất cả phần tử của list hiện tại vào list khác.
insert(): Chèn một phần tử vào index cho trước.
remove(): Xóa phần tử khỏi list.
pop(): Xóa phần tử khỏi list và trả về phần tử tại index đã cho.
clear(): Xóa tất cả phần tử của list.
index(): Trả về index của phần tử phù hợp đầu tiên.
count(): Trả về số lượng phần tử đã đếm được trong list như một đối số.
sort(): Sắp xếp các phần tử trong list theo thứ tự tăng dần.
reverse(): Đảo ngược thứ tự các phần tử trong list.
copy(): Trả về bản sao của list.
all(): Trả về giá trị True nếu tất cả các phần tử của list đều là true hoặc list rỗng.
any(): Trả về True khi bất kỳ phần tử nào trong list là true. Nếu list rỗng hàm trả về giá trị False.
enumerate(): Trả về đối tượng enumerate, chứa index và giá trị của tất cả các phần tử của list dưới dạng tuple.
len(): Trả về độ dài (số lượng phần tử) của list.
list(): Chuyển đổi một đối tượng có thể lặp (tuple, string, set, dictionary) thành list.
max(): Trả về phần tử lớn nhất trong list.
min(): Trả về phần tử nhỏ nhất trong list.
sorted(): Trả về list mới đã được sắp xếp.
sum(): Trả về tổng của tất cả các phần tử trong list.
2.1.7. Tuple.
Tuple trong Python là một chuỗi các phần tử có thứ tự giống như list. Sự khác biệt giữa list và tuple là chúng ta không thể thay đổi các phần tử trong tuple khi đã gán, nhưng trong list thì các phần tử có thể thay đổi.
Tuple thường được sử dụng cho các dữ liệu không cho phép sửa đổi và nhanh hơn list vì nó không thể thay đổi tự động. Một tuple được định nghĩa bằng dấu ngoặc đơn (), các phần tử trong tuple cách nhau bằng dấu phẩy (,).

2.2. Cách khai báo và sử dụng hằng, biến hằng, phép gán.
Trong ngôn ngữ lập trình Python, khai báo biến không cần viết tên kiểu dữ liệu. Biến sẽ có kiểu dữ liệu tương ứng với kiểu dữ liệu của giá trị được gán. Cùng một biến có thể được gán giá trị thuộc một kiểu dữ liệu khác nhau tại mỗi thòi điểm gán. Cú pháp khai báo biến như sau:
Tên_biến = Giá trị ban đầu
- Ví du:
a= 9b= 5print('a= ', a, type(a))print('b= ', b, type(b))c= a*bprint('c= ', c, type(c))c= a/bprint('c= ', c, type(c))

- Ví dụ khai báo và kiểm tra kiểu dữ liệu của biến
a= 9print('a= ', a, type(a))a= 5.0print('a= ', a, type(a))a= a**2print('a= ', a, type(a))a= 'Ngôn ngữ Python'print('a= ', a, type(a))

- Ví dụ các phép toán số học với hai số nguyên a và b.
a= 9b= 5print('a+b= ',a+b)print('a-b= ',a-b)print('a*b= ',a*b)print('a/b= %.2f' %(a/b))print('a**b= ',a**b)print('a//b= ',a//b)print('a%b= ',a%b)


2.3. Nhập dữ liệu từ bàn phím, từ tệp (đọc tệp) , xuất tệp (ghi tệp).
2.3.1. Nhập/xuất với bàn phím, màn hình.
- Lệnh xuất: print
- Lệnh nhập: input
2.3.1.1. Nhập bình thường, không kiểm tra dữ liệu nhập.
print('Nhập họ và tên:', end =' ')ho_ten = input()print('Họ và tên bạn vừa nhập thuộc kiểu dữ liệu: ',type(ho_ten))a= (int)(input('Mời bạn nhâp số nguyên a= '))print('Số ',a,' bạn vừa nhập thuộc kiểu dữ liệu: ',type(a))b= (float)(input('Mời bạn nhâp số thực b= '))print('Số ',b,' bạn vừa nhập thuộc kiểu dữ liệu: ',type(b))T=a+bprint('Tổng của a+b là: ',T)

2.3.1.2. Kiểm tra dữ liệu nhập vào (Sử dụng sau khi học xong lệnh while).
n= 0while(n<1):    try:        n= int(input('Nhập vào số nguyên dương n: '))        print('Số ban vừa nhập là: ', n)    except:            print('Bạn phải nhập dữ liệu là kiểu số nguyên')    continue #Quay lại đầu vòng lặp while

 
#Nhập vào số nguyên dương 1<= n <=10n= 0while((n<1)or(n>10)):    try:        n= int(input('Nhập vào số nguyên dương 1<= n <=10: '))    except:        print('Bạn phải nhập dữ liệu là kiểu số nguyên', end = '.')    continue #Quay lại đầu vòng lặp whilen=n+10print('Số bạn vừa nhập đã được +10 là: ', n)

2.3.2. Đọc/ghi tệp.
2.3.2.1. Các chế độ mode khi mở một file.
MODE MÔ TẢ
‘r’ Chế độ chỉ được phép đọc.
‘r+’ Chế độ được phép đọc và ghi
‘rb’ Mở file chế độ đọc cho định dạng nhị phân. Con trỏ tại phần bắt đầu của file
‘rb+’
‘r+b’
Mở file để đọc và ghi trong định dạng nhị phân. Con trỏ tại phần bắt đầu của file
‘w’ Mở file để ghi. Nếu file không tồn tại thì sẽ tạo mới file và ghi nội dung, nếu file đã tồn tại thì sẽ bị cắt bớt (truncate) và ghi đè lên nội dung cũ
‘w+’ Mở file để đọc và ghi. Nếu file không tồn tại thì sẽ tạo mới file và ghi nội dung, nếu file đã tồn tại thì sẽ bị cắt bớt (truncate) và ghi đè lên nội dung cũ
‘wb’ Mở file để ghi cho dạng nhị phân. Nếu file không tồn tại thì sẽ tạo mới file và ghi nội dung, nếu file đã tồn tại thì sẽ bị cắt bớt (truncate) và ghi đè lên nội dung cũ
‘wb+’
‘w+b’
Mở file để đọc và ghi cho dạng nhị phân. Nếu file không tồn tại thì sẽ tạo mới file và ghi nội dung, nếu file đã tồn tại thì sẽ bị cắt bớt (truncate) và ghi đè lên nội dung cũ
‘a’ Mở file chế độ ghi tiếp. Nếu file đã tồn tại rồi thì nó sẽ ghi tiếp nội dung vào cuối file, nếu file không tồn tại thì tạo một file mới và ghi nội dung vào đó.
‘a+’ Mở file chế độ đọc và ghi tiếp. Nếu file đã tồn tại rồi thì nó sẽ ghi tiếp nội dung vào cuối file, nếu file không tồn tại thì tạo một file mới và ghi nội dung vào đó.
‘ab’ Mở file chế độ ghi tiếp ở dạng nhị phân. Nếu file đã tồn tại rồi thì nó sẽ ghi tiếp nội dung vào cuối file, nếu file không tồn tại thì tạo một file mới và ghi nội dung vào đó.
‘ab+’
‘a+b
Mở file chế độ đọc và ghi tiếp ở dạng nhị phân. Nếu file đã tồn tại rồi thì nó sẽ ghi tiếp nội dung vào cuối file, nếu file không tồn tại thì tạo một file mới và ghi nội dung vào đó.
‘x’ Mở file chế độ ghi. Tạo file độc quyền mới (exclusive creation) và ghi nội dung, nếu file đã tồn tại thì chương trình sẽ báo lỗi
‘x+’ Mở file chế độ đọc và ghi. Tạo file độc quyền mới (exclusive creation) và ghi nội dung, nếu file đã tồn tại thì chương trình sẽ báo lỗi
‘xb’ Mở file chế độ ghi dạng nhị phân. Tạo file độc quyền mới và ghi nội dung, nếu file đã tồn tại thì chương trình sẽ báo lỗi
‘xb+’
‘x+b’
Mở file chế độ đọc và ghi dạng nhị phân. Tạo file độc quyền mới và ghi nội dung, nếu file đã tồn tại thì chương trình sẽ báo lỗi
‘b’ Mở file ở chế độ nhị phân
‘t’ Mở file ở chế độ văn bản (mặc định)
2.3.2.2. Lệnh mở/đóng file.
Lưu ý: Ký tự r trước đường dẫn tới file giúp bỏ qua các ký tự đặc biệt của string trong Python. Chẳng hạn, nếu không có ký tự r này thì trong đường dẫn D: extDemo.txt này sẽ bị coi là dấu tab, dẫn tới xảy ra lỗi không mong muốn.
file = open(r'đường_dẫn_tới_file',  'mode')
Khi làm việc với các tệp văn bản chữ Việt có dấu phải chỉ định loại mã hóa, ví dụ là: encoding = 'utf-8'. Nếu không, hệ thống chỉ chấp nhận ghi các ký hiệu tiếng Anh (chữ Việt không dấu).
file  = open(r'đường_dẫn_tới_file', 'mode', encoding = 'utf-8')
- Đóng file: file.close()
Ví dụ:
#fin=open(r'DEMO.INP','r',encoding ='utf-8')#fout=open(r'DEMO.OUT','w',encoding ='utf-8')fin=open(r'DEMO.INP','r')fout=open(r'DEMO.OUT','w')a= int(fin.readline())b= int(fin.readline())T=a+bfout.write('{}'.format(T))#fout.write(str(T))fin.close()fout.close()

 
fin=open(r'DEMO.INP','r',encoding ='utf-8')fout=open(r'DEMO.OUT','w',encoding ='utf-8')#fin=open(r'DEMO.INP','r')#fout=open(r'DEMO.OUT','w')hoten= fin.readline()diachi= fin.readline()fout.write(hoten)fout.write(diachi)fin.close()fout.close()
import array#fin=open(r'DEMO.INP','r',encoding ='utf-8')#fout=open(r'DEMO.OUT','w',encoding ='utf-8')fin=open(r'DEMO.INP','r')fout=open(r'DEMO.OUT','w')n= int(fin.readline())sa= fin.readline()dayso=sa.split(' ')a= array.array('i',[])for so in dayso:    a.append(int(so))T=0for pt in a:    T=T+pt;    fout.write('{} '.format(pt))fout.write('')fout.write('{}'.format(T))fin.close()fout.close()


2.4. Chương trình con-Hàm người dùng tự định nghĩa.
- Chương trình con-Hàm là một nhóm lệnh, yêu cầu chương trình phải hoàn thành một công việc, nhiệm vụ nào đó:
+ Có thể trả lại một  kết quả.
+ Có thể trả lại nhiều kết quả.
+ Có thể không trả lại kết quả.
- Định nghĩa hàm:
def ten_ham(tham số 1, tham số 2= giá trị mặc định (nếu có), tham số 3, tham số 4 = giá trị mặc định (nếu có),....):    Các câu lệnh    return kết quả 1, kết quả 2, ... #nếu không có kết quả trả về thì bỏ lệnh này.

Từ khóa def: Đánh dấu sự bắt đầu của tiêu đề hàm.
ten_ham: Là định danh duy nhất dành cho hàm. Việc đặt tên hàm phải tuân thủ theo quy tắc viết tên và định danh trong Python.
Các tham số: Chúng ta truyền giá trị cho hàm thông qua các tham số này. Chúng là tùy chọn, có thể gán giá trị mặc định
Dấu hai chấm (:): Đánh dấu sự kết thúc của tiêu đề hàm.
docstring: Chuỗi văn bản tùy chọn để mô tả chức năng của hàm.
Các câu lệnh: Một hoặc nhiều lệnh Python hợp lệ tạo thành khối lệnh. Các lệnh này phải có cùng một mức thụt đầu dòng (thường là 4 khoảng trắng).
Lệnh return: Lệnh này là tùy chọn, dùng khi cần trả về giá trị từ hàm. Nếu không có kết quả trả lại thì bỏ qua lệnh này. Nếu trả lại từ 2 giá trị trở lên thì kết quả trả lại là một kiểu dữ liệu Tuple trong Python là một dạng dữ liệu mà các phần tử trong đó được xắp xếp theo thứ tự và không thể thay đổi được giá trị sau khi được khai báo.
Ví dụ 1: Không trả lại kết quả
def Ten(ten = 'Vàng Văn Quyn'):    """Mô tả chức năng của nếu cần"""    print("Xin chào, " + ten + "!")

- Gọi hàm dùng tham số mặc định
def Ten(ten = 'Vàng Văn Quyn'):    """Mô tả chức năng của nếu cần"""    print("Xin chào, " + ten + "!")#Gọi hàm TênTen()

- Gọi hàm truyền tham số:
def Ten(ten = 'Vàng Văn Quyn'):    """Mô tả chức năng của nếu cần"""    print("Xin chào, " + ten + "!")#Gọi hàm TênTen('Ngôn ngữ lập trình Python')

Ví dụ 2: Trả lại một kết quả.
def Chuvi_HCN(a= 1, b = 1):    '''Hàm tính chu vi hình chữ nhật và trả lại kết quả'''    chuvi = (a+b)*2    return chuvi

- Chương trình:
def Chuvi_HCN(a= 1, b = 1):    '''Hàm tính chu vi hình chữ nhật và trả lại kết quả'''    chuvi = (a+b)*2    return chuvi#Dùng tham số mặc định.print('Chu vi hình chữ nhật:',Chuvi_HCN())#Dùng tham số b mặc địnhprint('Chu vi hình chữ nhật:',Chuvi_HCN(6))#Truyền đủ các tham số.print('Chu vi hình chữ nhật:',Chuvi_HCN(6,5))

Ví dụ 3: Trả lại nhiều kết quả. kết quả trả lại là một kiểu dữ liệu Tuple
def CVDT_HCN(a= 1, b = 1):    '''Hàm tính chu vi và diện tích hình chữ nhật và trả lại kết quả'''    chuvi = (a+b)*2    dientich = a*b    return chuvi, dientich, 'Trả lại cả chu vi và diện tích'

- Chương trình:
def CVDT_HCN(a= 1, b = 1):    '''Hàm tính chu vi và diện tích hình chữ nhật và trả lại kết quả'''    chuvi = (a+b)*2    dientich = a*b    return chuvi, dientich, 'Trả lại cả chu vi và diện tích'#Dùng tham số mặc định.print('Chu vi hình chữ nhật:',CVDT_HCN())#Dùng tham số b mặc địnhprint('Chu vi hình chữ nhật:',CVDT_HCN(6))#Truyền đủ các tham số.print('Chu vi hình chữ nhật:',CVDT_HCN(6,5))


3. Chủ đề 3. Phép so sánh, phép toán logic và câu lệnh điều kiện, lệnh lặp.
3.1. Các phép so sánh và phép toán logic trong Python.
* Các phép so sánh (ví dụ a có giá trị là 5 và b có giá trị là 7)
Toán tử Chú Thích Ví Dụ
== So sánh giá trị của các đối số xem có bằng nhau hay không.
Nếu bằng nhau thì kết quả trả về sẽ là True và ngược lại sẽ là False.
a == b  // False
!= So sánh giá trị của các đối số xem có khác nhau hay không.
Nếu khác nhau thì kết quả trả về sẽ là True và ngược lại sẽ là False.
a != b //True
< Dấu < đại diện cho phép toán nhỏ hơn, nếu đối số 1 nhỏ hơn đối số 2 thì kết quả sẽ trả về là True và ngược lại sẽ là False. a < b //True
> Dấu > đại diện cho phép toán lớn hơn, nếu đối số 1 lớn hơn đối số 2 thì kết quả sẽ trả về là True và ngược lại sẽ là False. a > b //False
<= Dấu > đại diện cho phép toán nhỏ hơn hoặc bằng, nếu đối số 1 nhỏ hơn hoặc bằng đối số 2 thì kết quả sẽ trả về là True và ngược lại sẽ là False. a <= b //True
>= Dấu > đại diện cho phép toán lớn hơn hoặc bằng, nếu đối số 1 lớn hơn hoặc bằng đối số 2 thì kết quả sẽ trả về là True và ngược lại sẽ là False. a>= b //False

* Các phép toán logic
Toán Tử Chú Thích
and Nếu các vế của toán tử này đều là True thì kết quả sẽ là True và ngược lại nếu 1 trong các vế là False thì kết quả trả về sẽ là False.
or Nếu 1 trong các vế là True thì kết quả trả về sẽ là True và ngược lại nếu tất cả các vế là False thì kết quả trả về sẽ là False.
not Đây là dạng phủ định, nếu biểu thức là True thì nó sẽ trả về là False và ngược lại.
* Các phép toán xác thực để xác thực hai giá trị xem nó có bằng nhau hay không.
Giả sử: a = 4, b =5
Toán Tử Chú Thích Ví Dụ
is Toán tử này sẽ trả về True nếu a == b và ngược lại  a is b //False
not is Toán tử này sẽ trả về True nếu a != b và ngược lại a is not b //True

3.2. Câu lệnh điều kiện if, switch case …
Câu lệnh if.
chương trình đánh giá điều kiện và sẽ thực hiện các lệnh khi điều kiện là true. Nếu điều kiện false thì lệnh sẽ không được thực hiện.
if điều kiện:   khối lệnh
Ví dụ:
num = 3if num > 0:    print(num, "là số dương. In ra khi giá trị biến num > 3")    print("Dòng này luôn được in.")

- Sơ đồ:

Lệnh if...else
Lệnh if...else kiểm tra điều kiện và thực thi khối lệnh if nếu điều kiện đúng. Nếu điều kiện sai, khối lệnh của else sẽ được thực hiện.
if điều kiện:    Khối lệnh 1-Khối lệnh của ifelse:    Khối lệnh 2-Khối lệnh của else

Ví dụ:
num = 3if num >= 0:    print(num,'là số không âm')else:    print('Số âm')


Sơ đồ:

Lệnh if...elif...else
elif là viết gọn của else if, nó cho phép chúng ta kiểm tra nhiều điều kiện. Nếu điều kiện là sai, nó sẽ kiểm tra điều kiện của khối elif tiếp theo và cứ như vậy cho đến hết. Nếu tất cả các điều kiện đều sai nó sẽ thực thi khối lệnh của else. Chỉ một khối lệnh trong if...elif...else được thực hiện theo điều kiện. Có thể không có hoặc có nhiều elif, phần else là tùy chọn.
if điều kiện:    Khối lệnh của ifelif điều kiện:    Khối lệnh của elifelse:  Khối lệnh của else

- Ví dụ:
x = int(input('Nhập một số: '))if x < 0:    print('Số âm')elif x == 0:    print('Số 0')elif x == 1:    print('Số 1')else:    print('Số dương lớn hơn 1')

Sơ đồ:

- Các lệnh if lồng nhau.
có thể viết lệnh if...elif...else trong một khối lệnh if...elif...else khác, và tạo thành lệnh if lồng nhau. Không giới hạn số lệnh được lồng vào lệnh khác. Thụt đầu dòng là cách duy nhất để nhận diện mức độ lồng, do đó nó có thể gây rối, nhầm lẫn nên hạn chế sử dụng nếu có thể.
num = float(input('Nhập một số: '))if num >= 0:    if num == 0:        print('Số Không')    else:        print('Số dương')else:        print('Số âm')

Câu lệnh switch case ….
Python không có câu lệnh switch hoặc câu lệnh case.
3.3. Câu lệnh lặp for, while, do - while.
* Lệnh lặp for.
for bien_lap in chuoi_lap:    Khối lệnh

Ví dụ:
for chu in 'Python':    print(chu)

Hàm range(số bắt đầu, số kết thúc, khoảng cách giữa hai số). 
+ Số bắt đầu: Mặc định là 0.
+ Số kết thúc: Phải có.
+ Khoảng cách giữa hai số:  Mặc định là 1
Có thể sử dụng hàm range() để tạo ra một dãy số, giá trị các phần tử từ số bắt đầu đến số kết thúc – 1; Số lượng các phần tử = (Số kết thúc – Số bắt đầu)/Khoảng cách giữa hai số làm tròn đến phần nguyên theo toán học.
Ví dụ:
range(5): Tạo dãy số gồm 5 phần tử từ 0 đến 4.
range(1, 5): Tạo dãy số gồm 4 phần tử từ 1 đến 4.
range(3,20,3); Tạo dãy số gồm 6 phần tử từ 3 6 9 12 15 18
import mathfor i in range(3,20,3):    print (i)print(math.ceil((20-3)/3))

Ví dụ tính tổng các số tự nhiên lẻ từ 1 đến 9.
S=0for i in range(1,10,2):    S=S+iprint(S)

* Lệnh lặp while.
Trong vòng lặp while, điều_kiện sẽ được kiểm tra đầu tiên. Khối lệnh của vòng lặp chỉ được nạp vào nếu điều_kiện là true. Sau một lần lặp, điều_kiện sẽ được kiểm tra lại. Quá trình này sẽ tiếp tục cho đến khi điều_kiện là false. Trong Python mọi giá trị khác 0 đều là true, None và 0 được hiểu là false
while điều_kiện:    Khối lệnh

- Sơ đồ:

- Ví dụ tính tổng các số tự nhiên lẻ từ 1 đến 9.
S=0i=0while (i<9):    i=i+1    S=S+iprint(S)

* Lệnh lặp do … while.
- Python không có lệnh lặp do … while.
Lệnh break để kết thức lặp

4. Chủ đề 4. Mảng một chiều (số nguyên, số thực).
Cách khai báo mảng: Xem tại đây
4.1.1. Mảng (array)
- Nhập dữ liệu cho mảng từ bàn phím, in ra màn hình.
import arraya=array.array('i',[])for i in range(0,5):    print('a[',i,']= ',end='')        a.append((int)(input()))for i in range(0,5):    print(a[i])


-  Nhập dữ liệu cho mảng đọc, ghi tệp
+ Ví dụ cho tệp dữ liệu sau: dòng 1 là số nguyên dương n và dòng 2 là dãy gồm n số nguyên cách nhau ít nhất một dấu cách. Tính tổng các phần tử của dãy, ghi dãy số đọc được và tổng ra tệp
import arrayfin=open(r'DEMO.INP','r',encoding ='utf-8')fout=open(r'DEMO.OUT','w',encoding ='utf-8')#Đọc vào số n dòng 1n= int(fin.readline())#Đọc vào dãy số dòng 2sa= fin.readline()#tách các số bằng dấu cáchdayso=sa.split(' ')#Khai báo mảng a để chứa dãy sốa= array.array('i',[])#Lặp để lấy từng giá trị vào mảng afor so in dayso:    #Thêm giá trị nguyên lấy được vào cuối mảng    a.append(int(so))T=0#Lặpfor pt in a:    #Tính tổng    T=T+pt;    #Ghi các giá trị ra tệp cách nhau bỏi một dấu cách    fout.write('{} '.format(pt))#Xuống dòngfout.write('')#Ghi kết quả tổng tính đượcfout.write('{}'.format(T))#Đóng tệpfin.close()fout.close()


4.1.2. Danh sách (list)

4.1.3. Tuple.

4.2. Sắp xếp tăng giảm (tự code sắp xếp, sử dụng hàm có sẵn - ưu tiên sử dụng hàm sort có sẵn).

4.2.1. Mảng (array)
+ Dùng hàm có sẵn sorted(a) không làm thay đổi mảng gốc nên phải gán lại sau khi đã sắp xếp nếu muốn thay đổi trong mảng gốc.
a= sorted(a)
+ Tự code:
4.2.2. Danh sách (list)

4.2.3. Tuple.

4.3. Kiểm tra xem giá trị X có xuất hiện trong mảng hay không? Xuất hiện bao nhiêu lần và các vị trí xuất hiện (nếu có)?

4.3.1. Mảng (array)

4.3.2. Danh sách (list)

4.3.3. Tuple.

4.4. Chèn thêm phần tử X vào mảng (tại vị trí nào đó hoặc mảng đã sắp xếp sao cho vẫn đảm bảo thứ tự sắp xếp).

4.4.1. Mảng (array)

4.4.2. Danh sách (list)

4.4.3. Tuple.

4.5. Xóa phần tử của mảng (tại vị trí nào đó, xóa các phần tử trùng lặp - sau khi xóa, mỗi phần tử trong mảng là duy nhất).

4.5.1. Mảng (array)

4.5.2. Danh sách (list)

4.5.3. Tuple.

4.6. Kiểm tra xem có phải là mảng đối xứng không?

4.6.1. Mảng (array)

4.6.2. Danh sách (list)

4.6.3. Tuple.

4.7. Tìm ƯCLN của mọi phần tử trong mảng.

4.7.1. Mảng (array)

4.7.2. Danh sách (list)

4.7.3. Tuple.

4.8. Tìm BCNN của mọi phần tử trong mảng.

4.8.1. Mảng (array)

4.8.2. Danh sách (list)

4.8.3. Tuple.
 

Tác giả: Vàng Văn Quyn

Tổng số điểm của bài viết là: 1 trong 1 đánh giá

Xếp hạng: 1 - 1 phiếu bầu
Click để đánh giá bài viết
Thống kê
  • Đang truy cập25
  • Hôm nay4,431
  • Tháng hiện tại95,493
  • Tổng lượt truy cập1,921,238
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây