Professional Documents
Culture Documents
1
Bài 1 LÀM QUEN VỚI NGÔN NGỮ LẬP TRÌNH BẬC CAO
MÔI TRƯỜNG LẬP TRÌNH PYTHON CHƯƠNG TRÌNH CON VÀ THƯ VIỆN
Bài 10
CÁC CHƯƠNG TRÌNH CON CÓ SẴN
Bài 2 BIẾN, PHÉP GÁN
VÀ BIỂU THỨC SỐ HỌC THỰC HÀNH LẬP TRÌNH
Bài 11
VỚI HÀM VÀ THƯ VIỆN
Bài 3 THỰC HÀNH LÀM QUEN VÀ
KHÁM PHÁ PYTHON
Bài 12 KIỂU DỮ LIỆU
Bài 4 CÁC KIỂU DỮ LIỆU SỐ XÂU KÍ TỰ - XỬ LÍ XÂU KÍ TỰ
VÀ CÂU LỆNH VÀO - RA ĐƠN GIẢN
Bài 13 THỰC HÀNH DỮ LIỆU KIỂU XÂU
THỰC HÀNH
Bài 5 VIẾT CHƯƠNG TRÌNH ĐƠN KIỂU DỮ LIỆU
GIẢN Bài 14 DANH SÁCH - XỬ LÍ DANH SÁCH
Bài 6 CÂU LỆNH RẼ NHÁNH
THỰC HÀNH Bài 15 THỰC HÀNH VỚI KIỂU DỮ LIỆU DANH SÁCH
Bài 7 CÂU LỆNH RẼ NHÁNH
Bài 16 KIỂM THỬ VÀ
Bài 8 CÂU LỆNH LẶP GỠ LỖI CHƯƠNG TRÌNH
3
...
Pascal
C++
Ngôn ngữ chung giữa con người và máy tính: ngôn ngữ lập trình
Python
Java
...
4
8p
hút
13
g iâ
y
6
1 2 5
3. Soạn chương
trình
4
6
t = float(input())
print(‘Khoảng cách từ tia chớp tới người nghe thấy:’, 343*t, ‘m.’)
7
Soạn thảo một lần
Sử dụng nhiều lần
Bài 1. Em hãy viết câu lệnh print()sao cho khi thực hiện câu lệnh này trên màn
hình sẽ hiển thị dòng chữ “Học lập trình với Python để ra lệnh cho máy tính”.
Bài 2. Đường cao tốc Hà Nội – Lào Cai (kí hiệu CT.05) có chiều dài 264 km. Một
ô tô chạy với tốc độ trung bình toàn tuyến là 70 km/h. Em hãy dùng ngôn ngữ lập
trình Python ra lệnh cho máy tính xác định thời gian ô tô đó đi hết đường cao tốc
Hà Nội – Lào Cai.
print(‘Thời gian cần thiết’,264/70,’giờ.’)
8
Năm 2020 nước ta sản xuất được 247 tỉ kWh điện. Sản lượng điện của nước ta
được dự báo sẽ tiếp tục tăng nhanh với tốc độ trung bình là 8,6%/năm. Em hãy
dùng ngôn ngữ lập trình Python ra lệnh cho máy tính để tính sản lượng điện của
nước ta sản xuất được trong năm 2021 theo dự báo.
9
Câu 1. Trong các câu sau đây, những câu nào đúng?
1) Chương trình là một bản chỉ dẫn cho máy tính làm việc, được viết bằng một ngôn ngữ lập trình.
2) Chỉ có một ngôn ngữ lập trình bậc cao là Python.
3) Lập trình bằng Python có thể đưa ra các thông báo bằng tiếng Việt.
4) Môi trường lập trình hỗ trợ người lập trình phát hiện ra câu lệnh viết sai ngữ pháp.
Đáp án: Các câu đúng: 1, 3, 4
Câu 2. Trong các câu sau đây, những câu nào phù hợp với lí do nên học lập trình?
Em học lập trình để:
1) Giỏi tiếng Anh.
2) Làm phong phú kiến thức cá nhân.
3) Có thể truy cập Internet.
4) Sử dụng được các phần mềm văn phòng.
5) Điều khiển máy tính giải nhiều loại bài toán sẽ gặp trong thực tế.
6) Sau này trở thành chuyên gia trong lĩnh vực tin học. 10
Đáp án: Các câu đúng: 2, 5, 6
11
Bài 2
BIẾN, PHÉP GÁN
VÀ BIỂU THỨC SỐ HỌC
12
Các giá trị tính toán: được đặt tên để trích dẫn
a1
Hai tên khác nhau!
A1
13
Soạn thảo chương trình
14
Bài 1. Em hãy nêu ba tên biến đúng, ba tên biến sai. Với tên biến sai, em hãy giải thích
tại sao đó không phải là tên biến.
Ba tên đúng Ba tên sai
Điện_Biên Mường Thanh Chứa dấu cách
a1 a&b Chứa ký tự ngoài phạm vi cho phép (&)
result 2kq Bắt đầu bằng chữ số
Bài 2. Học sinh thử nghiệm.
Bài 3. Em hãy hoàn thiện chương trình ở Hình 5 bằng cách viết biểu thức gán cho
biến pound để nhận được chương trìnhchuyển đổi đơn vị đo khối lượng từ đơn vị ki-
lô-gam sang pound, biết rằng 1 kg bằng 2,205 pound. Em hãy thay đổi giá trị gán cho
biến kilo để chạy thử nghiệm chương trình.
kilo = 4.5
pound = kilo*2.205
print(pound)
15
Mảnh vườn trồng cúc đại đoá có chiều rộng m mét, chiều dài n mét. Mỗi mét vuông
trồng được một khóm hoa. Mỗi khóm hoa bán được a nghìn đồng. Em hãy viết chương
trình để đưa ra màn hình tổng số tiền thu được khi bán hết hoa trong vườn, với bộ dữ
liệu đầu vào là m = 5, n = 18, a = 30.
Đáp án: m = 5
n = 18
a = 30
print(‘Số tiền thu được là’, m*n*a, ‘nghìn đồng.’)
18
19
Làm quen với hai cửa sổ lập trình của Python
a = 20
b = 100
a = a - 5
b = b - a
print(b)
20
Làm quen với thông báo lỗi của Python
Gợi ý sửa
Làm quen với nhập dữ liệu là một dòng chữ
21
Tên chương trình: TIME.PY
Khoảng thời gian
Để theo dõi hoạt động của động vật trong một Vườn bảo tồn Quốc gia người ta lắp một camera
trên một lối đi mà các con vật hay qua lại. Mỗi khi có vật chuyển động trong phạm vi quan sát
của ống kính, camera sẽ tự động chụp hình và ghi lại thời điểm chụp dưới dạng số giây kể từ
khi được lắp đặt.
Trong số các ảnh thu được có tấm hình một động vật quý hiếm với thời điểm chụp là s.
Hãy đưa ra thời điểm chụp dưới dạng “ngày:giờ:phút:giây”.
Ngày đầu tiên đặt máy được tính là 0.
Dữ liệu: Vào từ thiết bị vào chuẩn của hệ thống gồm một dòng chứa số nguyên dương s.
Kết quả: Đưa ra thiết bị ra chuẩn của hệ thống thời điểm chụp theo quy cách mới đã nêu.
Ví dụ:
INPUT OUTPUT
12345656 142:21:20:56
22
Giải thuật
86400
seconds = seconds % day
day =
24*3600
days = seconds//day
hours = seconds//3600
hour = 3600
seconds = seconds%60
23
seconds = int(input())
days = seconds // (24 * 3600)
seconds = seconds % (24 * 3600)
hours = seconds // 3600
seconds = seconds % 3600
minutes = seconds // 60
seconds = seconds % 60
print(days, hours, minutes, seconds,sep=':')
24
Điểm thi Tên chương trình: EVALS.PY
Trong một cuộc thi tay nghề mỗi thí sinh phải thực hiện bốn bài trong bốn môn thi khác nhau và
điểm tổng hợp của thí sinh là trung bình cộng của điểm 4 bài. Điểm của mỗi bài là một số thực.
Cho biết điểm của mỗi bài thi hãy tính điểm tổng hợp và đưa ra kết quả làm tròn tới 5 chữ số
sau dấu chấm thập phân.
Dữ liệu: Vào từ thiết bị vào chuẩn của hệ thống gồm một dòng chứa 4 số thực a, b, c và d,
các số cách nhau ít nhất một dấu cách.
Kết quả: Đưa ra thiết bị ra chuẩn của hệ thống một số thực – điểm tổng hợp tính được.
Ví dụ:
INPUT OUTPUT
95.31 87.345 96.048254 98.713116 94.35409
25
Hướng dẫn
Cách nhập 4 số thực ghi trên một dòng, cách nhau ít nhất một dấu cách:
(a + b + c + d)/4
Làm tròn giá trị x tới k chữ số sau dấu chấm thập phân:
round(x,k)
print(round((a+b+c+d)/4,5))
27
Du lịch Phan Xi Păng
Để lên đỉnh Phan Xi Păng (Hình 6) cần mua vé cáp treo a nghìn
đồng/1 người lớn và b nghìn đồng/1 trẻ em, vé xe lửa là u nghìn
đồng/1 người lớn và v nghìn đồng/1 trẻ em. Đoàn du lịch có x
người, trong số đó có y trẻ em. Hãy xác định số tiền cần chuẩn bị
để mua vé cho cả đoàn và đưa kết quả ra màn hình.
28
Trường hợp nhập mỗi số trên một dòng
a = int(input('a = '))
b = int(input('b = '))
u = int(input('u = '))
v = int(input('v = '))
x = int(input('x = '))
y = int(input('y = '))
Số_tiền = (a + u) * (x - y) + (b + v) * y
print('Tổng số tiền vé:',Số_tiền,'ngàn đồng.')
a, b, u, v, x, y = map(int, input().split())
Số_tiền = (a + u) * (x - y) + (b + v) * y
print('Tổng số tiền vé:',Số_tiền,'ngàn đồng.')
29
Chỉ chứa chữ cái, chữ số và dấu gạch dưới,
Bắt đầu bằng chữ cái hoặc dấu gạch dưới,
Phân biệt chữ hoa và chữ thường.
31
Bài 4 CÁC KIỂU DỮ LIỆU SỐ
VÀ CÂU LỆNH VÀO - RA ĐƠN GIẢN
32
Có Ph
b i ép
Dấ ếnl c
u ch oạ hia
ấm i th th
thậ ực ự c
pp
h ân
Lệnh type cho biết biết kiểu dữ liệu của biến hay biểu thức
33
TỔ CHỨC VÀO - RA
Nhóm câu lệnh phức tạp nhất trong mọi ngôn ngữ lập trình nói chung và Python nói riêng,
Dần dần làm quen với các dạng thường dùng.
NHẬP DỮ LIỆU
Cần lưu ý: Các dữ liệu thuộc kiểu gì?
Mỗi dữ liệu ghi trên một dòng hay các dữ liệu ghi trên một dòng
34
TỔ CHỨC VÀO - RA
Nhập giá trị một biến kiểu nguyên ghi trên một dòng: k = int(input())
Nhập giá trị một biến kiểu thực ghi trên một dòng : x = float(input())
Nhập giá trị hai biến kiểu nguyên ghi trên một dòng: m,n = map(int,input())
Nhập giá trị hai biến kiểu thực ghi trên một dòng: x,y = map(float,input())
Kéo dài danh sách nếu cần Có thể có dòng thông báo
trước khi nhập dữ liệu
nhập giá trị cho nhiều biến
Ví dụ: Nhập 4 số nguyên a, b, u, v, các số ghi trên một dòng, cách nhau ít nhất một dấu cách.
a,b,u,v = map(int,input(‘Dữ liệu vào: ‘))
INPUT a: 5 b: 8 u: -2 v: 6
5 8 -2 6 35
TỔ CHỨC VÀO - RA
Ví dụ:
a = 5
b = 3
print(a, b, a+b, a-b, a*b, a//b, a%b)
Kết quả: 5 3 8 2 15 1 2
Các giá trị đưa ra trên một dòng riêng, cách nhau một dấu cách.
Các cách đưa ra đáp ứng các yêu cầu khác: Sẽ học sau!
36
TỔ CHỨC VÀO - RA
Ví dụ 2. Viết chương trình nhập ba số thực là điểm kiểm tra cuối học kì của ba môn Ngữ văn,
Vật lí và Sinh học. Tính và đưa ra màn hình tổng điểm và điểm trung bình của ba môn. Hình 4a
và Hình 4b minh hoạ chương trình và một kết quả chạy chương trình.
Viết chương trình thực hiện nhập từ bàn phím hai số nguyên
dương b, c là độ dài hai cạnh góc vuông của tam giác vuông
ABC, tính và đưa ra màn hình:
c a
– Diện tích tam giác.
– Độ dài cạnh huyền.
Có thể đưa ra dòng thông báo tuỳ chọn (bằng tiếng Việt có dấu) trước
mỗi dữ liệu nhập vào và trước mỗi kết quả xuất ra. A b C
Ví dụ:
INPUT OUTPUT
b = 3 Diện tích tam giác: 6.0
c = 4 Độ dài cạnh huyền: 5.0
38
Nhập b và c,
Đưa ra diện tích: b*c/2
Đưa ra độ dài cạnh huyền: (a2+b2)1/2
Trường hợp nhập b, c, mỗi số trên một dòng:
b = int(input())
c = int(input())
print(‘Diện tích tam giác:’, b * c / 2)
print(‘Độ dài cạnh huyền:’, (a*a + b*b)**0.5)
Trường hợp hai số b, c ghi trên một dòng, cách nhau ít nhất một dấu cách:
b, c = map(int,input())
print(‘Diện tích tam giác:’, b * c / 2)
print(‘Độ dài cạnh huyền:’, (a*a + b*b)**0.5)
39
Chia mận
Cô giáo đi du lịch ở Sa Pa mang về túi mận làm quà cho cả lớp. Túi mận có k quả, lớp có n
học sinh. Mận được chia đều để em nào cũng nhận được một số lượng quả như nhau. Nếu còn
thừa, những quả còn lại sẽ được dành cho các em nữ.
Viết chương trình: nhập n và k vào từ bàn phím, đưa ra màn hình số quả mận mỗi học sinh
nhận được và số quả dành riêng cho các em nữ.
Sử dụng dòng thông báo cho dữ liệu nhập vào và mỗi kết quả đưa ra.
Ví dụ:
INPUT OUTPUT
Số học sinh: n = 31 Mỗi học sinh được chia 3 quả mận.
Số mận: k = 123 Số mận dành riêng cho các em nữ là 30.
40
Nhập n và k,
Tính số mận cho mỗi người: n//k
Tính số mận cho các bạn nữ: n%k.
41
Tính số bàn học
Trường mới đẹp và rộng hơn trường cũ, số phòng học cũng nhiều hơn so với trước. Nhà trường
dự định tuyển thêm học sinh cho ba lớp mới với số lượng học sinh mỗi lớp tương ứng là a, b
và c. Cần mua bàn cho các lớp mới này. Mỗi bàn học có không quá hai chỗ ngồi cho học sinh.
Xác định số lượng bàn tối thiểu cần mua.
Em hãy viết chương trình giải quyết bài toán trên. Dữ liệu được nhập vào từ bàn phím. Kết quả
được đưa ra màn hình.
Ví dụ:
INPUT OUTPUT
a = 35 Số bàn tối thiểu cần mua: 59
b = 42
c = 39
42
Giải thuật
a = int(input(‘a = ‘))
b = int(input(‘b = ‘))
c = int(input(‘c = ‘))
print(‘Số bàn tối thiểu cần mua:’,(a+1)//2+(b+1)//2+(c+1)//2)
43
Trong các câu sau đây, những câu nào đúng?
1) Để tính toán, các ngôn ngữ lập trình bậc cao không phân biệt kiểu dữ liệu số nguyên
và kiểu dữ liệu số thực.
2) Trong Python, câu lệnh n = int(input('n = ')) cho nhập vào một số thực từ
bàn phím.
3) Trong Python mỗi câu lệnh print()chỉ đưa ra được giá trị của một biến.
4) Trong Python, với câu lệnh input() có thể nhập dữ liệu cùng với thông báo hướng dẫn.
44
45
Bài 5 THỰC HÀNH
VIẾT CHƯƠNG TRÌNH ĐƠN GIẢN
Bài 1. Giải phương trình bậc nhất
Chương trình ở Hình 1a được viết để giải phương trình bậc nhất ax + b = 0, với a, b là hai
số thực nhập từ bàn phím (a ≠ 0) và nghiệm được thông báo ra màn hình.
Tuy nhiên, chương trình đó còn viết thiếu ở những vị trí “. . .”. Em hãy hoàn thiện chương
trình và kiểm thử xem với dữ liệu vào a = 1 và b = 2, chương trình em vừa hoàn thiện có cho
kết quả giống như Hình 1b không.
Chương trình sẽ đưa ra màn hình thông tin gì nếu nhập vào giá trị a = 0?
46
Đáp án:
a = float(input(“a = “))
b = float(input(“b = “))
print(“Nghiệm phương trình là”, -b/a)
Khi nhập giá trị a = 0: Hệ thống sẽ chỉ ra số thứ tự câu lệnh chứa lỗi và thông báo
gặp lỗi chia cho 0 (division by zero)
47
Bài 2. An ninh lương thực
Trung bình mỗi người dân cần có a kg gạo để ăn, chế biến và phục vụ chăn nuôi trong một
năm. Để đảm bảo an ninh lương thực, tổng số gạo dự trữ trong các kho của nhà nước chia cho
đầu người phải lớn hơn hoặc bằng a kg.
Một nước có số dân là b thì cần dự trữ tối thiểu bao nhiêu ki-lô-gam gạo? Em hãy viết chương
trình nhập từ bàn phím hai số a, b và đưa ra màn hình khối lượng gạo tối thiểu cần dự trữ.
Yêu cầu: Cần đưa ra màn hình hướng dẫn nhập dữ liệu và thông báo kết quả bằng tiếng Việt
có dấu.
Ví dụ:
INPUT OUTPUT
a = 365 Số gạo cần dự trữ:33246497310
b = 91086294
48
Đáp án:
a = int(input(‘a = ‘))
Nhập các số nguyên a và b,
Đưa ra kết quả: a*b b = int(input(‘b = ‘))
print(‘Số gạo cần dự trữ:’, a*b)
49
Bài 3. Tìm ước chung lớn nhất
Em hãy viết chương trình nhập vào từ bàn phím hai số nguyên a và b, tính và đưa ra màn
hình ước chung lớn nhất của hai số đó.
Gợi ý: Hãy tìm hiểu một số hàm toán học thường dùng trong Python.
Ví dụ:
INPUT OUTPUT
a = 9855 Ước chung lớn nhất: 27
b = 11556
Giải thuật
Cần nạp hàm gcd từ thư viện math vào chương trình
Một cách nạp:
Viết ở đầu chương trình:
52
Viết chương trình tính và đưa ra màn hình vận tốc v (m/s) khi chạm mặt đất của một vật
rơi tự do từ độ cao h, biết rằng v = √2gh, trong đó g là gia tốc trọng trường (g ≈ 9.8 m/s2). Độ
cao h tính theo mét được nhập từ bàn phím.
Đáp án:
h = float(input('h = '))
v = (2*9.8*h)**0.5
print('v =',v,'m/gy.')
53
Bài 6
54
Bài toán 1
Nhập từ bàn phím số nguyên n. Kiểm tra nếu n không thuộc khoảng [10, 99] thì đưa ra thông báo:
n không phải là số nguyên dương hai chữ số.
10 <= n <= 99
55
Nói
Nhập số nguyên n,
Nếu không thỏa mãn kiều kiện 2 chữ số thì
Đưa ra thông báo theo yêu cầu đầu bài
Viết
n = int(input(‘n = ‘))
if not(9 < n < 100):
print(n,’không phải là số nguyên dương hai chữ số’)
56
Bài toán 2 Nhập vào từ bàn phím số nguyên A và đưa ra thông báo cho biết đó là số chẵn
hay số lẻ.
A = int(input(“A = “))
if A%2 == 0: print(A,’là số chẵn’)
else: print(A,’là số chẵn’) 57
Ví dụ 4.
Tây Nguyên sản xuất hai loại cà phê là Robusta và Arabica. Trung bình hằng
năm lượng cà phê Arabica chiếm 10% tổng sản lượng và giá bán trung bình
gấp 2,5 lần so với cà phê Robusta. Những năm Arabica được mùa (chiếm từ
10% tổng sản lượng trở lên), giá bán chỉ gấp 2 lần, còn khi mất mùa thì giá
bán gấp 3 lần.
Đáp án:
a = float(input("a = "))
b = float(input("b = "))
c = float(input("c = "))
if a > 0 and b > 0 and c > 0:
print("Cả ba số đều dương") Hình 8b. Một kết quả
thực hiện
Hình 8a. Chương trình
59
Bài 2. Viết chương trình để nhập từ bàn phím hai số nguyên a và b, đưa ra màn hình thông
báo “Positive” nếu a + b > 0, “Negative” nếu a + b < 0 và “Zero” nếu a + b = 0.
Đáp án:
a = int(input("a = "))
b = int(input("b = "))
Tồn tại cách viết khác
if a + b > 0: print("Positive")
gọn hơn!
else:
if a + b < 0: print("Negative")
else: print("Zero")
60
Năm nhuận
Năm nhuận là những năm chia hết cho 400 hoặc là những năm chia hết cho 4 nhưng không
chia hết cho 100. Đặc biệt, những năm chia hết cho 3 328 được đề xuất là năm nhuận kép.
Với số nguyên dương n nhập vào từ bàn phím, em hãy đưa ra màn hình thông báo: “Không là
năm nhuận” nếu n không phải là năm nhuận; “Năm nhuận” nếu n là năm nhuận và “Năm
nhuận kép” nếu n là năm nhuận kép.
Giải thuật
61
n = int(input())
if n %3328 == 0: print('Năm nhuận kép.')
else:
if n % 400 == 0 or(n % 4 == 0 and n % 100 != 0):
print('Năm nhuận.')
else: print('Không phải là năm nhuận.')
62
Trong các câu sau đây, những câu nào đúng?
1) Trong câu lệnh rẽ nhánh của ngôn ngữ lập trình bậc cao phải có một biểu thức logic thể
hiện điều kiện rẽ nhánh.
2) Biểu thức logic chỉ được lấy làm điều kiện rẽ nhánh nếu chưa chạy chương trình đã xác
định được giá trị của biểu thức đó đúng hay sai.
3) Có thể kết nối các biểu thức logic với nhau bằng các phép tính logic để được một điều kiện
rẽ nhánh.
4) Trong Python câu lệnh rẽ nhánh có dạng: if <điều kiện> else <các câu
lệnh>.
Đáp án: Các câu đúng: 1 3
63
CÂU LỆNH RẼ NHÁNH TÓM TẮT
if d != 0:
3 dấu cách x = dx / d
y = dy / d 64
CÂU LỆNH RẼ NHÁNH
r ue
T Sai Đúng
if Điều kiện : (False) (True)
Điều kiện
al se Nhóm câu lệnh_1
F
else:
Nhóm câu Nhóm câu
Nhóm câu lệnh_2 lệnh_2 lệnh_1
if a % b == 0:
print(b,’ là ước của’, a)
else:
print(b,’ không phải là ước của’, a)
65
Bài 7
THỰC HÀNH
CÂU LỆNH RẼ NHÁNH
Nếu nồng độ p của NaCl trong một lít nước if p > 1.0:
lớn hơn 1g/l thì đưa ra thông báo “Nước mặn” print(‘Nước mặn.’)
Nếu vật thể chuyển động với tốc độ v > 343 if v > 343:
m/gy thì đưa ra thông báo “Tốc độ siêu thanh”. print(‘Tốc độ siêu thanh.’)
67
Bài 2. Chia kẹo
Có n chiếc kẹo và m em bé. Hãy viết chương trình nhập vào hai số nguyên dương n, m và
kiểm tra n chiếc kẹo có chia đều được cho m em bé hay không (thông báo ra màn hình “Cóˮ
hoặc “Khôngˮ). Chạy chương trình ba lần, mỗi lần với bộ dữ liệu n, m khác nhau.
Gợi ý: Để có thể chia đều số kẹo thì n phải chia hết cho m, như vậy ở đây cần kiểm tra số dư
của phép chia n cho m có bằng 0 hay không, tức là kiểm tra điều kiện n%m == 0.
Đáp án:
n, m = map(int,input().split())
if n%m == 0: print(‘Có’)
else: print(‘Không’)
68
Bài 3. Tìm lỗi sai
Cần viết else từ
đầu dòng
a < b
69
Bài 4. Tìm số lớn nhất
70
Tiền điện
Trong tháng người dùng tiêu thụ x (kWh) điện. Nếu x ≤ a thì số tiền phải trả là x × d1, nếu a <
x ≤ b thì số tiền phải trả là a × d1 + (x – a) × d2, nếu x > b thì số tiền phải trả là a × d1 + (b
– a) × d2 + (x – b) × d3.
Em hãy viết chương trình nhập vào từ bàn phím các số nguyên dương a, b, d1, d2, d3 và x,
tính và đưa ra màn hình số tiền điện phải trả. Tìm hiểu bảng giá điện hiện hành và chạy chương
trình một số lần sao cho có đủ các bộ dữ liệu đầu vào đại diện cho các mức tính tiền điện.
Đáp án:
a, b, d1, d2, d3, x = map(int,input().split())
if x <= a: ans = x*d1
else:
if x <= b: ans = a*d1+(x-a)*d2
else: ans = a*d1+(b-a)*d2+(x-b)*d3
print(ans)
71
BÀI 8 CÂU LỆNH LẶP 72
Bài toán. Tính tổng các số chia hết cho 3
Viết chương trình nhập vào số nguyên n và in ra tổng các số nguyên dương chia hết cho 3
không lớn hơn n.
Dữ liệu: Nhập từ thiết bị vào chuẩn số nguyên n (n > 0).
Kết quả: Đưa ra màn hình một số nguyên – tổng tính được.
Ví dụ:
INPUT OUTPUT
10 18
Giải thuật
Nhập số nguyên n
Chuẩn bị tích lũy kết quả vào biến sum: Cho sum nhận giá trị 0.
Duyệt các số nguyên i với giá trị lần lượt từ 1 đến n-1: i = 1, 2, 3, 4, 5, ...
Kiểm tra nếu i chia hết cho 3 → tích lũy i vào kết quả:
Bắt đầu từ 1
n = int(input('n = ')) Câu lệnh cần thực hiện lặp lại
sum = 0 Lệnh lặp i còn bé hơn nhiều lần
for i in range(1, n):
if i%3 == 0: sum = sum + i # sum += i
print("Tổng của các số tự nhiên nhỏ hơn",n,"và chia hết cho 3 là:", sum)
Viết lùi
Cách viết để thực hiện lặp nhiều lần câu lệnh hoặc nhóm câu lệnh
Bài toán. Các phần mềm ứng dụng mang tính cá nhân thường dùng mật khẩu để xác nhận
quyền sử dụng. Chương trình dưới đây yêu cầu người dùng nhập mật khẩu.
Người dùng sẽ được yêu cầu nhập lại cho đến khi nhập đúng mật khẩu (là HN123). Khi dữ
liệu nhập vào đúng là “HN123ˮ thì thông điệp “Bạn đã nhập đúng mật khẩuˮ xuất hiện trên
màn hình.
Nhập mật khẩu,
Không biết trước
Chừng nào mật khẩu ≠ HN123:
số lần lặp
Nhập mật khẩu
Thông báo đã nhập đúng mật khẩu Điều kiện còn lặp
m, n = map(int,input().split())
i = m-1
while i < n:
i += 1
if i%3 > 0: continue
print(i, end = ' ')
Tổng quát CÂU LỆNH LẶP Được thực hiện chừng nào điều kiện sau while
còn đúng hoặc chưa gặp break (nếu có)
Câu lệnh while
while
Điều_kiện :
while
continue
Có thể có k = 2
hoặc không
break while k*k <= n:
if n%k == 0: ans += 2
k += 1
if (k-1)**2 == n: ans -= 1
print(ans)
Tìm số lượng ước thực sự của n
(Ước khác 1 và n)
Ví dụ: n = 16 → ans = 3 82
CÂU LỆNH LẶP Câu lệnh for
for i in range(n):
n,a,b = map(int,input().split())
for
Có thể có
hoặc không ans += 1
break
print(ans)
Đáp án:
1 2
2 4
3 6
4 8
5 10
6 12
7 14 Đáp án:
8 16
9 18 n = int(input(‘n = ‘))
10 20 for i in range(n,0,-1): print(i)
Mẹ em dự định gửi tiết kiệm một khoản tiền tại một ngân hàng có lãi suất 5% một năm,
nghĩa là sau mỗi năm tiền lãi nhận được là 5% số tiền gửi. Hết một năm, nếu mẹ không rút tiền
thì cả vốn lẫn lãi sẽ tự động được gửi tính cho năm tiếp theo. Em hãy viết chương trình nhập vào
số tiền T (đơn vị triệu đồng) sau đó tính và đưa ra 10 dòng, mỗi dòng ghi số tiền sau mỗi năm
trong 10 năm gửi liên tiếp cả gốc lẫn lãi để mẹ tham khảo.
Đáp án:
1) Trong các ngôn ngữ lập trình bậc cao đều có câu lệnh thể hiện cấu trúc lặp.
2) Trong Python chỉ có câu lệnh lặp while để thể hiện cấu trúc lặp.
3) Trong Python chỉ có câu lệnh lặp for để thể hiện cấu trúc lặp.
4) Có thể sử dụng câu lệnh while để thể hiện cấu trúc lặp với số lần lặp biết trước.
5) Có thể sử dụng câu lệnh for để thể hiện cấu trúc lặp với số lần lặp chưa biết trước.
n = int(input('n = '))
i = 2
so_uoc = 0
while i <= n//2:
if n%i == 0: so_uoc = so_uoc + 1
i = i + 1
print(n, "có số ước thực sự là:", so_uoc)
Bài 3. Nhập dữ liệu có kiểm tra
Tham khảo chương trình ở Ví dụ 5 trong Bài 8, em hãy viết chương trình yêu cầu người dùng
nhập một số nguyên lớn hơn 1 000 000. Chừng nào người dùng nhập chưa đúng yêu cầu thì
có thông báo yêu cầu nhập lại, chương trình chỉ kết thúc với thông báo “Cảm ơn, bạn đã nhập
dữ liệu đúng yêu cầu.” khi số người dùng gõ vào thoả điều kiện đặt ra.
Đáp án:
n = 1
while n <= 1_000_000:
n = int(input('Hãy nhập số nguyên lớn hơn 1 000 000: '))
print('Cám ơn, bạn đã nhập dữ liệu đúng yêu cầu.')
Đáp án:
n, m = map(int,input('n, m = ').split())
gà = n
if n%2 > 0 or m%2 > 0 or 2*n > m: gà = -1
if gà >= 0:
chó = (m - n*2)//2
gà = gà - chó
if gà < 0: print('Vô nghiệm.')
else: print('Số gà:',gà,'Số chó:',chó)
CHƯƠNG TRÌNH CON VÀ THƯ VIỆN
BÀI 10
CÁC CHƯƠNG TRÌNH CON CÓ SẴN
CHƯƠNG TRÌNH CON VÀ THƯ VIỆN CÁC CHƯƠNG TRÌNH CON SẴN CÓ
Chương trình con Hàm
Còn có thể
Toán học Tin học (Python) ngắn gọn hơn
def tên_hàm( Danh_sách_biến_ cần_ thay_ thế): Viết trước khi sử dụng
(trước khi gọi hàm)
Chú ý
khoảng Có thể có câu return biểu_thức
cách lệnh:
Gán giá trị cho
tên hàm
Khi gọi hàm: Nêu danh sách biến cần để tính (nếu có)
Hàm không chứa lệnh return: Dùng như câu lệnh 94
Hàm có lệnh return: Dùng như một biến trong biểu thức
95
Chuyển dữ liệu cho hàm thực hiện
Ví dụ 2. Chương trình ở Hình 4 khai báo và sử dụng hàm BMI(h,w) tính chỉ số sức khoẻ
BMI theo hai tham số chiều cao và cân nặng. Lời gọi BMI(cao,nang) đã làm hàm
BMI(h,w) được thực hiện với h có giá trị của biến cao, w có giá trị của biến nang. Giá trị
của hai biến cao và nang của chương trình đã được nhập vào từ bàn phím trước khi chương
trình gọi thực hiện hàm BMI(h,w).
96
Hàm có trả về giá trị
Hàm có lệnh return: Dùng như một biến trong biểu thức
97
Các hàm được xây dựng sẵn THƯ VIỆN
Trong mỗi hệ thống ngôn ngữ lập trình bậc cao:
Những phép xử lý thường gặp ở từng lĩnh vực ứng dụng
sqrt(x)
gcd(x,y)
98
Các cách kết nối với thư viện
99
Bài 1. Với hàm BCNN được xây dựng ở chương trình sau đây (Hình 8), trong những
dòng lệnh có sử dụng hàm BCNN, dòng lệnh nào đúng, dòng lệnh nào sai và tại sao?
100
Bài 2. Chương trình ở Hình 9 xây dựng một hàm tính diện tích một tam giác bằng công thức
Heron theo ba cạnh của tam giác. Em hãy hoàn thiện chương trình bằng lời gọi hàm thích hợp
để đưa ra màn hình kết quả tính diện tích của tam giác có ba cạnh là 3, 4, 5.
Đáp án:
def dientichtg (a, b, c):
p = (a + b + c)/2
s = p*(p - a)*(p - b)*(p - c)
return s**0.5
Đáp án:
from math import sqrt
def dientichtg (a, b, c):
p = a + b + c
s = sqrt(p*(p - 2*a)*(p - 2*b)*(p - 2*c))/4
return s
print(max(dientichtg(a,b,c),dientichtg(u,v,w),dientichtg(p,q,r))) 102
Ngắn gọn hơn:
print(max(dientichtg(),dientichtg(),dientichtg()))
103
Trong các câu sau đây, những câu nào đúng?
1) Sử dụng chương trình con sẽ làm chương trình dễ hiểu, dễ tìm lỗi hơn.
2) Hàm chỉ được gọi một lần duy nhất ở chương trình chính.
3) Hàm luôn trả một giá trị qua tên của hàm.
4) Python chỉ cho phép chương trình gọi một hàm xây dựng sẵn trong các thư viện của Python
5) Khai báo hàm trong Python luôn có danh sách tham số.
104
105
Bài 11 THỰC HÀNH LẬP TRÌNH
VỚI HÀM VÀ THƯ VIỆN
106
Bài 1. Giải phương trình
107
Đáp án:
def GPTB1():
# ax+b = 0
a, b = map(float,input('a, b = ').split())
if a == b == 0: print('PT vô định.')
elif a == 0 and b != 0: print('PT vô nghiệm.')
else: print('Nghiệm PT:', -b/a)
def GPTB2():
# ax^2 + bx + c = 0, a != 0
from math import sqrt
a, b, c = map(float,input('a, b, c = ').split())
delta = b*b - 4*a*c
if delta < 0: print('PT vô nghiệm.')
else:
x1 = (-b - sqrt(delta))/(2*a)
x2 = -b/a - x1
print('x1 =',x1,'x2 =',x2)
108
# Tạo bảng chọn việc
while True:
print ("****************************")
print (' BẢNG CHỌN VIỆC ')
print ('1. Giải phương trình bậc nhất ')
print ('2. Giải phương trình bậc hai ')
print ('3. Thoát khỏi công việc ')
print ("****************************")
chon = input(' Hãy chọn (1 hay 2 hay 3): ')
if chon == "1":
print (' Giải phương trình bậc nhất')
GPTB1()
elif chon == "2":
print (' Giải phương trình bậc hai')
GPTB2()
else:
print (' Tạm biệt')
break 109
Bài 2. Thời gian gặp nhau
Hiện tại, anh trai Khánh Nam đang ở thành phố A còn em gái
Sương Mai đang ở thành phố B. Khoảng cách giữa hai thành
phố đó là d km. Hai anh em đi ô tô xuất phát cùng một thời
điểm từ hai thành phố, ô tô khởi hành từ A đi về B với tốc độ
không đổi v1 km/h, ô tô khởi hành từ B đi đến A với tốc độ
không đổi v2 km/h; trong đó d, v1, v2 là các số thực. Chương
trình ở Hình 2 khai báo hàm mtime với các tham số d, v1, v2
để
xác định thời gian hai ô tô gặp nhau tính từ lúc xuất phát.
Em hãy:
1) Hoàn thiện chương trình ở Hình 2a bằng cách bổ sung cho
chương trình lời gọi hàm mtime với dữ liệu nhập từ bàn phím.
2) Chạy chương trình và chạy thử chương trình với ít nhất hai
bộ dữ liệu vào khác nhau.
Hướng dẫn: Viết hàm mtime với tham số d, v1, v2 và trả về
thời gian gặp nhau
110
Đáp án:
def mtime():
d = float(input("d = "))
v1 = float(input("v1 = "))
v2 = float(input("v2 = "))
t = v1+v2
return d/t
111
Bài 3. Thời gian thực hiện chương trình
Hàm time (với lời gọi time()) trong thư viện time cho biết thời gian tại thời điểm hiện tại
(tính theo giây). Để biết thời gian thực hiện chương trình, người ta ghi nhận thời điểm lúc bắt
đầu thực hiện chương trình, thời điểm lúc kết thúc chương trình và đưa ra hiệu các thời điểm
đã xác định. Em hãy gắn hàm time từ thư viện time vào một số chương trình đã có của em
và đưa ra thời gian thực hiện chương trình.
Hướng dẫn:
– Gắn thư viện time vào chương trình: import time
– Để ghi nhận thời điểm bắt đầu viết câu lệnh đầu tiên là: tb = time.time()
– Cuối chương trình, đưa ra thời gian thực hiện: time.time()-tb
– Để cho đẹp: Nên dùng quy cách %.4f hoặc dùng hàm round để đưa ra thời gian thực hiện
chương trình với bốn chữ số ở phần thập phân (Hình 3).
112
Ví dụ:
import time
tb = time.time()
n = 0
s = 0
x = int(input())
while x > 0:
n = n + 1
s = s + x
x = int(input())
if n > 0 : print('Trung bình cộng:',s/n)
print(‘Time:’,round(time.time()-tb,4))
113
Viết chương trình vẽ một hình chữ nhật bằng các dấu # với một
cạnh có độ dài bằng 10, một cạnh có độ dài bằng a. ##########
##########
Ví dụ với a = 4, hình chữ nhật cần vẽ như hình bên. ##########
Yêu cầu xây dựng một hàm Drawbox với tham số (a), hàm này đưa ra ##########
màn hình các dòng, mỗi dòng chứa 10 dấu # liên tiếp và tham số a quyết
định số dòng sẽ được đưa ra. Chương trình gọi hàm Drawbox(a)với a
nhập vào từ bàn phím.
Đáp án:
def Drawbox(a):
for i in range(a): print('##########')
a = int(input('a = '))
Drawbox(a)
114
ài 12
B
LI ỆU Í TỰ
U D Ữ U K
KIỂ Ử LÍ X Â
Ự - X
KÍ T
XÂU
115
116
117
CÁC PHÉP TÍNH VỚI XÂU KÝ TỰ
Xâu: dãy ký tự bất kỳ được đặt trong cặp dấu nháy đơn hoặc dấu nháy kép
Các phép tính với xâu:
Gán xâu
Cộng xâu
Nhân với biểu thức giá trị nguyên
Python không cho phép thay đổi ký tự trong xâu hiện có!
118
VI. KIỂU DỮ LIỆU XÂU KÝ TỰ MỘT SỐ HÀM VÀ PHƯƠNG THỨC XỬ LÝ XÂU
len(x) - Cho độ dài của xâu x.
y.count(x) – Đếm số lần xuất hiện không giao nhau của x trong y.
y.count(x,i) – Tìm số lần xuất hiện của x trong y bắt đầu từ vị trí i của y,
y.count(x,i,j) – Tìm số lần xuất hiện của x trong y bắt đầu từ vị trí i cho tới trước vị trí
j của y.
Hàm y.find(x) trả về một số nguyên xác định vị trí đầu tiên trong y mà từ đó x xuất hiện như
một xâu con
Tồn tại các phương thức y.find(x,i) và y.find(x,i,j)
Kết quả trả về sẽ là -1 nếu không tìm thấy.
Hàm y.replace(x1,x2) tạo xâu mới từ xâu y bằng cách thay thế xâu con x1 không giao
nhau của y bằng xâu x2
y.replace(x1,x2,n) – Chỉ thay thế trong n lần đầu gặp x1
Hàm y.upper() tạo xâu mới biến đổi các ký tự chữ cái trong xâu y thành chữ cái hoa, giữ
nguyên các ký tự không phải là chữ cái
Hàm y.lower() tạo xâu mới biến đổi các ký tự chữ cái trong xâu y thành chữ cái
thường, giữ nguyên các ký tự không phải là chữ cái 119
Các ví dụ xử lý xâu
Đếm số lần xuất hiện xâu con
Tìm vị trí xuất hiện lần đầu tiên của một xâu trong xâu khác
120
Trúc xinh trúc mọc bờ ao Trúc xinh trúc mọc sân đình
Em xinh em đứng một mình cũng xinh
KIỂU DỮ LIỆU XÂU KÝ TỰ Xác định xâu con (lát cắt)
[m:n] – Xác định xâu con từ ký tự vị trí m đến trước vị trí n,
[:m] – lấy ra m ký tự đầu tiên, s = ‘Olympiad’
0 1 2 3 4 5 6 7
[m:] – bỏ m ký tự đầu tiên,
s[1:5] ‘lymp’ O l y m p i a d
[:] – Lấy toàn bộ xâu,
s[:4] ‘Olym’ O l y m p i a d
[m:n:k] – Trích ra xâu con
bắt đầu từ vị trí m cho tới trước s[4:] ‘piad’ O l y m p i a d
vị trí n với bước là k, s[:] ‘Olympiad’
[::-1] – Đảo ngược xâu. s[1:7:2] ‘lmi’ O l y m p i a d
s[::-1] ‘daipmylO’ O l y m p i a d
Biết
121
Bài 1. Hãy dự đoán kết quả đưa ra màn hình sau mỗi câu lệnh xuất dữ liệu print() trong
chương trình ở hình bên và sau đó dùng cửa sổ Shell để đối chiếu, kiểm tra từng kết quả dự đoán.
Đáp án:
Bài 2. Em hãy viết chương trình nhập từ bàn phím xâu s ghi ngày tháng dạng dd/mm/yyyy, trong đó dd là hai kí
tự chỉ ngày, mm là hai kí tự chỉ tháng, yyyy là bốn kí tự chỉ năm. Sau đó đưa ra màn hình ngày, tháng, năm dưới
dạng xâu “Ngày dd tháng mm năm yyyy”.
Ví dụ:
Đáp án:
s = input()
print('Ngày',s[:2],'tháng',s[3:5],'năm',s[6:])
Nhập vào từ bàn phím hai xâu s1 và s2, mỗi xâu không chứa kí tự dấu cách ở đầu và cuối xâu
cũng như không chứa hai hay nhiều dấu cách liên tiếp nhau. Nếu xâu không chứa dấu cách thì nó là một
từ, trong trường hợp ngược lại, dấu cách là dấu phân tách các từ trong xâu. Ví dụ, xâu “Bước tới Đèo
Ngang, bóng xế tà” chứa bảy từ.
Em hãy viết chương trình xác định và đưa ra màn hình tổng số từ trong hai xâu s1 và s2 đã cho.
Ví dụ:
Đáp án:
s1 = input()
s2 = input()
print(s1.count(' ')+s2.count(' ')+2)
123
Trong các câu sau đây, những câu nào đúng?
4) Không thể đếm số lần xuất hiện một xâu con trong một xâu.
124
125
Tìm hiểu thêm: thay thế bàn phím và màn hình bằng file
126
Bài 13 THỰC HÀNH DỮ LIỆU KIỂU XÂU
127
THỰC HÀNH DỮ LIỆU KIỂU XÂU
Bài 2. Giúp bạn tìm và sửa lỗi chương trình
Tên tệp thường gồm hai phần: phần tên và phần mở rộng được ngăn cách nhau bởi dấu “.”.
Ví dụ, các tệp chương trình Python có phần mở rộng là “py”, các tệp văn bản có phần mở
rộng là “doc” hoặc “docx”. Trong hệ điều hành Windows, tên tệp không phân biệt chữ hoa và
chữ thường. Bạn Khánh Linh muốn viết chương trình nhập vào một xâu là tên của một tệp và
kiểm tra xem tên tệp đó có phải là tên của tệp chương trình Python trong hệ điều hành
Windows không.
Khánh Linh đã nghĩ ra thuật toán, bằng cách lấy ra hai kí tự cuối cùng của xâu rồi so
sánh với xâu “py”. Tuy nhiên, chương trình do Khánh Linh viết vẫn còn có lỗi. Em hãy
giúp bạn Khánh Linh tìm và sửa lỗi để chương trình chạy được và đưa ra kết quả đúng.
128
Đáp án: Các chỗ sai
len
2
Chuẩn hóa về
chữ thường
Length = len(fileName)
extensionName = fileName[Length - 2:] #Lấy hai kí tự cuối cùng của xâu fileName
if extensionName.lower() =="py":
print(fileName, "là tệp mã nguồn Python")
else:
print(fileName, "không phải là tệp mã nguồn Python")
129
THỰC HÀNH DỮ LIỆU KIỂU XÂU
Bài 3. Xác định toạ độ
1) Tìm hiểu bài toán: Robot thám hiểm Sao Hoả đang ở điểm có toạ độ (0; 0) nhận
được dòng lệnh điều khiển từ Trái Đất. Dòng lệnh chỉ chứa các kí tự từ tập kí tự
{E, S, W, N}, mỗi kí tự là một lệnh di chuyển với quãng đường bằng một đơn vị độ
dài. Lệnh E – đi về hướng đông, lệnh S – đi về hướng nam, lệnh W – đi về hướng
tây
và lệnh N – đi về hướng bắc. Trục Ox của hệ toạ độ chạy từ tây sang đông, trục Oy
– chạy từ nam lên bắc. Em hãy xác định toạ độ của robot sau khi thực hiện lệnh di
chuyển nhận được.
Ví dụ: Với dòng lệnh “ENENWWWS”, sau khi thực hiện robot sẽ tới vị trí (‒1; 1) Đường đi của robot
Gợi ý: Toạ độ x của đích tới bằng số lượng kí tự 'E' trừ số lượng kí tự 'W'.
Toạ độ y của đích tới bằng số lượng kí tự 'N' trừ số lượng kí tự 'S'. Đáp án:
2) Em hãy đọc hiểu và chạy thử chương trình ở dưới đây và cho biết chương trình đó có giải quyết được bài toán
ở mục 1) hay không.
130
THỰC HÀNH DỮ LIỆU KIỂU XÂU
Tên gọi chữ số bằng tiếng Anh
Em hãy viết chương trình nhập vào từ bàn phím một chữ số trong hệ thập phân, đưa ra màn
hình tên gọi của chữ số đó bằng tiếng Anh.
Ví dụ:
Đáp án: Trong phạm vi kiến thức đã học có thể giải bài toán đã nêu theo cách sau:
Tạo xâu names lưu tên các chữ số, mỗi tên 5 ký tự (bổ sung dấu cách ở cuối nếu chưa đủ 5)
zero one two three four five six seven eight nine
p = int(input())
names = 'zero one two threefour five six seveneightnine '
print(names[p*5:p*5+5])
131
Bài 14 KIỂU DỮ LIỆU
DANH SÁCH - XỬ LÍ DANH SÁCH
132
Kiểu dữ liệu danh sách
Dãy số month
Đưa ra danh sách: Đưa ra dạng lưu trữ trong máy: print(ds)
Đưa ra biên tập để đọc: print(*ds)
Có thể truy nhập theo lát cắt (tương tự như ở xâu) 136
KIỂU DỮ LIỆU DANH SÁCH – XỬ LÝ DANH SÁCH XỬ LÝ DANH SÁCH
Tạo một bản sao danh sách: Hai cách b = a[:]
Cộng các danh sách: b = list(a)
a = [1,2]
b = [7,8,9] + a + [0,1] b = [7,8,9,1,2,0,1]
Nhân một danh sách với số nguyên, biến nguyên giá trị không âm:
a = [1,2]
b = a*3 b = [1,2,1,2,1,2]
c = a*0 c = []
max(a) Trả về phần tử lớn nhất trong danh sách a (các phần tử phải cùng kiểu dữ liệu)
min(a) Trả về phần tử nhỏ nhất trong danh sách a (các phần tử phải cùng kiểu dữ liệu)
len(a) Trả về số lượng phần tử trong danh sách a
Trả về tổng các phần tử trong danh sách a
item in a Kiểm tra phần tử item có trong a hay không. Kết quả: True hoặc False
sum(a)
Bổ sung phần tử x vào cuối danh sách
a.append(x)
a.insert(i,x) Bổ sung phần tử x vào trước phần tử ở vị trí i
a.remove(x) Tìm phần tử đầu tiên trong danh sách bằng x và xóa
a.count(x) Trả về số lần xuất hiện x trong danh sách,
a.sort() Sắp xếp các phần tử theo thứ tự không giảm
a.sort(reverse=True) Sắp xếp các phần tử theo thứ tự không tăng
a.clear() Xóa nội dung của danh sách
138
Bài 1. Đọc chương trình sau đây và cho biết kết quả in ra màn hình. Em hãy soạn thảo và
chạy chương trình để kiểm tra dự đoán của em.
Bài 2. Bạn Thanh muốn tính trung bình cộng của nhiệt độ trung bình các ngày trong tuần.
Thanh đã viết được đoạn chương trình nhập từ bàn phím nhiệt độ trung bình của bảy ngày
trong tuần vào một danh sách (Hình dưới đây). Em hãy giúp bạn Thanh viết tiếp những câu
lệnh còn thiếu vào chỗ trống để máy tính đưa ra màn hình kết quả cần có.
Đáp án:
Cách I:
for i in nh_d: t = t + i
Cách II:
t = sum(nh_d) 139
Camera đặt cạnh trạm thu phí đường cao tốc ghi nhận nhiều thông tin, trong đó có mảng số
nhận dạng loại ô tô đi qua. Mỗi loại ô tô được mã hoá thành một số nguyên dương. Cho dãy số,
mỗi số là mã hoá về loại của một ô tô đi qua trạm thu phí.
Em hãy viết chương trình nhập dãy số mã hoá xe vào từ bàn phím và đưa ra màn hình số loại
xe khác nhau đã được nhận dạng.
Ví dụ:
Đáp án:
fo.close()
fi.close()
141
Trong các câu sau đây, những câu nào đúng?
1) Trong các ngôn ngữ lập trình bậc cao đều có kiểu dữ liệu để lưu trữ một dãy hữu hạn các
phần tử.
2) Trong ngôn ngữ lập trình Python, dữ liệu kiểu danh sách là một dãy hữu hạn các phần tử
cho phép truy cập đến từng phần tử của nó.
3) Python bắt buộc các phần tử của một danh sách phải có cùng một kiểu dữ liệu.
4) Phải khởi tạo một danh sách trong Python bằng phép gán trong chương trình, không thể
nhập các phần tử của danh sách từ bàn phím.
5) Python chỉ cung cấp những hàm sau đây để xử lí danh sách: append(), pop(),
insert(), sort(), clear().
Hướng dẫn:
– Tạo danh sách a từ dữ liệu nhập vào.
– Duyệt các phần tử ai (với i = 0, 1, 2,...,
len(a)– 1); thay ai = 1 nếu ai > 0 và ai
= ‒1 nếu ai < 0.
Lưu ý: Lệnh print()chứa tham số end =
' ' để thêm dấu cách giữa các phần tử của
danh sách.
– Tham khảo chương trình ở Hình 1
Hướng dẫn:
– Tạo danh sách a từ dữ liệu nhập vào.
– Duyệt các phần tử ai (với i = 1, 2,...,
len(a)‒1), đếm các phần tử ai thoả mãn
điều
kiện ai‒1 < ai > ai+1.
– Tham khảo chương trình ở Hình 2.
Bài 3. Trò chơi với các chiếc giày
Có n đôi giày cùng loại chỉ khác nhau về kích cỡ được xếp thành một hàng theo
thứ tự ngẫu nhiên. Chủ trò bí mật rút một chiếc giày và giấu đi, sau đó yêu cầu
người chơi cho biết chiếc giày được giấu là chiếc giày trái hay phải và có số là
bao nhiêu.
Hà My muốn viết một chương trình nhập vào một dãy, mỗi số trong dãy mô tả
một chiếc giày, số có giá trị âm cho biết đó là giày trái, số có giá trị dương cho
biết đó là giày phải, giá trị tuyệt đối của số là kích cỡ của giày (Hình 3). Chương
trình sẽ cho biết chiếc giày nào còn thiếu trong dãy.
Cách làm thông thường để tìm ra chiếc giày còn thiếu là đi ghép các đôi giày, tuy nhiên cách làm này sẽ mất
nhiều thời gian. Một cách làm đơn giản là dựa trên nhận xét: Nếu dãy không thiếu chiếc giày nào thì tổng sẽ
bằng 0, nên có thể xác định chiếc giày còn thiếu khi biết tổng các số trong dãy. Hình 4 là chương trình mà Hà
My viết theo cách làm trên, tuy nhiên chương trình vẫn còn có lỗi. Em hãy giúp Hà My sửa các lỗi để nhận
được chương trình chạy được và cho ra kết quả đúng.
-sum
Quản lí tiền điện
Viết chương trình nhập vào 12 số nguyên dương tương ứng là tiền điện của 12 tháng
trong năm vừa rồi của nhà em, đưa ra màn hình các thông tin sau:
– Tổng số tiền điện của cả năm và tiền điện trung bình theo tháng.
– Liệt kê các tháng có số tiền điện nhiều hơn tiền điện trung bình theo tháng.
Đáp án: import sys
fi = open('input.txt')
fo = open('output.txt','w')
sys.stdin = fi
sys.stdout = fo
fo.close()
fi.close()
Bài 16 KIỂM THỬ VÀ
GỠ LỖI CHƯƠNG TRÌNH
Phân loại lỗi
Hệ thống thông
báo
Lỗi ngữ nghĩa: Viết câu lệnh không đúng yêu cầu cần xử lý.
Ví dụ: Đưa ra nghiệm phương trình ax+b = 0 print(b/a)
(Câu lệnh đúng: print(-b/a) )
Tự tìm và sửa
Chương trình sau thực hiện yêu cầu nhập vào hai số nguyên p, q và danh sách a gồm các số nguyên, sau đó
đưa ra max{│ai│, i = p, p + 1,..., q}. Biết rằng các phần tử của danh sách a được đánh chỉ số bắt đầu từ 0 và
0 ≤ p ≤ q < len(a).
Cần q+1
Việc bổ sung thêm các câu lệnh đưa kết quả trung gian trong quá trình xử lý sẽ giúp:
Xác định các đoạn chương trình không chứa lỗi,
Cục bộ hóa được đoạn xử lý sai.
Thêm vào ở đâu và đưa ra cái gì:
Ví dụ: Kinh nghiệm!
Truy vết với công cụ gỡ lỗi của ngôn ngữ lập trình
Minh họa cách dung debug của hệ thống với một đoạn của một chương trình cụ thể,
Thực hiện chương trình ở chế độ debug, theo dõi giá trị của i và s sau từng bước lặp:
Trình chiếu cho cả lớp xem,
Yêu cầu tự thực hiện lại toàn bộ quá trình.
Câu 1. Em hãy nêu một vài lỗi thuộc nhóm lỗi cú pháp và một vài lỗi thuộc nhóm lỗi
ngữ nghĩa.
if x > 0: res = res +1 a = [2, 4, 6]
else res = res - 1 print(a[3]//2)
print(sum(a) n = input()
m = n // 3
Câu 2. Tại sao phải tạo nhiều bộ dữ liệu vào khác nhau để kiểm thử chương trình?
Có thể chương trình chỉ sai ở vài trường hợp riêng.
Câu 3. Có bao nhiêu nhóm dữ liệu khác nhau cần tạo ra để kiểm thử chương trình?
Ba nhóm: Dữ liệu ứng với trường hợp phổ biến, thường gặp,
Dữ liệu ứng với trường hợp riêng, ít gặp,
Dữ liệu ứng với trường hợp kích thước, giá trị lớn.
Câu 4. Có thể xem giá trị các biến sau khi thực hiện một câu lệnh ở đâu?
Ở cửa sổ debug.
Bài 17
THỰC HÀNH LẬP TRÌNH
GIẢI BÀI TOÁN TRÊN MÁY TÍNH
Bài 1. Cứu nạn
Em hãy mô tả thuật toán cho bài toán Cứu nạn sau đây bằng cách liệt kê các bước hoặc dùng sơ đồ khối.
Bài toán Cứu nạn
Một tàu đánh cá có ngư dân bị tai nạn cần cấp cứu đã gọi điện về cơ sở y tế ở đảo gần nhất cách đó d (hải lí). Để
người bị tai nạn được sơ cứu sớm hơn, tàu đánh cá đổi hướng, đi thẳng về phía đảo với vận tốc v1 (hải lí/giờ),
đồng thời từ đảo người ta cũng cho một tàu cứu nạn có thiết bị y tế sơ cứu đi theo đường đó tới hướng tàu cá với
vận tốc v2 (hải lí/giờ). Em hãy xác định sau bao lâu hai tàu gặp nhau, khi biết dữ liệu d, v1, v2.
Gợi ý: Vì mỗi giờ, khoảng cách giữa hai tàu giảm đi (v1 + v2 ) hải lí, vì vậy để hai tàu gặp nhau sẽ cần
d/(v1+v2) giờ.
n, m = map(int, input().split())
pa, pb = map(int, input().split())
if n <= m: print(0)
elif pa == 0 and pb == 0: print('Không thể có đủ vacxin.')
else: print((n-m+pa+pb-1)//(pa+pb))
Các bức ảnh
Trong một hoạt động ngoại khoá của lớp, giáo viên chủ nhiệm đã chụp được n bức ảnh, các bức ảnh
được lưu trên máy tính có kích thước tương ứng là d1, d2,..., dn (đơn vị Kb).
Giáo viên dự định ghi một số đĩa CD làm phần thưởng cho học sinh. Đĩa CD
mà giáo viên dùng chỉ có thể ghi tối đa W (đơn vị Kb). Vì tất cả các bức ảnh
đều rất đẹp và thú vị nên giáo viên muốn lựa chọn các bức ảnh để ghi vào đĩa
CD với tiêu chí càng nhiều bức ảnh được ghi vào đĩa CD càng tốt. Giáo viên
băn khoăn và muốn biết số lượng tối đa các bức ảnh có thể ghi vào đĩa CD là
bao nhiêu.
Em hãy chỉ ra kết quả từng bước thực hiện để có được chương trình nhận dữ liệu vào là các số nguyên W, d1, d2,...,
dn và trả về số lượng tối đa các bức ảnh có thể ghi vào đĩa CD
Đáp án:
Nhập dữ liệu: W và d = [d1, d2, . . ., dn] ,
Chuẩn bị: ans = 0
Duyệt với mọi v theo thứ tự tăng dần của di:
Nếu v ≤ W: Tăng ans lên 1 và cho W = W –v
Ngược lại: Thoát khỏi vòng lặp.
Đưa ra ans.
Bài 18 LẬP TRÌNH GIẢI QUYẾT BÀI TOÁN
TRÊN MÁY TÍNH
Quá trình giải một bài toán bằng lập trình
Bài toán tin học:
Thường gắn liền với các vấn đề thực tế trong cuộc sống,
Được phát biểu dưới dạng ngôn ngữ tự nhiên,
Gắn liền với bối cảnh xuất hiện bài toán.
Bài 2. Nếu muốn học một ngôn ngữ lập trình bậc cao, em sẽ phải tìm hiểu những gì ở ngôn
ngữ lập trình đó?
Đáp án:
Các quy định về cú pháp của ngôn ngữ
Các loại câu lệnh và cách viết,
Các kiểu dữ liệu thường sử dụng và những phép xử lý cơ bản gắn với những kiểu dữ liệu đó,
Các thư viện chuẩn của ngôn ngữ,
Em hãy giới thiệu một bài toán thực tế mà em biết và trình bày các bước cần thực hiện để
giải quyết bài toán đó bằng máy tính.
Đáp án: Yêu cầu có tính mở, nội dung trả lời: đa dạng.
2) Nếu không biết thuật toán của một bài toán thì không thể viết được chương trình để máy
tính giải quyết bài toán đó.
3) Việc viết chương trình không liên quan gì đến thuật toán và cách tổ chức dữ liệu.
4) Chỉ cần kiểm thử một chương trình khi không thực hiện được chương trình và gặp báo lỗi
trên màn hình.