Bài tập tin học 9 ôn tập cuối học kỳ 1 về Python — mình đang bí mấy dạng này, ai giúp với!
Mình đang ôn thi cuối học kỳ 1 thì vướng một đống bài Python, đặc biệt là mấy dạng vòng lặp kết hợp điều kiện. Thầy có dặn là đề cuối kỳ sẽ ra theo hướng vận dụng cao hơn giữa kỳ, nên mình khá lo. Mình thử tìm bài tập tin học 9 ôn tập cuối học kỳ 1 trên mạng thì ra khá nhiều nhưng phần lớn không có giải thích rõ, chỉ có đáp án cuối. Mà mình cần hiểu tại sao lại làm vậy hơn là chỉ chép kết quả.
Dạng bài mình đang bí — vòng lặp lồng nhau in hình
Trong chương trình Tin học 9, phần lập trình Python có một dạng mình thấy khó nhất là dùng vòng lặp lồng nhau để in hình tam giác hoặc hình chữ nhật bằng ký tự. Nhìn đề thì tưởng đơn giản, nhưng khi viết code thực tế mình hay bị sai ở chỗ căn lề và số lần lặp.
Ví dụ bài tập mà mình đang làm thử:
Viết chương trình Python nhập vào số nguyên dương n, in ra tam giác vuông gồm n hàng, hàng thứ i gồm i dấu sao (*), căn trái.
Nghe thì đơn giản, nhưng khi mình thêm yêu cầu căn giữa hoặc in tam giác ngược thì bắt đầu rối. Mình thử với n = 5 thì output mong muốn là:
- Hàng 1: 1 dấu *
- Hàng 2: 2 dấu *
- Hàng 3: 3 dấu *
- Hàng 4: 4 dấu *
- Hàng 5: 5 dấu *
Phần căn trái mình làm được rồi, nhưng bài nâng cao yêu cầu in tam giác cân — tức là hàng thứ i có (n - i) khoảng trắng ở đầu rồi mới đến (2*i - 1) dấu sao. Đây là lúc mình bắt đầu loạn.
Mình đã thử — và sai ở đâu
Mình thử viết như này:
n = int(input())
for i in range(1, n+1):
print(' ' * (n - i) + '*' * (2*i - 1))
Chạy thử thì được hình tam giác cân trông cũng ổn, nhưng khi thầy ra thêm yêu cầu in ngược lại (hàng đầu to nhất, hàng cuối chỉ 1 dấu sao) thì mình sửa range thành range(n, 0, -1) nhưng khoảng trắng lại ra sai, tam giác bị lệch sang phải thay vì giữ căn giữa.
Mình đoán là do biến i lúc này chạy từ n xuống 1 nên công thức (n - i) cho khoảng trắng bị âm hoặc ngược chiều, nhưng mình chưa biết sửa công thức như thế nào cho đúng. Mình thử dùng thêm biến phụ j đếm từ 1 lên nhưng lồng vào for chính thì lại thành vòng lặp kép không cần thiết, code trông rất lộn xộn.
Những chỗ khác mình cũng đang lơ mơ
Ngoài dạng in hình, mình còn đang ôn mấy phần sau cho bài tập tin học 9 ôn tập cuối học kỳ 1:
- Hàm (function) tự định nghĩa: mình hiểu cú pháp def, nhưng hay quên lúc nào cần return, lúc nào chỉ print trong hàm là đủ.
- Xử lý chuỗi: các phương thức như .split(), .strip(), .upper() mình nhớ không hết, hay nhầm thứ tự tham số.
- Bài toán kiểm tra số nguyên tố: viết được nhưng khi yêu cầu tối ưu vòng lặp (chỉ chạy đến căn bậc hai của n) thì mình chưa hiểu tại sao lại dừng ở đó, chỉ học thuộc công thức chứ chưa hiểu bản chất.
- List và vòng lặp for trên list: thao tác cơ bản thì ổn, nhưng bài yêu cầu lọc phần tử hoặc tạo list mới từ điều kiện thì mình hay bị nhầm chỉ số.
Mình đang cố hệ thống lại từng dạng trước khi thi. Tháng này vừa có thi học sinh giỏi cấp huyện vòng đầu nên thầy cô cũng đang bận, không hỏi thêm được nhiều ngoài giờ học. Nhân dịp 20/11 vừa rồi mình cũng cảm ơn thầy rồi, nhưng vẫn ngại hỏi thêm nhiều quá vì biết thầy đang bận chấm bài.
Mọi người trong đây có ai đã ôn qua phần này chưa? Đặc biệt là dạng vòng lặp in hình tam giác ngược có căn giữa — công thức tính khoảng trắng mình đang sai ở đâu, và có cách nào nghĩ cho dễ nhớ hơn không? Với lại nếu ai có bộ bài tập tin học 9 ôn tập cuối học kỳ 1 có lời giải từng bước thì chia sẻ cho mình với, mình đang rất cần để tự luyện thêm ở nhà!
Câu trả lời(0)
Chưa có câu trả lời
ClassBk AI sẽ giải thích câu hỏi này.
Học thêm hiệu quả
Khóa học online chất lượng cao
Sách giáo khoa online
Đầy đủ các môn học
Gia sư online
Học 1-1 với giáo viên giỏi. Cam kết tiến bộ trong 30 ngày.