Khi cần tính diện tích và chu vi hình tròn sử dụng lớp (class), phương pháp lập trình hướng đối tượng được áp dụng. Một lớp được định nghĩa với thuộc tính bán kính và các phương thức tính toán.
Ví dụ
import math
class Circle:
"""Lớp đại diện cho hình tròn với bán kính."""
def __init__(self, radius):
"""
Khởi tạo hình tròn.
Args:
radius (float): Bán kính hình tròn (phải >= 0)
"""
if radius < 0:
raise ValueError("Bán kính không thể âm")
self.radius = radius
def area(self):
"""Tính diện tích: π * r²"""
return math.pi * self.radius ** 2
def perimeter(self):
"""Tính chu vi: 2 * π * r"""
return 2 * math.pi * self.radius
def diameter(self):
"""Tính đường kính: 2 * r"""
return 2 * self.radius
def __repr__(self):
return f"Circle(radius={self.radius})"
def __str__(self):
return f"Hình tròn bán kính {self.radius}"
# Chương trình chính
def main():
try:
radius_input = input("Nhập bán kính hình tròn: ")
radius = float(radius_input)
circle = Circle(radius)
print(f"\n{circle}")
print(f"Bán kính: {circle.radius}")
print(f"Đường kính: {circle.diameter():.2f}")
print(f"Diện tích: {circle.area():.2f}")
print(f"Chu vi: {circle.perimeter():.2f}")
except ValueError as e:
print(f"Lỗi: {e}")
except KeyboardInterrupt:
print("\nĐã hủy.")
if __name__ == "__main__":
main()
Kết quả mẫu
Nhập bán kính hình tròn: 7 Hình tròn bán kính 7.0 Bán kính: 7.0 Đường kính: 14.00 Diện tích: 153.94 Chu vi: 43.98
Giải thích
- Lớp
Circleđóng gói dữ liệu (bán kính) và hành vi (tính diện tích, chu vi). __init__khởi tạo và validate bán kính (không âm).math.picung cấp hằng số π chính xác.- Phương thức
area()trả về πr²,perimeter()trả về 2πr. __repr__và__str__cho biểu diễn đẹp khi in.- Xử lý ngoại lệ
ValueErrorcho input không hợp lệ.
Mở rộng: Tính toán với nhiều hình tròn
circles = [Circle(r) for r in [1, 2, 3, 5, 10]]
print(f"{'Bán kính':>8} {'Diện tích':>10} {'Chu vi':>10}")
print("-" * 30)
for c in circles:
print(f"{c.radius:>8.1f} {c.area():>10.2f} {c.perimeter():>10.2f}")
# Tìm hình tròn diện tích lớn nhất
largest = max(circles, key=lambda c: c.area())
print(f"\nHình tròn lớn nhất: {largest} (diện tích: {largest.area():.2f})")
Kế thừa: Hình tròn màu
class ColoredCircle(Circle):
def __init__(self, radius, color):
super().__init__(radius)
self.color = color
def __str__(self):
return f"Hình tròn {self.color} bán kính {self.radius}"
c = ColoredCircle(5, "đỏ")
print(c) # Hình tròn đỏ bán kính 5