C9-13 · Tìm lỗi: nhập đến khi hợp lệ

Xem dạng PDF

Gửi bài giải

Điểm: 1,00
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Tác giả:
Nguồn bài:
Sách "Lập trình cơ sở với Python"
Dạng bài
Ngôn ngữ cho phép
Python

Đề

Đề 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: (**)


Đang tải...