Nội dung lý thuyết
Ví dụ 1: Khai báo và sử dụng tham số của hàm
# Hàm kiểm tra n có phải là số nguyên tố
def nguyenTo(n):
kt = True
i = 2
if n < 2:
kt = False
else:
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
kt = False
break
return kt
# Chương trình chính
k = int(input("Nhập số tự nhiên: "))
if nguyenTo(k): # Lệnh gọi hàm nguyenTo()
print(f"{k} là số nguyên tố.")
else:
print(f"{k} không là số nguyên tố.")Trong đó, dòng 1 có n được khai báo giữa cặp dấu ngoặc tròn () gọi là tham số. Nếu có nhiều hơn một tham số thì các tham số sẽ cách nhau bằng dấu phẩy.
nguyenTo(k) thì k là đối số truyền cho tham số n.Biến cục bộ: Là các biến được tạo trong một hàm và chỉ có phạm vi trong hàm đó. Không thể truy xuất ở bên ngoài hàm này.
Ví dụ: kt ở dòng 2 là biến cục bộ của hàm nguyenTo()
Biến toàn cục: Là biến được tạo ở bên ngoài mọi hàm hoặc được khai báo trong các hàm với từ khóa global. Có phạm vi trong toàn bộ chương trình.
Ví dụ: k ở dòng 11 (trong ví dụ 1) là biến toàn cục vì được tạo bên ngoài hàm.
Ví dụ 2: So sánh biến cục bộ và toàn cục

Giải thích:
Ở chương trình 1: lỗi xảy ra vì biến s là cục bộ, không được dùng trong chương trình chính.
Ở chương trình 2: biến s là toàn cục, có thể được dùng ở cả chương trình chính và trong hàm chuNhat().
Mặc dù trong hàm có lệnh gán giá trị cho biến s, nhưng vì không khai báo global, nên s là biến cục bộ mới, không ảnh hưởng tới biến toàn cục.
Lưu ý:
Khi muốn sử dụng và thay đổi giá trị biến toàn cục trong hàm, phải dùng lệnh:
global <danh sách biến toàn cục>
Ví dụ 3: Thay đổi giá trị biến toàn cục trong hàm
def kiemTra():
global s # Khai báo s là biến toàn cục
if n % 2 == 0:
s = "Số chẵn" # Gán giá trị mới cho biến s
else:
s = "Số lẻ" # Gán giá trị mới cho biến s
# Chương trình chính
n = int(input("Nhập số nguyên: "))
s = "" # Biến s là xâu rỗng
kiemTra()
print(s) # Biến s khác xâu rỗngHàm giúp:
Viết chương trình ngắn gọn, dễ hiểu, dễ quản lý
Tăng hiệu quả, dễ bảo trì, nâng cấp
Giúp tái sử dụng khi chương trình có phần xử lý giống nhau.
Python hỗ trợ tạo hàm tự định nghĩa (do người lập trình viết) và hàm có sẵn (do thư viện cung cấp).
Đề bài: Số nguyên dương gọi là số đẹp nếu:
Có chứa ít nhất một chữ số chẵn
Tổng chữ số là số nguyên tố
Hướng dẫn giải:
Bước 1: Viết hàm kiểm tra số nguyên tố
Bước 2: Tính tổng chữ số của một số
Bước 3: Kiểm tra số đẹp
Bước 4: Chương trình chính
Chương trình tham khảo:
def nguyenTo(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
def tongChuSo(n):
s = 0
for i in str(n):
s += int(i)
return s
def soDep(n):
if not nguyenTo(n): # Kiểm tra n có phải là số nguyên tố không
return "Không"
if not nguyenTo(tongChuSo(n)): # Kiểm tra tổng chữ số có phải là số nguyên tố không
return "Không"
caseSoNguyenTo = ['2', '3', '5', '7']
for i in str(n): # Kiểm tra từng chữ số có phải là số nguyên tố không
if i not in caseSoNguyenTo:
return "Không"
return "Có"
# Chương trình chính
n = int(input("Nhập n: "))
print("Kết quả kiểm tra số đẹp:", soDep(n))Đề bài: Tổ chức chương trình tặng thưởng. Mỗi người nhận được một mã phiếu.
Yêu cầu: Đếm số phiếu có chứa số và sắp xếp danh sách phiếu theo thứ tự tăng dần số trong mã.
Hướng dẫn giải:
Bước 1: Viết hàm catSo(maPhieu) – Tách số từ mã phiếu
Bước 2: Chương trình chính
Chương trình tham khảo:
def catSo(maPhieu):
s = ""
for i in maPhieu:
if i.isdigit():
s += i
return int(s)
# Chương trình chính
n = int(input("Nhập số lượng phiếu: "))
dsPhieu = []
for i in range(n):
maPhieu = input("Nhập mã phiếu: ")
so = catSo(maPhieu)
dsPhieu.append([so, maPhieu])
# Sắp xếp theo số tăng dần trong mã phiếu
dsPhieu.sort()
print("Trình tự các khách hàng bóc thăm:")
for phieu in dsPhieu:
print(phieu[1]