Tài liệu lý thuyết và bài tập Python gồm 25 trang, định dạng PDF, được xếp theo mức độ dễ đến khó để học sinh làm quen với lý thuyết va bài tập lập trình Python ôn thi Tin học trẻ bảng B.
Trang 1TIN HỌC BÌNH PHƯƠNG
LÝ THUYẾT VÀ BÀI TẬP
TIN HỌC LẬP TRÌNH PHỔ THÔNG
Giáo viên: NGUYỄN THẾ PHƯƠNG
Bình Tân, tháng 06 năm 2023
Tài liệu lưu hành nội bộ
Trang 2LỜI NÓI ĐẦU
Trước khi bắt đầu bước vào học ngôn ngữ lập trình Python, bạn cần biết những từ khóa và quy ước quan trọng của ngôn ngữ này:
1 * Từ khoá trong Python (có phân biệt chữ hoa và chữ thường) and
as assert break class continue
def del elif else except
exec finally
for from global
if import
in is lambda
not or pass print raise return
try while
with yield
2 * Lệnh và cú pháp trong Python:
- Sử dụng # để chú thích 1 dòng trong chương trình # comment - Sử dụng ''' để chú thích 1 đoạn '''
- Dấu ' và " word = 'word'
cau_van = "Chào mừng bạn đến với ngôn ngữ lập trình Python." doan_van = """Ngày đầu tiên đi học, mẹ dắt em
một mình em đến lớp """
- Sử dụng canh lề (bắt buộc) để bao khối lệnh của hàm, lớp hoặc luồng điều khiển - Số khoảng trắng dùng để canh lề có thể nhiều ít tuỳ ý nhưng tất cả lệnh trong một khối
phải được canh lề như nhau
- Lệnh được viết trên nhiều dòng sử dụng ký tự \
total = item_one +\ item_two + \
import sys; x = 'foo'; sys.stdout.write(x + '\n')
- Nhóm nhiều câu lệnh đơn tạo nên một khối lệnh và cũng được gọi là bộ (suites) - Các lệnh phức như if, while, def và class cần một dòng header và một bộ
- Dòng header bắt đầu câu lệnh (bằng một từ khoá tương ứng ví dụ như if, def,…) và
kết thúc bằng dấu hai chấm : theo sau là một tập hợp các câu lệnh (suite)
def hi(name):
print 'Hello ' + name print 'Have a good day!' hi('nghi')
Giờ chúng ta bắt đầu làm quen với Pythong nhé!
(suite) tập hợp các câu lệnh
Trang 3NGÔN NGỮ LẬP TRÌNH PYTHON I TOÁN TỬ:
− Toán tử số học: +, -, *, /, % (chia lấy dư), ** (lũy thừa)
− Toán tử so sánh: == (bằng), != (không bằng), > (lớn hơn), < (nhỏ hơn), >= (lớn hơn hoặc bằng), <= (nhỏ hơn hoặc bằng)
− Toán tử logic: and (và), or (hoặc), not (phủ định)
II KIỂU DỮ LIỆU:
1 Kiểu dữ liệu số nguyên (int):
7 Kiểu dữ liệu từ điển (dictionary):
person = {"name": "Alice", "age": 25}
8 Kiểu dữ liệu tập hợp (set):
c) Thay đổi giá trị của một phần tử trong danh sách:
fruits[2] = "grape"
print(fruits) # Output: ["apple", "banana", "grape"]
d) Thêm phần tử vào danh sách:
fruits.append("kiwi")
print(fruits) # Output: ["apple", "banana", "grape", "kiwi"]
e) Xóa phần tử khỏi danh sách:
del numbers[2]
print(numbers) # Output: [1, 2, 4, 5]
Trang 4f) Duyệt qua danh sách sử dụng vòng lặp:
for fruit in fruits: print(fruit)
g) Sử dụng các phương thức có sẵn của danh sách:
numbers.sort() # Sắp xếp danh sách theo thứ tự tăng dần print(numbers)
Để sắp xếp danh sách theo thứ tự giảm dần trong Python, bạn có thể sử dụng tham số reverse=True trong phương thức sort():
numbers.sort(reverse=True) # Sắp xếp danh sách theo thứ tự giảm dần print(numbers)
III CÁC CÂU LỆNH VÀ CẤU TRÚC ĐIỀU KHIỂN: 1 Cấu trúc rẽ nhánh (if-else):
Kiểm tra một điều kiện và thực hiện các hành động khác nhau dựa trên kết quả của điều kiện
a) Cấu trúc điều khiển dạng thiếu:
Ví dụ: Cấu trúc điều khiển if
x = 10 if x > 5:
print("x lớn hơn 5") Kết quả: x lớn hơn 5
b) Cấu trúc điều khiển dạng đủ:
Ví dụ : Cấu trúc điều khiển if-else
x = 10 if x > 5:
print("x lớn hơn 5") else:
print("x nhỏ hơn hoặc bằng 5") Kết quả: x lớn hơn 5
2 Câu lệnh lặp: a) Vòng lặp for:
Ví dụ 1: In các phần tử trong danh sách danh_sach = [1, 2, 3, 4, 5]
for phan_tu in danh_sach:
Ví dụ 3: Cấu trúc điều khiển + vòng lặp for
danh_sach = [1, 2, 3, 4, 5] for phan_tu in danh_sach: if phan_tu % 2 == 0: print(phan_tu, "là số chẵn")
Kết quả: Nếu nhập 2 hoặc 4 là số chẵn;
Trang 5b) Vòng lặp while:
Ví dụ 1: In các số từ 1 đến 5 bằng vòng lặp while
i = 1
while i <= 5: print(i) i += 1
Kết quả: Các phần tử được in ra từ 1 đến 5 và mỗi phần tử trên 1 dòng
Ví dụ 2: Tính tổng các số từ 1 đến 10 bằng vòng lặp while
tong = 0 i = 1
while i <= 10: tong += i i += 1
print("Tổng các số từ 1 đến 10 là:", tong) Kết quả: Tổng các số từ 1 đến 10 là: 55
Ví dụ 3: Cấu trúc điều khiển + vòng lặp while
i = 1
while i <= 5: if i % 2 == 0:
print(i, "là số chẵn") else:
print(i, "là số lẻ") i += 1
Kết quả: 1 là số lẻ; 2 là số chẵn; 3 là số lẻ; 4 là số chẵn; 5 là số lẻ
IV CÁC CÂU LỆNH CƠ BẢN:
− Câu lệnh gán giá trị: gán giá trị cho một biến Ví dụ: x = 5 + Phép gán giá trị biến:
x = 5 y = 10 tong = x + y
print("Tổng của x và y là:", tong) + Phép gán giá trị hằng số:
PI = 3.14 ban_kinh = 5
dien_tich = PI * ban_kinh * ban_kinh print("Diện tích hình tròn là:", dien_tich)
− Câu lệnh in (print): in một giá trị ra màn hình Ví dụ: print("Hello World")
− Câu lệnh nhập (input): nhận giá trị từ người dùng Ví dụ: name = input("Enter your name: ")
Trang 6V HÀM VÀ CÁCH DÙNG HÀM: 1 Hàm về số học và logic:
• print(): Hàm này được sử dụng để in ra màn hình các đối tượng được truyền vào
print("Hello, world!")
• input(): Hàm này được sử dụng để nhận đầu vào từ người dùng thông qua bàn phím name = input("Nhập tên của bạn: ")
• sum(): Hàm này được sử dụng để tính tổng các phần tử trong một iterable (như danh
sách, tuple, hoặc dãy số) numbers = [1, 2, 3, 4, 5] total = sum(numbers)
• sorted(): Hàm này được sử dụng để sắp xếp một iterable và trả về một danh sách các
phần tử đã được sắp xếp
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] sorted_numbers = sorted(numbers)
• max(): Hàm này được sử dụng để trả về phần tử lớn nhất trong một iterable hoặc
length = len(s) # length = 13
• lower(): Hàm này chuyển tất cả các ký tự trong chuỗi thành chữ thường
s = "Hello, World!"
lower_s = s.lower() # lower_s = "hello, world!"
• upper(): Hàm này chuyển tất cả các ký tự trong chuỗi thành chữ hoa
s = "Hello, World!"
upper_s = s.upper() # upper_s = "HELLO, WORLD!"
• strip(): Hàm này loại bỏ khoảng trắng ở đầu và cuối chuỗi
s = " Hello, World! "
stripped_s = s.strip() # stripped_s = "Hello, World!"
• split(): Hàm này tách chuỗi thành một danh sách các chuỗi con dựa trên một ký tự
phân tách
s = "apple,banana,orange"
fruits = s.split(",") # fruits = ["apple", "banana", "orange"]
• join(): Hàm này nối các phần tử của một iterable thành một chuỗi, sử dụng chuỗi gọi
phương thức như ký tự phân tách
fruits = ["apple", "banana", "orange"]
s = ",".join(fruits) # s = "apple,banana,orange"
• replace(): Hàm này thay thế tất cả các xuất hiện của một chuỗi con trong chuỗi bằng
một chuỗi khác
s = "I like programming in Python"
new_s = s.replace("Python", "JavaScript") # new_s = "I like programming in JavaScript"
Trang 73 Hàm tự định nghĩa: def ten_ham(tham_so): return gia_tri
− Hàm là một khối mã có thể được gọi và thực hiện một tác vụ cụ thể
− Hàm có thể nhận đầu vào (tham số) và trả về một giá trị (nếu cần) Ví dụ: def square(x): return x ** 2
• Hàm tìm giá trị lớn nhất:
def tim_gia_tri_lon_nhat(arr):
max_value = arr[0] for num in arr:
if num > max_value: max_value = num
for _ in range(n): result *= x return result
# Sử dụng hàm
base = 2 exponent = 3
power = tinh_luy_thua(base, exponent) print(f"{base} mũ {exponent} = {power}")
# Sử dụng hàm
number = 17
if nguyen_to(number):
print(f"{number} là số nguyên tố") else:
print(f"{number} không phải là số nguyên tố")
Trang 8VI CHƯƠNG TRÌNH CON
Ví dụ 1: Viết một thủ tục tìm căn bậc 2 của N trong Python, bạn có thể sử dụng cú pháp
sau:
def tinh_can_bac_hai(N): can_bac_hai = N ** 0.5 return can_bac_hai
so = int(input("Nhập số nguyên: ")) ket_qua = tinh_can_bac_hai(so)
print("Căn bậc hai của", so, "là", ket_qua)
Thủ tục có tên là tinh_can_bac_hai nhận một tham số N Thủ tục này tính căn bậc hai
của N bằng cách sử dụng toán tử ** với mũ là 0.5 thủ tục trả về kết quả căn bậc hai
Ví dụ 2: Viết chương trình nhập vào số nguyên n, liệt kê các ước là số nguyên tố Sử
dụng thủ tục tìm số nguyên tố def nguyen_to(n):
def liet_ke_uoc_nguyen_to(n):
uoc_nguyen_to = [i for i in range(1, n + 1) if n % i == 0 and nguyen_to(i)] return uoc_nguyen_to
# Nhập số nguyên n từ người dùng n = int(input("Nhập số nguyên n: ")) # Liệt kê các ước là số nguyên tố của n
uoc_nguyen_to = liet_ke_uoc_nguyen_to(n)
print(f"Các ước nguyên tố của {n} là: {uoc_nguyen_to}")
Trang 9VII MỘT SỐ THUẬT TOÁN TRONG PYTHON: 1 Thuật toán Sắp xếp nổi bọt (Bubble Sort):
def bubble_sort(arr): n = len(arr) for i in range(n-1): for j in range(0, n-i-1): if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j] arr = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(arr)
print("Mảng đã được sắp xếp theo thứ tự tăng dần:") for i in range(len(arr)):
print(arr[i])
2 Thuật toán Tìm kiếm nhị phân (Binary Search):
def binary_search(arr, low, high, x): if high >= low:
mid = (high + low) // 2 if arr[mid] == x: return mid elif arr[mid] > x:
return binary_search(arr, low, mid - 1, x) else:
return binary_search(arr, mid + 1, high, x) else:
return -1
arr = [2, 3, 4, 10, 40] x = 10
result = binary_search(arr, 0, len(arr)-1, x) if result != -1:
print("Phần tử", x, "được tìm thấy tại vị trí", result) else:
print("Phần tử", x, "không có trong mảng")
3 Thuật toán Quicksort:
def quicksort(arr): if len(arr) <= 1: return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right) arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = quicksort(arr)
print("Mảng đã được sắp xếp theo thứ tự tăng dần:") for i in range(len(sorted_arr)):
print(sorted_arr[i])
Trang 10VIII NHẬP, XUẤT TỆP TRONG PYTHON
Trong Python, để nhập và xuất dữ liệu từ tệp, chúng ta có thể sử dụng các hàm như open(), read(), write(), và close()
Đầu tiên, chúng ta cần mở tệp bằng cách sử dụng hàm open() với các tham số như tên tệp và chế độ (ví dụ: "r" để đọc, "w" để ghi, "a" để ghi thêm)
with open("tep_vao.txt", "r") as f: f.read ("Doc noi dung tu tep vao")
Sau đó, chúng ta có thể sử dụng các phương thức như read() để đọc dữ liệu từ tệp, write() để ghi dữ liệu vào tệp, và close() để đóng tệp sau khi hoàn thành công việc
Để ghi dữ liệu vào tệp, chúng ta có thể sử dụng code sau: with open("tep_ra.txt", "w") as f: f.write("Noi dung can ghi ra tep")
Ví dụ 1 Nhập hai số nguyên từ tệp và xuất ra tệp ra số nào là số lớn nhất
with open('input.txt', 'r') as f: numbers = f.readlines() num1 = int(numbers[0]) num2 = int(numbers[1])
max_num = max(num1, num2) with open('output.txt', 'w') as f: f.write(str(max_num))
Ví dụ 2 Nhập một chuỗi từ tệp và xuất ra chuỗi đảo ngược, ghi vào tệp
with open('input.txt', 'r') as f: string = f.read().strip() reversed_string = string[::-1] with open('output.txt', 'w') as f: f.write(reversed_string)
Ví dụ 3 Nhập một mảng số nguyên từ tệp, sắp xếp lại mảng tăng dần
with open('input.txt', 'r') as f: numbers = f.readlines()
numbers = [int(x) for x in numbers] numbers.sort()
with open('output.txt', 'w') as f: for num in numbers:
f.write(str(num) + '\n')
IX BÀI TẬP VẬN DỤNG
SỬ DỤNG TOÁN TỬ
Bài 1 Viết một chương trình tính tổng của hai số nguyên
# Nhập hai số nguyên từ người dùng
so1 = int(input("Nhập số thứ nhất: ")) so2 = int(input("Nhập số thứ hai: "))
Trang 11Bài 2 Viết một chương trình tính tổng của hai số thực
# Nhập hai số thực từ người dùng so1 = float(input("Nhập số thứ nhất: ")) so2 = float(input("Nhập số thứ hai: ")) # Tính tổng hai số
tong = so1 + so2 # In kết quả
print("Tổng của hai số là:", tong)
Bài 3 Viết một chương trình tính tổng của ba số nguyên
# Nhập ba số nguyên từ người dùng so1 = int(input("Nhập số thứ nhất: ")) so2 = int(input("Nhập số thứ hai: ")) so3 = int(input("Nhập số thứ ba: ")) # Tính tổng ba số
tong = so1 + so2 + so3 # In kết quả
print("Tổng của ba số là:", tong)
Bài 4 Viết một chương trình tính hiệu của hai số nguyên
# Nhập hai số nguyên từ người dùng so1 = int(input("Nhập số thứ nhất: ")) so2 = int(input("Nhập số thứ hai: ")) # Tính hiệu hai số
hieu = so1 - so2 # In kết quả
print("Hiệu của hai số là:", hieu)
Bài 5 Viết một chương trình tính tích của hai số nguyên
# Nhập hai số nguyên từ người dùng so1 = int(input("Nhập số thứ nhất: ")) so2 = int(input("Nhập số thứ hai: ")) # Tính tích hai số
tich = so1 * so2 # In kết quả
print("Tích của hai số là:", tich)
Bài 6 Viết một chương trình tính thương của hai số nguyên
# Nhập hai số nguyên từ người dùng so1 = int(input("Nhập số thứ nhất: ")) so2 = int(input("Nhập số thứ hai: ")) # Kiểm tra nếu số thứ hai bằng 0 if so2 == 0:
print("Không thể chia cho 0") else:
# Tính thương hai số thuong = so1 / so2 # In kết quả
print("Thương của hai số là:", thuong)
Bài 7 Viết một chương trình tính phần dư của hai số nguyên
# Nhập hai số nguyên từ người dùng
Trang 12so1 = int(input("Nhập số thứ nhất: ")) so2 = int(input("Nhập số thứ hai: ")) # Kiểm tra nếu số thứ hai bằng 0 if so2 == 0:
print("Không thể chia cho 0") else:
# Tính phần dư hai số phan_du = so1 % so2 # In kết quả
print("Phần dư của hai số là:", phan_du)
Bài 8 Viết một chương trình tính lũy thừa của một số nguyên
# Nhập số nguyên từ người dùng so = int(input("Nhập số nguyên: ")) # Nhập số mũ từ người dùng
mu = int(input("Nhập số mũ: ")) # Tính lũy thừa
ket_qua = so ** mu # In kết quả
print("Kết quả lũy thừa là:", ket_qua)
Bài 9 Viết một chương trình tính căn bậc hai của một số thực
import math
# Nhập số thực từ người dùng so = float(input("Nhập số thực: ")) # Tính căn bậc hai
ket_qua = math.sqrt(so) # In kết quả
print("Căn bậc hai của số thực là:", ket_qua)
Bài 10 Viết một chương trình tính tổng của các phần tử trong một danh sách
# In kết quả
print("Tổng của các phần tử trong danh sách là:", tong)
Trang 13BÀI TẬP SỬ DỤNG KIỂU DỮ LIỆU
Bài 1 Viết một chương trình để tính để kiểm tra xem một số nguyên có phải là số chẵn hay
không
# Nhập số nguyên từ người dùng so = int(input("Nhập số nguyên: ")) # Kiểm tra số chẵn
if so % 2 == 0:
print("Số", so, "là số chẵn") else:
print("Số", so, "không phải là số chẵn")
Bài 2 Viết một chương trình để tính để kiểm tra xem một số nguyên có phải là số nguyên tố
hay không
def kiem_tra_so_nguyen_to(n): if n < 2:
return False
for i in range(2, int(n**0.5) + 1): if n % i == 0:
return False return True
so_nguyen = int(input("Nhập một số nguyên: ")) if kiem_tra_so_nguyen_to(so_nguyen):
print(so_nguyen, "là số nguyên tố") else:
print(so_nguyen, "không là số nguyên tố")
Bài 3 Viết một chương trình tính tổng của các phần tử trong một danh sách số nguyên
def tinh_tong(danh_sach): tong = 0
for so in danh_sach: tong += so
return tong
danh_sach_so = [1, 2, 3, 4, 5] tong = tinh_tong(danh_sach_so)
print("Tổng của các phần tử trong danh sách là:", tong)
Bài 4 Viết một chương trình để tính để tìm giá trị lớn nhất trong một danh sách số nguyên
def tim_gia_tri_lon_nhat(danh_sach): gia_tri_lon_nhat = danh_sach[0] for so in danh_sach:
if so > gia_tri_lon_nhat: gia_tri_lon_nhat = so return gia_tri_lon_nhat danh_sach_so = [1, 2, 3, 4, 5]
gia_tri_lon_nhat = tim_gia_tri_lon_nhat(danh_sach_so) print("Giá trị lớn nhất trong danh sách là:", gia_tri_lon_nhat)
Bài 5 Viết một chương trình tính tổng các chữ số của một số nguyên
def tinh_tong_chu_so(so_nguyen): tong = 0