1
1
"""
2
2
Find the area of various geometric shapes
3
3
"""
4
- from math import pi
4
+ from math import pi , sqrt
5
5
6
6
7
7
def surface_area_cube (side_length : float ) -> float :
@@ -26,7 +26,7 @@ def surface_area_sphere(radius: float) -> float:
26
26
"""
27
27
Calculate the Surface Area of a Sphere.
28
28
Wikipedia reference: https://en.wikipedia.org/wiki/Sphere
29
- :return 4 * pi * r^2
29
+ Formula: 4 * pi * r^2
30
30
31
31
>>> surface_area_sphere(5)
32
32
314.1592653589793
@@ -44,7 +44,7 @@ def surface_area_sphere(radius: float) -> float:
44
44
45
45
def area_rectangle (length : float , width : float ) -> float :
46
46
"""
47
- Calculate the area of a rectangle
47
+ Calculate the area of a rectangle.
48
48
49
49
>>> area_rectangle(10, 20)
50
50
200
@@ -68,7 +68,7 @@ def area_rectangle(length: float, width: float) -> float:
68
68
69
69
def area_square (side_length : float ) -> float :
70
70
"""
71
- Calculate the area of a square
71
+ Calculate the area of a square.
72
72
73
73
>>> area_square(10)
74
74
100
@@ -84,7 +84,7 @@ def area_square(side_length: float) -> float:
84
84
85
85
def area_triangle (base : float , height : float ) -> float :
86
86
"""
87
- Calculate the area of a triangle
87
+ Calculate the area of a triangle given the base and height.
88
88
89
89
>>> area_triangle(10, 10)
90
90
50.0
@@ -106,9 +106,42 @@ def area_triangle(base: float, height: float) -> float:
106
106
return (base * height ) / 2
107
107
108
108
109
+ def area_triangle_three_sides (side1 : float , side2 : float , side3 : float ) -> float :
110
+ """
111
+ Calculate area of triangle when the length of 3 sides are known.
112
+
113
+ This function uses Heron's formula: https://en.wikipedia.org/wiki/Heron%27s_formula
114
+
115
+ >>> area_triangle_three_sides(5, 12, 13)
116
+ 30.0
117
+ >>> area_triangle_three_sides(10, 11, 12)
118
+ 51.521233486786784
119
+ >>> area_triangle_three_sides(-1, -2, -1)
120
+ Traceback (most recent call last):
121
+ ...
122
+ ValueError: area_triangle_three_sides() only accepts non-negative values
123
+ >>> area_triangle_three_sides(1, -2, 1)
124
+ Traceback (most recent call last):
125
+ ...
126
+ ValueError: area_triangle_three_sides() only accepts non-negative values
127
+ """
128
+ if side1 < 0 or side2 < 0 or side3 < 0 :
129
+ raise ValueError ("area_triangle_three_sides() only accepts non-negative values" )
130
+ elif side1 + side2 < side3 or side1 + side3 < side2 or side2 + side3 < side1 :
131
+ raise ValueError ("Given three sides do not form a triangle" )
132
+ semi_perimeter = (side1 + side2 + side3 ) / 2
133
+ area = sqrt (
134
+ semi_perimeter
135
+ * (semi_perimeter - side1 )
136
+ * (semi_perimeter - side2 )
137
+ * (semi_perimeter - side3 )
138
+ )
139
+ return area
140
+
141
+
109
142
def area_parallelogram (base : float , height : float ) -> float :
110
143
"""
111
- Calculate the area of a parallelogram
144
+ Calculate the area of a parallelogram.
112
145
113
146
>>> area_parallelogram(10, 20)
114
147
200
@@ -132,7 +165,7 @@ def area_parallelogram(base: float, height: float) -> float:
132
165
133
166
def area_trapezium (base1 : float , base2 : float , height : float ) -> float :
134
167
"""
135
- Calculate the area of a trapezium
168
+ Calculate the area of a trapezium.
136
169
137
170
>>> area_trapezium(10, 20, 30)
138
171
450.0
@@ -172,7 +205,7 @@ def area_trapezium(base1: float, base2: float, height: float) -> float:
172
205
173
206
def area_circle (radius : float ) -> float :
174
207
"""
175
- Calculate the area of a circle
208
+ Calculate the area of a circle.
176
209
177
210
>>> area_circle(20)
178
211
1256.6370614359173
@@ -188,7 +221,7 @@ def area_circle(radius: float) -> float:
188
221
189
222
def area_ellipse (radius_x : float , radius_y : float ) -> float :
190
223
"""
191
- Calculate the area of a ellipse
224
+ Calculate the area of a ellipse.
192
225
193
226
>>> area_ellipse(10, 10)
194
227
314.1592653589793
@@ -214,7 +247,7 @@ def area_ellipse(radius_x: float, radius_y: float) -> float:
214
247
215
248
def area_rhombus (diagonal_1 : float , diagonal_2 : float ) -> float :
216
249
"""
217
- Calculate the area of a rhombus
250
+ Calculate the area of a rhombus.
218
251
219
252
>>> area_rhombus(10, 20)
220
253
100.0
@@ -236,24 +269,20 @@ def area_rhombus(diagonal_1: float, diagonal_2: float) -> float:
236
269
return 1 / 2 * diagonal_1 * diagonal_2
237
270
238
271
239
- def main ():
240
- print ("Areas of various geometric shapes: \n " )
241
- print (f"Rectangle: { area_rectangle (10 , 20 )} " )
242
- print (f"Square: { area_square (10 )} " )
243
- print (f"Triangle: { area_triangle (10 , 10 )} " )
244
- print (f"Parallelogram: { area_parallelogram (10 , 20 )} " )
245
- print (f"Trapezium: { area_trapezium (10 , 20 , 30 )} " )
246
- print (f"Circle: { area_circle (20 )} " )
247
- print ("\n Surface Areas of various geometric shapes: \n " )
248
- print (f"Cube: { surface_area_cube (20 )} " )
249
- print (f"Sphere: { surface_area_sphere (20 )} " )
250
- print (f"Rhombus: { area_rhombus (10 , 20 )} " )
251
-
252
-
253
272
if __name__ == "__main__" :
254
-
255
273
import doctest
256
274
257
275
doctest .testmod (verbose = True ) # verbose so we can see methods missing tests
258
276
259
- main ()
277
+ print ("[DEMO] Areas of various geometric shapes: \n " )
278
+ print (f"Rectangle: { area_rectangle (10 , 20 ) = } " )
279
+ print (f"Square: { area_square (10 ) = } " )
280
+ print (f"Triangle: { area_triangle (10 , 10 ) = } " )
281
+ print (f"Triangle: { area_triangle_three_sides (5 , 12 , 13 ) = } " )
282
+ print (f"Parallelogram: { area_parallelogram (10 , 20 ) = } " )
283
+ print (f"Trapezium: { area_trapezium (10 , 20 , 30 ) = } " )
284
+ print (f"Circle: { area_circle (20 ) = } " )
285
+ print ("\n Surface Areas of various geometric shapes: \n " )
286
+ print (f"Cube: { surface_area_cube (20 ) = } " )
287
+ print (f"Sphere: { surface_area_sphere (20 ) = } " )
288
+ print (f"Rhombus: { area_rhombus (10 , 20 ) = } " )
0 commit comments