(Trang 86)
SAU BÀI HỌC NÀY EM SẼ:
- Sử dụng được mảng một chiều và hai chiều trong lập trình.
- Sử dụng được kiểu dữ liệu list trong một vài bài toán cụ thể.
Nhiệm vụ 1
Viết chương trình quản lí điểm kiểm tra một môn học của một học sinh trong một học kì.
Chương trình được thực hiện như sau:
- Nhập điểm: yêu cầu người dùng nhập các đầu điểm kiểm tra (từ hai đầu điểm trở lên).
- Thống kê điểm: chương trình duyệt qua các đầu điềm rồi tính và in ra điềm trung bình kiểm tra, điềm thấp nhất, cao nhất.
Hướng dẫn:
Phân tích: Nhiệm vụ này có thể được thực hiện bằng cách sử dụng màng một chiều, cụ thể là sử dụng danh sách trong python. Việc nhập điểm được thực hiện ngay trên màn hình. Sau khi đã có danh sách các đầu điểm, dùng cấu trúc for để lập qua các phần tử của màng đề tính tồng điềm, thống kê điểm cao nhất, thấp nhất.
qldiem.py
1 marks = []
2 line = y enter test points separated by spaces input("Hãy nhập các điểm kiểm tra cách nhau bởi dấu cách: ")
3 marks [float(x) for x in line.split()]
4 total = 0
5 Min marks [0]
6 Max marks [0]
7 for min marks:
8 total total + m
9 if Min m:
10 Min = m
11 if Max m:
12 Max = m
13 print("Điểm trung bình: ", total/len(marks))
14 print("Điểm cao nhất: ", Max)
15 print("Điểm thấp nhất: Min)
Nhiệm vụ 2
Viết chương trình quản lí điểm kiểm tra một môn học trong một học kì của tất cả học sinh trong lớp.
Chương trình được thực hiện như sau:
(Trang 87)
- Nhập dữ liệu: yêu cầu người dùng nhập số học sinh trong lớp, sau đó với mỗi học sinh hỏi người dùng nhập tên học sinh rồi nhập các đầu điểm của học sinh đó.
- Thống kê dữ liệu: chương trình in ra danh sách các học sinh với điểm trung bình kiểm tra của họ, tên học sinh có điểm trung bình cao nhất và điểm kiểm tra thấp nhất trong tất cả các đầu điểm.
Hướng dẫn:
Phân tích: Nhiệm vụ này có thể được thực hiện bằng cách sử dụng một mảng hai chiều để lưu tất cả điểm của học sinh trong lớp, mỗi hàng là điềm của một sinh viên, điềm cụ thể là các phần tử của hàng. Đề thống kê cần dùng vòng lặp đề duyệt qua từng hàng, tỉnh trung bình từng hàng và xét từng điểm để tìm ra đầu điểm thấp nhất. Trong khi tỉnh, tìm điểm trung bình kiểm tra của từng học sinh, cần lưu lại số thứ tự của học sinh có điểm trung bình cao nhất để tham chiếu in ra tên của học sinh đó.
qldiem_ca_lop.py
1 names []
2 marks_all = []
3n int(input("Hãy nhập số lượng học sinh: "))
4
5 for i in range(n):
6 name = input("Tên học sinh thứ " + str(i+1) + ": ")
7 names.append(name)
8 line input("Điểm kiểm tra của học sinh thứ "+str(i+1)+": ")
9 marks = [float(x) for x
in line.split()]
10 marks) marks_all.append(marks)
11
12# Định nghĩa các biến để thống kê
13 max_avg 0
14 index_max_avg = 0
15 Min marks_all[0][0]
16
17#Duyệt qua mảng 2 chiều
18 for i in range(n):
19 total = 0
20 for j in range(len(marks_all[i])):
21 total total + marks_all[i][j]
22 if Min > marks_all[i][j]:
23 Min marks_all[i][j]
24 avg total/len(marks_all[i])
(Trang 88)
25 print("Điểm trung bình của", names[i],":", avg)
26 if max_avg < avg:
27 max_avg = avg
28 index_max_avg = i
29
30 ##In ra kết quả
31 print(names [index_max_avg], "đạt điểm trung bình", max_avg, "cao nhất lớp.")
32 print("Điểm thấp nhất:", Min)
LUYỆN TẬP
1. Chỉnh sửa lại chương trình của Nhiệm vụ 1 đề bồ sung chức năng:
a) Thông báo điểm đầu tiên và điểm cuối cùng trong danh sách.
b) Cho phép người dùng tra cứu đầu điểm thứ n với quy ước n bắt đầu từ 1 ứng với điểm đầu tiên. Nếu n lớn hơn tổng số đầu điểm hoặc nhỏ hơn 1, cần thông báo không hợp lệ và yêu cầu người dùng nhập lại.
2. Chỉnh sửa lại chương trình để người dùng có thể:
a) Tra cứu các đầu điểm kiểm tra theo STT (số thứ tự) của học sinh. Quy ước số thứ tự bắt đầu từ 1. Nếu người dùng nhập STT lớn hơn số lượng học sinh thì chương trình thông báo STT không hợp lệ và yêu cầu nhập lại.
b) Tra cứu điểm kiểm tra cụ thể lần thứ n của một học sinh theo STT. Nếu n và STT không hợp lệ chương trình cần thông báo và yêu cầu nhập lại.
VẬN DỤNG
1. Viết chương trình nhập vào từ bàn phím danh sách tên (không gồm họ và đệm) học sinh cách nhau bởi dầu cách và lưu vào trong một màng. Giả thiết rằng tên không gồm khoảng trắng. Sau đó hãy thống kê xem có bao nhiêu tên khác nhau và mỗi tên xuất hiện bao nhiêu lần trong danh sách.
2. Viết chương trình nhập từ bàn phím số tự nhiên m và n. Sau đó lần lượt nhập m dòng, mỗi dòng bao gồm n số cách nhau bởi dấu cách. Đưa dữ liệu đã nhập vào ma trận A, in ma trận A ra màn hình. Sau đó:
a) Tính tổng các phần tử ma trận A.
b) In ra dòng có tổng các phần tử lớn nhất (nếu có nhiều dòng bằng nhau thì in tất cả các dòng).
c) In ra giá trị các phần tử phân biệt trong ma trận tức là nếu có các giá trị xuất hiện nhiều lần trong ma trận A thì chỉ in ra một lần.
d) Cho phép người dùng tìm số lần xuất hiện của một số bất kì trong ma trận A, vi dụ người dùng nhập vào số 3, chương trình thông báo số 3 xuất hiện x lần trong ma trận tại các vị trí cột (i, j) cụ thể.