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>
This commit is contained in:
Rohan R Bharadwaj 2022-10-13 00:18:49 +05:30 committed by GitHub
parent 32ff33648e
commit 467ade28a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -7,9 +7,12 @@ from math import pi, sqrt
def surface_area_cube(side_length: float) -> float: def surface_area_cube(side_length: float) -> float:
""" """
Calculate the Surface Area of a Cube. Calculate the Surface Area of a Cube.
>>> surface_area_cube(1) >>> surface_area_cube(1)
6 6
>>> surface_area_cube(1.6)
15.360000000000003
>>> surface_area_cube(0)
0
>>> surface_area_cube(3) >>> surface_area_cube(3)
54 54
>>> surface_area_cube(-1) >>> surface_area_cube(-1)
@ -22,16 +25,46 @@ def surface_area_cube(side_length: float) -> float:
return 6 * side_length**2 return 6 * side_length**2
def surface_area_cuboid(length: float, breadth: float, height: float) -> float:
"""
Calculate the Surface Area of a Cuboid.
>>> surface_area_cuboid(1, 2, 3)
22
>>> surface_area_cuboid(0, 0, 0)
0
>>> surface_area_cuboid(1.6, 2.6, 3.6)
38.56
>>> surface_area_cuboid(-1, 2, 3)
Traceback (most recent call last):
...
ValueError: surface_area_cuboid() only accepts non-negative values
>>> surface_area_cuboid(1, -2, 3)
Traceback (most recent call last):
...
ValueError: surface_area_cuboid() only accepts non-negative values
>>> surface_area_cuboid(1, 2, -3)
Traceback (most recent call last):
...
ValueError: surface_area_cuboid() only accepts non-negative values
"""
if length < 0 or breadth < 0 or height < 0:
raise ValueError("surface_area_cuboid() only accepts non-negative values")
return 2 * ((length * breadth) + (breadth * height) + (length * height))
def surface_area_sphere(radius: float) -> float: def surface_area_sphere(radius: float) -> float:
""" """
Calculate the Surface Area of a Sphere. Calculate the Surface Area of a Sphere.
Wikipedia reference: https://en.wikipedia.org/wiki/Sphere Wikipedia reference: https://en.wikipedia.org/wiki/Sphere
Formula: 4 * pi * r^2 Formula: 4 * pi * r^2
>>> surface_area_sphere(5) >>> surface_area_sphere(5)
314.1592653589793 314.1592653589793
>>> surface_area_sphere(1) >>> surface_area_sphere(1)
12.566370614359172 12.566370614359172
>>> surface_area_sphere(1.6)
32.169908772759484
>>> surface_area_sphere(0)
0.0
>>> surface_area_sphere(-1) >>> surface_area_sphere(-1)
Traceback (most recent call last): Traceback (most recent call last):
... ...
@ -46,7 +79,6 @@ def surface_area_hemisphere(radius: float) -> float:
""" """
Calculate the Surface Area of a Hemisphere. Calculate the Surface Area of a Hemisphere.
Formula: 3 * pi * r^2 Formula: 3 * pi * r^2
>>> surface_area_hemisphere(5) >>> surface_area_hemisphere(5)
235.61944901923448 235.61944901923448
>>> surface_area_hemisphere(1) >>> surface_area_hemisphere(1)
@ -70,11 +102,14 @@ def surface_area_cone(radius: float, height: float) -> float:
Calculate the Surface Area of a Cone. Calculate the Surface Area of a Cone.
Wikipedia reference: https://en.wikipedia.org/wiki/Cone Wikipedia reference: https://en.wikipedia.org/wiki/Cone
Formula: pi * r * (r + (h ** 2 + r ** 2) ** 0.5) Formula: pi * r * (r + (h ** 2 + r ** 2) ** 0.5)
>>> surface_area_cone(10, 24) >>> surface_area_cone(10, 24)
1130.9733552923256 1130.9733552923256
>>> surface_area_cone(6, 8) >>> surface_area_cone(6, 8)
301.59289474462014 301.59289474462014
>>> surface_area_cone(1.6, 2.6)
23.387862992395807
>>> surface_area_cone(0, 0)
0.0
>>> surface_area_cone(-1, -2) >>> surface_area_cone(-1, -2)
Traceback (most recent call last): Traceback (most recent call last):
... ...
@ -93,14 +128,51 @@ def surface_area_cone(radius: float, height: float) -> float:
return pi * radius * (radius + (height**2 + radius**2) ** 0.5) return pi * radius * (radius + (height**2 + radius**2) ** 0.5)
def surface_area_conical_frustum(
radius_1: float, radius_2: float, height: float
) -> float:
"""
Calculate the Surface Area of a Conical Frustum.
>>> surface_area_conical_frustum(1, 2, 3)
45.511728065337266
>>> surface_area_conical_frustum(4, 5, 6)
300.7913575056268
>>> surface_area_conical_frustum(0, 0, 0)
0.0
>>> surface_area_conical_frustum(1.6, 2.6, 3.6)
78.57907060751548
>>> surface_area_conical_frustum(-1, 2, 3)
Traceback (most recent call last):
...
ValueError: surface_area_conical_frustum() only accepts non-negative values
>>> surface_area_conical_frustum(1, -2, 3)
Traceback (most recent call last):
...
ValueError: surface_area_conical_frustum() only accepts non-negative values
>>> surface_area_conical_frustum(1, 2, -3)
Traceback (most recent call last):
...
ValueError: surface_area_conical_frustum() only accepts non-negative values
"""
if radius_1 < 0 or radius_2 < 0 or height < 0:
raise ValueError(
"surface_area_conical_frustum() only accepts non-negative values"
)
slant_height = (height**2 + (radius_1 - radius_2) ** 2) ** 0.5
return pi * ((slant_height * (radius_1 + radius_2)) + radius_1**2 + radius_2**2)
def surface_area_cylinder(radius: float, height: float) -> float: def surface_area_cylinder(radius: float, height: float) -> float:
""" """
Calculate the Surface Area of a Cylinder. Calculate the Surface Area of a Cylinder.
Wikipedia reference: https://en.wikipedia.org/wiki/Cylinder Wikipedia reference: https://en.wikipedia.org/wiki/Cylinder
Formula: 2 * pi * r * (h + r) Formula: 2 * pi * r * (h + r)
>>> surface_area_cylinder(7, 10) >>> surface_area_cylinder(7, 10)
747.6990515543707 747.6990515543707
>>> surface_area_cylinder(1.6, 2.6)
42.22300526424682
>>> surface_area_cylinder(0, 0)
0.0
>>> surface_area_cylinder(6, 8) >>> surface_area_cylinder(6, 8)
527.7875658030853 527.7875658030853
>>> surface_area_cylinder(-1, -2) >>> surface_area_cylinder(-1, -2)
@ -124,9 +196,12 @@ def surface_area_cylinder(radius: float, height: float) -> float:
def area_rectangle(length: float, width: float) -> float: def area_rectangle(length: float, width: float) -> float:
""" """
Calculate the area of a rectangle. Calculate the area of a rectangle.
>>> area_rectangle(10, 20) >>> area_rectangle(10, 20)
200 200
>>> area_rectangle(1.6, 2.6)
4.16
>>> area_rectangle(0, 0)
0
>>> area_rectangle(-1, -2) >>> area_rectangle(-1, -2)
Traceback (most recent call last): Traceback (most recent call last):
... ...
@ -148,9 +223,12 @@ def area_rectangle(length: float, width: float) -> float:
def area_square(side_length: float) -> float: def area_square(side_length: float) -> float:
""" """
Calculate the area of a square. Calculate the area of a square.
>>> area_square(10) >>> area_square(10)
100 100
>>> area_square(0)
0
>>> area_square(1.6)
2.5600000000000005
>>> area_square(-1) >>> area_square(-1)
Traceback (most recent call last): Traceback (most recent call last):
... ...
@ -164,9 +242,12 @@ def area_square(side_length: float) -> float:
def area_triangle(base: float, height: float) -> float: def area_triangle(base: float, height: float) -> float:
""" """
Calculate the area of a triangle given the base and height. Calculate the area of a triangle given the base and height.
>>> area_triangle(10, 10) >>> area_triangle(10, 10)
50.0 50.0
>>> area_triangle(1.6, 2.6)
2.08
>>> area_triangle(0, 0)
0.0
>>> area_triangle(-1, -2) >>> area_triangle(-1, -2)
Traceback (most recent call last): Traceback (most recent call last):
... ...
@ -188,13 +269,15 @@ def area_triangle(base: float, height: float) -> float:
def area_triangle_three_sides(side1: float, side2: float, side3: float) -> float: def area_triangle_three_sides(side1: float, side2: float, side3: float) -> float:
""" """
Calculate area of triangle when the length of 3 sides are known. Calculate area of triangle when the length of 3 sides are known.
This function uses Heron's formula: https://en.wikipedia.org/wiki/Heron%27s_formula This function uses Heron's formula: https://en.wikipedia.org/wiki/Heron%27s_formula
>>> area_triangle_three_sides(5, 12, 13) >>> area_triangle_three_sides(5, 12, 13)
30.0 30.0
>>> area_triangle_three_sides(10, 11, 12) >>> area_triangle_three_sides(10, 11, 12)
51.521233486786784 51.521233486786784
>>> area_triangle_three_sides(0, 0, 0)
0.0
>>> area_triangle_three_sides(1.6, 2.6, 3.6)
1.8703742940919619
>>> area_triangle_three_sides(-1, -2, -1) >>> area_triangle_three_sides(-1, -2, -1)
Traceback (most recent call last): Traceback (most recent call last):
... ...
@ -233,9 +316,12 @@ def area_triangle_three_sides(side1: float, side2: float, side3: float) -> float
def area_parallelogram(base: float, height: float) -> float: def area_parallelogram(base: float, height: float) -> float:
""" """
Calculate the area of a parallelogram. Calculate the area of a parallelogram.
>>> area_parallelogram(10, 20) >>> area_parallelogram(10, 20)
200 200
>>> area_parallelogram(1.6, 2.6)
4.16
>>> area_parallelogram(0, 0)
0
>>> area_parallelogram(-1, -2) >>> area_parallelogram(-1, -2)
Traceback (most recent call last): Traceback (most recent call last):
... ...
@ -257,9 +343,12 @@ def area_parallelogram(base: float, height: float) -> float:
def area_trapezium(base1: float, base2: float, height: float) -> float: def area_trapezium(base1: float, base2: float, height: float) -> float:
""" """
Calculate the area of a trapezium. Calculate the area of a trapezium.
>>> area_trapezium(10, 20, 30) >>> area_trapezium(10, 20, 30)
450.0 450.0
>>> area_trapezium(1.6, 2.6, 3.6)
7.5600000000000005
>>> area_trapezium(0, 0, 0)
0.0
>>> area_trapezium(-1, -2, -3) >>> area_trapezium(-1, -2, -3)
Traceback (most recent call last): Traceback (most recent call last):
... ...
@ -297,9 +386,12 @@ def area_trapezium(base1: float, base2: float, height: float) -> float:
def area_circle(radius: float) -> float: def area_circle(radius: float) -> float:
""" """
Calculate the area of a circle. Calculate the area of a circle.
>>> area_circle(20) >>> area_circle(20)
1256.6370614359173 1256.6370614359173
>>> area_circle(1.6)
8.042477193189871
>>> area_circle(0)
0.0
>>> area_circle(-1) >>> area_circle(-1)
Traceback (most recent call last): Traceback (most recent call last):
... ...
@ -313,11 +405,14 @@ def area_circle(radius: float) -> float:
def area_ellipse(radius_x: float, radius_y: float) -> float: def area_ellipse(radius_x: float, radius_y: float) -> float:
""" """
Calculate the area of a ellipse. Calculate the area of a ellipse.
>>> area_ellipse(10, 10) >>> area_ellipse(10, 10)
314.1592653589793 314.1592653589793
>>> area_ellipse(10, 20) >>> area_ellipse(10, 20)
628.3185307179587 628.3185307179587
>>> area_ellipse(0, 0)
0.0
>>> area_ellipse(1.6, 2.6)
13.06902543893354
>>> area_ellipse(-10, 20) >>> area_ellipse(-10, 20)
Traceback (most recent call last): Traceback (most recent call last):
... ...
@ -339,9 +434,12 @@ def area_ellipse(radius_x: float, radius_y: float) -> float:
def area_rhombus(diagonal_1: float, diagonal_2: float) -> float: def area_rhombus(diagonal_1: float, diagonal_2: float) -> float:
""" """
Calculate the area of a rhombus. Calculate the area of a rhombus.
>>> area_rhombus(10, 20) >>> area_rhombus(10, 20)
100.0 100.0
>>> area_rhombus(1.6, 2.6)
2.08
>>> area_rhombus(0, 0)
0.0
>>> area_rhombus(-1, -2) >>> area_rhombus(-1, -2)
Traceback (most recent call last): Traceback (most recent call last):
... ...
@ -374,9 +472,12 @@ if __name__ == "__main__":
print(f"Rhombus: {area_rhombus(10, 20) = }") print(f"Rhombus: {area_rhombus(10, 20) = }")
print(f"Trapezium: {area_trapezium(10, 20, 30) = }") print(f"Trapezium: {area_trapezium(10, 20, 30) = }")
print(f"Circle: {area_circle(20) = }") print(f"Circle: {area_circle(20) = }")
print(f"Ellipse: {area_ellipse(10, 20) = }")
print("\nSurface Areas of various geometric shapes: \n") print("\nSurface Areas of various geometric shapes: \n")
print(f"Cube: {surface_area_cube(20) = }") print(f"Cube: {surface_area_cube(20) = }")
print(f"Cuboid: {surface_area_cuboid(10, 20, 30) = }")
print(f"Sphere: {surface_area_sphere(20) = }") print(f"Sphere: {surface_area_sphere(20) = }")
print(f"Hemisphere: {surface_area_hemisphere(20) = }") print(f"Hemisphere: {surface_area_hemisphere(20) = }")
print(f"Cone: {surface_area_cone(10, 20) = }") print(f"Cone: {surface_area_cone(10, 20) = }")
print(f"Conical Frustum: {surface_area_conical_frustum(10, 20, 30) = }")
print(f"Cylinder: {surface_area_cylinder(10, 20) = }") print(f"Cylinder: {surface_area_cylinder(10, 20) = }")