ĐỀ KIỂM TRA THỰC HÀNH PYTHON LỚP 9 (60 PHÚT)
Môn học: Tin học 9 - Chuyên đề Lập trình Python cơ bản
Thời gian: 60 phút (Không kể thời gian phát đề)
Hình thức: Thực hành trên máy tính (100% lập trình)
Tổng điểm: 10 điểm
Câu 1: Tính tiền mua dụng cụ học tập (1.0 điểm)
• Đề bài: Để chuẩn bị cho năm học mới, bạn Nam đi nhà sách mua một số quyển vở và bút mực. Biết rằng giá của mỗi quyển vở là 8.000 đồng và giá của mỗi chiếc bút mực là 4.000 đồng. Viết chương trình nhập vào số lượng vở Nam muốn mua, số lượng bút Nam muốn mua, và số tiền Nam đưa cho nhân viên thu ngân. Hãy tính tổng số tiền Nam phải trả và số tiền thừa nhân viên thu ngân trả lại cho Nam.
• Input (Dữ liệu nhập vào): Gồm 3 dòng, mỗi dòng chứa một số nguyên dương lần lượt là:
• Dòng 1: Số lượng vở muốn mua (biến x).
• Dòng 2: Số lượng bút muốn mua (biến y).
• Dòng 3: Số tiền Nam đưa cho thu ngân (biến M).
• Output (Dữ liệu xuất ra): Gồm 2 dòng:
• Dòng 1: Tổng số tiền cần thanh toán (đồng).
• Dòng 2: Số tiền thừa nhận lại (đồng).
• Ví dụ:
• Input:
5
3
100000
• Output:
52000
48000
• Giới hạn dữ liệu: Số lượng vở x, bút y từ 0 đến 100; Số tiền đưa M lớn hơn hoặc bằng tổng tiền mua hàng (M >= x 8000 + y 4000); các giá trị nhập vào đều là số nguyên.
• Gợi ý nhỏ: Áp dụng các toán tử nhân (*) và trừ (-) cơ bản trên kiểu số nguyên. Đảm bảo ép kiểu dữ liệu từ chuỗi nhập vào (input()) sang số nguyên (int()).
Câu 2: Tính tiền điện sinh hoạt gia đình (2.0 điểm)
• Đề bài: Để khuyến khích người dân tiết kiệm điện, công ty điện lực áp dụng cách tính tiền điện lũy tiến theo từng bậc. Một hộ gia đình tiêu thụ lượng điện là A (kWh). Đơn giá điện được tính như sau:
• Bậc 1 (Cho 50 kWh đầu tiên): Giá 1.800 đồng/kWh.
• Bậc 2 (Cho từ kWh thứ 51 đến 100): Giá 2.000 đồng/kWh cho các kWh ở bậc này.
• Bậc 3 (Cho từ kWh thứ 101 trở lên): Giá 2.500 đồng/kWh cho các kWh ở bậc này.
Viết chương trình nhập vào số điện tiêu thụ A (kWh) của một hộ gia đình. Tính và in ra tổng số tiền điện chưa thuế và tổng số tiền điện sau khi đã cộng thêm 10% thuế VAT.
• Input (Dữ liệu nhập vào): Một số nguyên không âm A đại diện cho lượng điện tiêu thụ (kWh).
• Output (Dữ liệu xuất ra): Gồm 2 dòng:
• Dòng 1: Tổng số tiền điện chưa thuế (số nguyên, đồng).
• Dòng 2: Tổng số tiền điện sau thuế VAT (số thực làm tròn đến 1 chữ số thập phân, đồng).
• Ví dụ:
• Input:
120
• Output:
240000
264000.0
• Giới hạn dữ liệu: A nằm trong khoảng từ 0 đến 2000.
• Gợi ý nhỏ: Sử dụng cấu trúc rẽ nhánh if...elif...else để phân loại và tính tiền điện cho từng bậc tiêu thụ tương ứng. Lưu ý tính tiền điện theo từng phần bậc lũy tiến chứ không lấy toàn bộ số điện nhân với một mức giá duy nhất.
Câu 3: Thử thách nuôi heo đất tiết kiệm (2.0 điểm)
• Đề bài: Bạn An nuôi một con heo đất để mua xe đạp điện trị giá S đồng. Ngày thứ nhất An bỏ vào heo đất X đồng. Mỗi ngày tiếp theo, số tiền An bỏ heo tăng thêm Y đồng so với ngày hôm trước (tức là ngày thứ i An bỏ vào X + (i - 1) Y đồng). Tuy nhiên, vì ngày chủ nhật An đi chơi nên cứ vào ngày thứ i chia hết cho 7* (ngày 7, 14, 21...), An sẽ không bỏ tiền vào heo đất.
Hãy viết chương trình nhập vào số tiền mục tiêu S, số tiền ngày đầu X, số tiền tăng thêm mỗi ngày Y. Tính và in ra: tổng số tiền An đã tích lũy được khi đạt hoặc vượt mục tiêu S, tổng số ngày đã trôi qua, và số ngày thực tế An có bỏ tiền vào heo đất. Vòng lặp sẽ dừng ngay lập tức khi tổng số tiền đạt hoặc vượt S.
• Input (Dữ liệu nhập vào): Gồm 3 dòng chứa 3 số nguyên dương tương ứng:
• Dòng 1: Số tiền mục tiêu S.
• Dòng 2: Số tiền ngày đầu tiên X.
• Dòng 3: Số tiền tăng thêm mỗi ngày Y.
• Output (Dữ liệu xuất ra): Gồm 3 dòng:
• Dòng 1: Tổng số tiền tích lũy trong heo đất khi dừng.
• Dòng 2: Tổng số ngày đã trôi qua.
• Dòng 3: Số ngày thực tế An bỏ tiền vào heo đất.
• Ví dụ:
• Input:
150
10
5
• Output:
180
8
7
• Giới hạn dữ liệu: S từ 10 đến 100.000; X và Y từ 1 đến 1.000.
• Gợi ý nhỏ: Sử dụng vòng lặp while chạy cho đến khi tổng tiền đạt hoặc vượt S. Sử dụng từ khóa continue để bỏ qua ngày chủ nhật (ngày chia hết cho 7) và từ khóa break để thoát vòng lặp ngay khi tích lũy đủ tiền. Cần cẩn thận vị trí tăng biến đếm số ngày để tránh lỗi lặp vô hạn.
Câu 4: Rút gọn và phân tích tin nhắn (2.0 điểm)
• Đề bài: Khi nhắn tin trực tuyến, học sinh thường viết tắt bằng cách lược bỏ các nguyên âm. Viết chương trình nhập vào một chuỗi ký tự S (chỉ gồm ký tự số, khoảng trắng và chữ cái tiếng Anh không dấu). Chương trình cần thực hiện:
1. Tạo ra chuỗi mới bằng cách loại bỏ toàn bộ nguyên âm tiếng Anh ('a', 'e', 'i', 'o', 'u' và dạng viết hoa của chúng) và loại bỏ toàn bộ khoảng trắng.
2. Đếm số lượng nguyên âm đã bị loại bỏ từ chuỗi gốc.
3. Đếm số lượng phụ âm tiếng Anh có trong chuỗi gốc (phụ âm là các chữ cái tiếng Anh không phải nguyên âm).
4. In ra chuỗi mới, số lượng nguyên âm, số lượng phụ âm, và chuỗi mới ở dạng đảo ngược.
• Input (Dữ liệu nhập vào): Một dòng duy nhất chứa chuỗi ký tự S.
• Output (Dữ liệu xuất ra): Gồm 4 dòng:
• Dòng 1: Chuỗi sau khi loại bỏ nguyên âm và khoảng trắng.
• Dòng 2: Số lượng nguyên âm bị loại bỏ.
• Dòng 3: Số lượng phụ âm trong chuỗi gốc.
• Dòng 4: Chuỗi mới đảo ngược.
• Ví dụ:
• Input:
Hoc Python 9
• Output:
HcPythn9
2
7
9nhtyPcH
• Giới hạn dữ liệu: Chuỗi S có độ dài từ 1 đến 200 ký tự.
• Gợi ý nhỏ: Sử dụng vòng lặp for để duyệt qua từng ký tự của chuỗi. Tạo một chuỗi phụ âm/nguyên âm mẫu hoặc so sánh trực tiếp để phân loại ký tự. Chú ý phân biệt chữ cái hoa và thường. Để đảo ngược chuỗi mới, học sinh có thể dùng kỹ thuật cắt chuỗi ([::-1]) hoặc dùng vòng lặp chạy ngược.
Câu 5: Hệ thống bảo mật thông tin học đường (3.0 điểm)
• Đề bài: Em hãy thiết kế một chương trình mô phỏng "Trợ lý bảo mật học đường" gồm các chức năng tương ứng với các hàm tự định nghĩa sau:
1. Hàm `kiem_tra_mat_khau(password)`: Kiểm tra độ an toàn của mật khẩu tài khoản học trực tuyến. Mật khẩu an toàn nếu thỏa mãn đồng thời:
• Độ dài tối thiểu 8 ký tự.
• Có ít nhất 1 chữ cái viết hoa ('A' đến 'Z').
• Có ít nhất 1 chữ cái viết thường ('a' đến 'z').
• Có ít nhất 1 chữ số ('0' đến '9').
• Không chứa ký tự khoảng trắng.
Hàm trả về True nếu mật khẩu an toàn, ngược lại trả về False.
2. Hàm `ma_hoa_tin_nhan(message, k)`: Mã hóa tin nhắn bảo mật bằng cách dịch chuyển các chữ cái tiếng Anh đi k bước trong bảng chữ cái (mã hóa Caesar).
• Chỉ dịch chuyển các chữ cái từ 'a' đến 'z' và 'A' đến 'Z'. Giữ nguyên chữ số, khoảng trắng và ký tự đặc biệt.
• Ví dụ với khóa k = 3: 'a' dịch thành 'd', 'z' xoay vòng thành 'c', 'A' dịch thành 'D', 'Z' xoay vòng thành 'C'.
• Hàm trả về chuỗi đã mã hóa.
3. Hàm `tao_otp()`: Tạo ra một mã OTP ngẫu nhiên gồm 6 chữ số (sử dụng thư viện random). Hàm trả về chuỗi OTP này.
4. Hàm `main()` hoặc đoạn chương trình chính điều khiển hiển thị menu liên tục để người dùng lựa chọn:
=== MENU BẢO MẬT ===
1. Kiểm tra độ an toàn mật khẩu
2. Mã hóa tin nhắn bảo mật
3. Tạo mã xác thực OTP
4. Thoát chương trình
• Nếu chọn 1: Nhập mật khẩu và in ra kết quả kiểm tra tương ứng là "Mat khau AN TOAN" hoặc "Mat khau KHONG AN TOAN".
• Nếu chọn 2: Nhập tin nhắn và khóa số k (từ 1 đến 25). In ra tin nhắn đã mã hóa.
• Nếu chọn 3: Tạo và in ra mã OTP ngẫu nhiên (ví dụ: "Ma OTP cua ban: 104332").
• Nếu chọn 4: In ra "Tam biet!" và kết thúc chương trình.
• Nếu nhập lựa chọn khác: In ra "Lua chon khong hop le, vui long chon lai!" và quay lại hiển thị menu.
• Input & Output: Theo thiết kế giao diện tương tác của menu. Chương trình lặp lại liên tục cho đến khi người dùng chọn 4 để thoát.
• Ví dụ tương tác:
=== MENU BẢO MẬT ===
1. Kiểm tra độ an toàn mật khẩu
2. Mã hóa tin nhắn bảo mật
3. Tạo mã xác thực OTP
4. Thoát chương trình
Nhap lua chon (1-4): 1
Nhap mat khau: Abc12345
Mat khau AN TOAN
=== MENU BẢO MẬT ===
...
Nhap lua chon (1-4): 4
Tam biet!
• Giới hạn dữ liệu: Đầu vào k là số nguyên từ 1 đến 25; Chuỗi nhập vào chỉ chứa các ký tự ASCII chuẩn không dấu.
• Gợi ý nhỏ: Sử dụng hàm ord(c) để lấy mã ASCII của ký tự và chr(n) để chuyển từ mã ASCII ngược lại ký tự. Khi xoay vòng chữ cái, dùng toán tử chia lấy dư % 26 để xử lý việc vượt quá chữ 'z' hoặc 'Z'. Sử dụng hàm random.randint(0, 9) trong vòng lặp 6 lần để tạo mã OTP. Vòng lặp menu dùng cấu trúc while True.