C9-13 · Tìm lỗi: nhập đến khi hợp lệ
Xem dạng PDFĐề
Đề như C9-06 nhưng chỉ in số hợp lệ: đọc lần lượt từng dòng cho đến khi gặp số nguyên trong đoạn [1; 100] (bảo đảm có) rồi in số đó.
Chương trình dưới đây bị Time Limit ở mọi ca kiểm thử mà không hề có traceback. Hãy tìm lỗi, giải thích vì sao except: trần che mất nó, sửa cả hai chỗ rồi nộp chương trình đã sửa.
def doc_so():
while True:
try:
so = int(imput())
if 1 <= so <= 100:
return so
except:
pass
print(doc_so())
Gợi ý: thử nộp bản chỉ sửa except: thành except ValueError: (giữ nguyên chỗ còn lại) và xem verdict đổi thành gì.
Dữ liệu vào
Nhiều dòng, mỗi dòng một chuỗi; có ít nhất một dòng là số nguyên trong [1; 100]. Một dòng là số nguyên khi int() đổi được nó.
Kết quả
Một dòng: số nguyên hợp lệ đầu tiên (in dạng số: +7 in 7, 042 in 42).
Ràng buộc
- Tối đa 1000 dòng; mỗi dòng dài 1 đến 50 ký tự ASCII in được, không có dấu cách ở đầu/cuối, không chứa
_.
Ví dụ
Dữ liệu vào:
muoi
250
42
Kết quả:
42
Giải thích ví dụ
muoi không đổi được thành số, 250 ngoài đoạn, 42 hợp lệ nên in 42.
Về chương trình lỗi: imput là tên chưa định nghĩa nên mọi lần lặp đều ném NameError; except: trần bắt luôn lỗi này (không chỉ ValueError), nên vòng while True lặp mãi mà không in traceback nào → Time Limit. Hệ thống chấm chỉ kiểm kết quả: bản sửa imput mà vẫn để except: trần cũng được Accepted, nhưng vẫn là bài làm chưa đạt yêu cầu "sửa cả hai chỗ".
Nguồn trong sách: Bài C9-13, mục 9.10, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long · Mức: (**)