Skip to content

Commit 467ade2

Browse files
Add surface area of cuboid, conical frustum (#6442)
* Add surface area of cuboid, conical frustum * add tests for floats, zeroes * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 32ff336 commit 467ade2

File tree

1 file changed

+116
-15
lines changed

1 file changed

+116
-15
lines changed

Diff for: maths/area.py

+116-15
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@
77
def surface_area_cube(side_length: float) -> float:
88
"""
99
Calculate the Surface Area of a Cube.
10-
1110
>>> surface_area_cube(1)
1211
6
12+
>>> surface_area_cube(1.6)
13+
15.360000000000003
14+
>>> surface_area_cube(0)
15+
0
1316
>>> surface_area_cube(3)
1417
54
1518
>>> surface_area_cube(-1)
@@ -22,16 +25,46 @@ def surface_area_cube(side_length: float) -> float:
2225
return 6 * side_length**2
2326

2427

28+
def surface_area_cuboid(length: float, breadth: float, height: float) -> float:
29+
"""
30+
Calculate the Surface Area of a Cuboid.
31+
>>> surface_area_cuboid(1, 2, 3)
32+
22
33+
>>> surface_area_cuboid(0, 0, 0)
34+
0
35+
>>> surface_area_cuboid(1.6, 2.6, 3.6)
36+
38.56
37+
>>> surface_area_cuboid(-1, 2, 3)
38+
Traceback (most recent call last):
39+
...
40+
ValueError: surface_area_cuboid() only accepts non-negative values
41+
>>> surface_area_cuboid(1, -2, 3)
42+
Traceback (most recent call last):
43+
...
44+
ValueError: surface_area_cuboid() only accepts non-negative values
45+
>>> surface_area_cuboid(1, 2, -3)
46+
Traceback (most recent call last):
47+
...
48+
ValueError: surface_area_cuboid() only accepts non-negative values
49+
"""
50+
if length < 0 or breadth < 0 or height < 0:
51+
raise ValueError("surface_area_cuboid() only accepts non-negative values")
52+
return 2 * ((length * breadth) + (breadth * height) + (length * height))
53+
54+
2555
def surface_area_sphere(radius: float) -> float:
2656
"""
2757
Calculate the Surface Area of a Sphere.
2858
Wikipedia reference: https://en.wikipedia.org/wiki/Sphere
2959
Formula: 4 * pi * r^2
30-
3160
>>> surface_area_sphere(5)
3261
314.1592653589793
3362
>>> surface_area_sphere(1)
3463
12.566370614359172
64+
>>> surface_area_sphere(1.6)
65+
32.169908772759484
66+
>>> surface_area_sphere(0)
67+
0.0
3568
>>> surface_area_sphere(-1)
3669
Traceback (most recent call last):
3770
...
@@ -46,7 +79,6 @@ def surface_area_hemisphere(radius: float) -> float:
4679
"""
4780
Calculate the Surface Area of a Hemisphere.
4881
Formula: 3 * pi * r^2
49-
5082
>>> surface_area_hemisphere(5)
5183
235.61944901923448
5284
>>> surface_area_hemisphere(1)
@@ -70,11 +102,14 @@ def surface_area_cone(radius: float, height: float) -> float:
70102
Calculate the Surface Area of a Cone.
71103
Wikipedia reference: https://en.wikipedia.org/wiki/Cone
72104
Formula: pi * r * (r + (h ** 2 + r ** 2) ** 0.5)
73-
74105
>>> surface_area_cone(10, 24)
75106
1130.9733552923256
76107
>>> surface_area_cone(6, 8)
77108
301.59289474462014
109+
>>> surface_area_cone(1.6, 2.6)
110+
23.387862992395807
111+
>>> surface_area_cone(0, 0)
112+
0.0
78113
>>> surface_area_cone(-1, -2)
79114
Traceback (most recent call last):
80115
...
@@ -93,14 +128,51 @@ def surface_area_cone(radius: float, height: float) -> float:
93128
return pi * radius * (radius + (height**2 + radius**2) ** 0.5)
94129

95130

131+
def surface_area_conical_frustum(
132+
radius_1: float, radius_2: float, height: float
133+
) -> float:
134+
"""
135+
Calculate the Surface Area of a Conical Frustum.
136+
>>> surface_area_conical_frustum(1, 2, 3)
137+
45.511728065337266
138+
>>> surface_area_conical_frustum(4, 5, 6)
139+
300.7913575056268
140+
>>> surface_area_conical_frustum(0, 0, 0)
141+
0.0
142+
>>> surface_area_conical_frustum(1.6, 2.6, 3.6)
143+
78.57907060751548
144+
>>> surface_area_conical_frustum(-1, 2, 3)
145+
Traceback (most recent call last):
146+
...
147+
ValueError: surface_area_conical_frustum() only accepts non-negative values
148+
>>> surface_area_conical_frustum(1, -2, 3)
149+
Traceback (most recent call last):
150+
...
151+
ValueError: surface_area_conical_frustum() only accepts non-negative values
152+
>>> surface_area_conical_frustum(1, 2, -3)
153+
Traceback (most recent call last):
154+
...
155+
ValueError: surface_area_conical_frustum() only accepts non-negative values
156+
"""
157+
if radius_1 < 0 or radius_2 < 0 or height < 0:
158+
raise ValueError(
159+
"surface_area_conical_frustum() only accepts non-negative values"
160+
)
161+
slant_height = (height**2 + (radius_1 - radius_2) ** 2) ** 0.5
162+
return pi * ((slant_height * (radius_1 + radius_2)) + radius_1**2 + radius_2**2)
163+
164+
96165
def surface_area_cylinder(radius: float, height: float) -> float:
97166
"""
98167
Calculate the Surface Area of a Cylinder.
99168
Wikipedia reference: https://en.wikipedia.org/wiki/Cylinder
100169
Formula: 2 * pi * r * (h + r)
101-
102170
>>> surface_area_cylinder(7, 10)
103171
747.6990515543707
172+
>>> surface_area_cylinder(1.6, 2.6)
173+
42.22300526424682
174+
>>> surface_area_cylinder(0, 0)
175+
0.0
104176
>>> surface_area_cylinder(6, 8)
105177
527.7875658030853
106178
>>> surface_area_cylinder(-1, -2)
@@ -124,9 +196,12 @@ def surface_area_cylinder(radius: float, height: float) -> float:
124196
def area_rectangle(length: float, width: float) -> float:
125197
"""
126198
Calculate the area of a rectangle.
127-
128199
>>> area_rectangle(10, 20)
129200
200
201+
>>> area_rectangle(1.6, 2.6)
202+
4.16
203+
>>> area_rectangle(0, 0)
204+
0
130205
>>> area_rectangle(-1, -2)
131206
Traceback (most recent call last):
132207
...
@@ -148,9 +223,12 @@ def area_rectangle(length: float, width: float) -> float:
148223
def area_square(side_length: float) -> float:
149224
"""
150225
Calculate the area of a square.
151-
152226
>>> area_square(10)
153227
100
228+
>>> area_square(0)
229+
0
230+
>>> area_square(1.6)
231+
2.5600000000000005
154232
>>> area_square(-1)
155233
Traceback (most recent call last):
156234
...
@@ -164,9 +242,12 @@ def area_square(side_length: float) -> float:
164242
def area_triangle(base: float, height: float) -> float:
165243
"""
166244
Calculate the area of a triangle given the base and height.
167-
168245
>>> area_triangle(10, 10)
169246
50.0
247+
>>> area_triangle(1.6, 2.6)
248+
2.08
249+
>>> area_triangle(0, 0)
250+
0.0
170251
>>> area_triangle(-1, -2)
171252
Traceback (most recent call last):
172253
...
@@ -188,13 +269,15 @@ def area_triangle(base: float, height: float) -> float:
188269
def area_triangle_three_sides(side1: float, side2: float, side3: float) -> float:
189270
"""
190271
Calculate area of triangle when the length of 3 sides are known.
191-
192272
This function uses Heron's formula: https://en.wikipedia.org/wiki/Heron%27s_formula
193-
194273
>>> area_triangle_three_sides(5, 12, 13)
195274
30.0
196275
>>> area_triangle_three_sides(10, 11, 12)
197276
51.521233486786784
277+
>>> area_triangle_three_sides(0, 0, 0)
278+
0.0
279+
>>> area_triangle_three_sides(1.6, 2.6, 3.6)
280+
1.8703742940919619
198281
>>> area_triangle_three_sides(-1, -2, -1)
199282
Traceback (most recent call last):
200283
...
@@ -233,9 +316,12 @@ def area_triangle_three_sides(side1: float, side2: float, side3: float) -> float
233316
def area_parallelogram(base: float, height: float) -> float:
234317
"""
235318
Calculate the area of a parallelogram.
236-
237319
>>> area_parallelogram(10, 20)
238320
200
321+
>>> area_parallelogram(1.6, 2.6)
322+
4.16
323+
>>> area_parallelogram(0, 0)
324+
0
239325
>>> area_parallelogram(-1, -2)
240326
Traceback (most recent call last):
241327
...
@@ -257,9 +343,12 @@ def area_parallelogram(base: float, height: float) -> float:
257343
def area_trapezium(base1: float, base2: float, height: float) -> float:
258344
"""
259345
Calculate the area of a trapezium.
260-
261346
>>> area_trapezium(10, 20, 30)
262347
450.0
348+
>>> area_trapezium(1.6, 2.6, 3.6)
349+
7.5600000000000005
350+
>>> area_trapezium(0, 0, 0)
351+
0.0
263352
>>> area_trapezium(-1, -2, -3)
264353
Traceback (most recent call last):
265354
...
@@ -297,9 +386,12 @@ def area_trapezium(base1: float, base2: float, height: float) -> float:
297386
def area_circle(radius: float) -> float:
298387
"""
299388
Calculate the area of a circle.
300-
301389
>>> area_circle(20)
302390
1256.6370614359173
391+
>>> area_circle(1.6)
392+
8.042477193189871
393+
>>> area_circle(0)
394+
0.0
303395
>>> area_circle(-1)
304396
Traceback (most recent call last):
305397
...
@@ -313,11 +405,14 @@ def area_circle(radius: float) -> float:
313405
def area_ellipse(radius_x: float, radius_y: float) -> float:
314406
"""
315407
Calculate the area of a ellipse.
316-
317408
>>> area_ellipse(10, 10)
318409
314.1592653589793
319410
>>> area_ellipse(10, 20)
320411
628.3185307179587
412+
>>> area_ellipse(0, 0)
413+
0.0
414+
>>> area_ellipse(1.6, 2.6)
415+
13.06902543893354
321416
>>> area_ellipse(-10, 20)
322417
Traceback (most recent call last):
323418
...
@@ -339,9 +434,12 @@ def area_ellipse(radius_x: float, radius_y: float) -> float:
339434
def area_rhombus(diagonal_1: float, diagonal_2: float) -> float:
340435
"""
341436
Calculate the area of a rhombus.
342-
343437
>>> area_rhombus(10, 20)
344438
100.0
439+
>>> area_rhombus(1.6, 2.6)
440+
2.08
441+
>>> area_rhombus(0, 0)
442+
0.0
345443
>>> area_rhombus(-1, -2)
346444
Traceback (most recent call last):
347445
...
@@ -374,9 +472,12 @@ def area_rhombus(diagonal_1: float, diagonal_2: float) -> float:
374472
print(f"Rhombus: {area_rhombus(10, 20) = }")
375473
print(f"Trapezium: {area_trapezium(10, 20, 30) = }")
376474
print(f"Circle: {area_circle(20) = }")
475+
print(f"Ellipse: {area_ellipse(10, 20) = }")
377476
print("\nSurface Areas of various geometric shapes: \n")
378477
print(f"Cube: {surface_area_cube(20) = }")
478+
print(f"Cuboid: {surface_area_cuboid(10, 20, 30) = }")
379479
print(f"Sphere: {surface_area_sphere(20) = }")
380480
print(f"Hemisphere: {surface_area_hemisphere(20) = }")
381481
print(f"Cone: {surface_area_cone(10, 20) = }")
482+
print(f"Conical Frustum: {surface_area_conical_frustum(10, 20, 30) = }")
382483
print(f"Cylinder: {surface_area_cylinder(10, 20) = }")

0 commit comments

Comments
 (0)