python-249Đọc toàn bộ đề miễn phí

Lớp hình chữ nhật với thuộc tính có kiểm tra

Một lớp đúng nghĩa không chỉ gom dữ liệu, nó còn giữ luật cho dữ liệu đó. Hình chữ nhật

PythonCơ bản12 phút

Tiến độ của tôi ở bài này

Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

oopclasspropertyvalidationentry-ramp

Kiến thức tiên quyết: python-basics, python-classes-intro.

Nội dung đề bài

Mô tả bài toán

Một lớp đúng nghĩa không chỉ gom dữ liệu, nó còn giữ luật cho dữ liệu đó. Hình chữ nhật là ví dụ gọn nhất: kích thước phải luôn dương, và mọi cửa được phép thay đổi kích thước đều phải đi qua cùng một chỗ kiểm tra. Bài này luyện @property kèm setter, thuộc tính riêng và phương thức biến đổi trạng thái.

Yêu cầu

Cài đặt lớp Rectangle với đúng các thành phần sau:

  • init(self, width, height): nhận hai kích thước; ném ValueError nếu một trong

hai không dương. Kích thước được lưu riêng trong self._width và self._height.

  • thuộc tính width và height: getter trả về giá trị đang lưu dưới dạng float;

setter từ chối giá trị không dương bằng ValueError.

  • set_width(self, value): ghi qua thuộc tính width, trả về None.
  • set_height(self, value): ghi qua thuộc tính height, trả về None.
  • scale(self, factor): nhân cả hai kích thước với factor; ném ValueError nếu

factor không dương; trả về None.

  • area(self): trả về diện tích.
  • perimeter(self): trả về chu vi.
  • is_square(self): trả về True khi hai kích thước bằng nhau, ngược lại False.

Quy ước nộp bài

Nộp lớp Rectangle trong solution.py. Hệ thống tự khởi tạo lớp rồi gọi phương thức trực tiếp, so từng giá trị trả về với sai số 1e-6 và bắt ngoại lệ ValueError; không đọc dữ liệu từ stdin và không in ra stdout.

Input

Hệ thống khởi tạo lớp bằng hai tham số từ khoá width và height, rồi gọi lần lượt các phương thức theo kịch bản của từng bộ test.

Output

Danh sách giá trị trả về của từng lượt gọi, theo đúng thứ tự được gọi. Ba phương thức biến đổi trạng thái (set_width, set_height, scale) trả về None.

Ràng buộc

  • width, height và factor là số thực.
  • Mọi giá trị không dương phải bị chặn ngay tại cửa vào bằng ValueError.
  • is_square trả về bool; area và perimeter trả về float.

Ví dụ 1

Input

Rectangle(init={"width": 3, "height": 4}, methods=[{"method": "area"}, {"method": "perimeter"}, {"method": "is_square"}])

Output

[12.0, 14.0, false]

Ví dụ 2

Input

Rectangle(init={"width": 5, "height": 5}, methods=[{"method": "is_square"}, {"method": "area"}])

Output

[true, 25.0]

Giải thích

Với width=3, height=4, gọi area(), perimeter(), is_square() thì kết quả lần lượt là 12.0, 14.0, False. Nếu gọi thêm scale(2) thì kích thước trở thành 6 và 8, nên area() trả 48.0.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.

Nhóm Zalo