mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-27 15:01:08 +00:00
Fixes #4710 added exceptions and tests
This commit is contained in:
parent
07646ac92b
commit
4e2fcaf6fb
|
@ -21,6 +21,28 @@ from math import sin
|
||||||
# Acceleration Constant on hearth (unit m/s^2)
|
# Acceleration Constant on hearth (unit m/s^2)
|
||||||
g = 9.80665
|
g = 9.80665
|
||||||
|
|
||||||
|
|
||||||
|
def check_args(init_velocity: float, angle: float) -> None:
|
||||||
|
"""
|
||||||
|
Check that the arguments are valid
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Ensure valid instance
|
||||||
|
if not isinstance(init_velocity, (int, float)):
|
||||||
|
raise TypeError("Invalid velocity. Should be a positive number.")
|
||||||
|
|
||||||
|
if not isinstance(angle, (int, float)):
|
||||||
|
raise TypeError("Invalid angle. Range is 1-90 degrees.")
|
||||||
|
|
||||||
|
# Ensure valid angle
|
||||||
|
if angle > 90 or angle < 1:
|
||||||
|
raise ValueError("Invalid angle. Range is 1-90 degrees.")
|
||||||
|
|
||||||
|
# Ensure valid velocity
|
||||||
|
if init_velocity < 0:
|
||||||
|
raise ValueError("Invalid velocity. Should be a positive number.")
|
||||||
|
|
||||||
|
|
||||||
def horizontal_distance(init_velocity: float, angle: float) -> float:
|
def horizontal_distance(init_velocity: float, angle: float) -> float:
|
||||||
"""
|
"""
|
||||||
Returns the horizontal distance that the object cover
|
Returns the horizontal distance that the object cover
|
||||||
|
@ -37,7 +59,16 @@ def horizontal_distance(init_velocity: float, angle: float) -> float:
|
||||||
91.77
|
91.77
|
||||||
>>> horizontal_distance(100, 78)
|
>>> horizontal_distance(100, 78)
|
||||||
414.76
|
414.76
|
||||||
|
>>> horizontal_distance(-1, 20)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValueError: Invalid velocity. Should be a positive number.
|
||||||
|
>>> horizontal_distance(30, -20)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValueError: Invalid angle. Range is 1-90 degrees.
|
||||||
"""
|
"""
|
||||||
|
check_args(init_velocity, angle)
|
||||||
radians = angle_to_radians(2 * angle)
|
radians = angle_to_radians(2 * angle)
|
||||||
return round(init_velocity ** 2 * sin(radians) / g, 2)
|
return round(init_velocity ** 2 * sin(radians) / g, 2)
|
||||||
|
|
||||||
|
@ -58,10 +89,18 @@ def max_height(init_velocity: float, angle: float) -> float:
|
||||||
22.94
|
22.94
|
||||||
>>> max_height(100, 78)
|
>>> max_height(100, 78)
|
||||||
487.82
|
487.82
|
||||||
|
>>> max_height("a", 20)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
TypeError: Invalid velocity. Should be a positive number.
|
||||||
|
>>> horizontal_distance(30, "b")
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
TypeError: Invalid angle. Range is 1-90 degrees.
|
||||||
"""
|
"""
|
||||||
|
check_args(init_velocity, angle)
|
||||||
radians = angle_to_radians(angle)
|
radians = angle_to_radians(angle)
|
||||||
return round((init_velocity ** 2 * sin(radians) ** 2) / (2 * g), 2)
|
return round(init_velocity ** 2 * sin(radians) ** 2 / (2 * g), 2)
|
||||||
|
|
||||||
|
|
||||||
def total_time(init_velocity: float, angle: float) -> float:
|
def total_time(init_velocity: float, angle: float) -> float:
|
||||||
|
@ -80,8 +119,16 @@ def total_time(init_velocity: float, angle: float) -> float:
|
||||||
4.33
|
4.33
|
||||||
>>> total_time(100, 78)
|
>>> total_time(100, 78)
|
||||||
19.95
|
19.95
|
||||||
|
>>> total_time(-10, 40)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValueError: Invalid velocity. Should be a positive number.
|
||||||
|
>>> total_time(30, "b")
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
TypeError: Invalid angle. Range is 1-90 degrees.
|
||||||
"""
|
"""
|
||||||
|
check_args(init_velocity, angle)
|
||||||
radians = angle_to_radians(angle)
|
radians = angle_to_radians(angle)
|
||||||
return round(2 * init_velocity * sin(radians) / g, 2)
|
return round(2 * init_velocity * sin(radians) / g, 2)
|
||||||
|
|
||||||
|
@ -97,23 +144,17 @@ def test_motion() -> None:
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
from doctest import testmod
|
||||||
|
|
||||||
|
testmod()
|
||||||
|
|
||||||
# Get input from user
|
# Get input from user
|
||||||
init_vel = float(input("Initial Velocity: "))
|
init_vel = float(input("Initial Velocity: ").strip())
|
||||||
|
|
||||||
# Get input from user
|
# Get input from user
|
||||||
angle = float(input("angle: "))
|
angle = float(input("angle: ").strip())
|
||||||
|
|
||||||
# Ensure valid angle
|
|
||||||
if angle > 90 or angle < 1:
|
|
||||||
print("Error: Invalid angle. Range is 1-90 degrees.")
|
|
||||||
|
|
||||||
# Ensure valid velocity
|
|
||||||
elif init_vel < 0:
|
|
||||||
print("Error: Invalid velocity. Should be a positive number.")
|
|
||||||
|
|
||||||
# Print results
|
# Print results
|
||||||
else:
|
|
||||||
print()
|
print()
|
||||||
print("Results: ")
|
print("Results: ")
|
||||||
print(f"Horizontal Distance: {str(horizontal_distance(init_vel, angle))} [m]")
|
print(f"Horizontal Distance: {str(horizontal_distance(init_vel, angle))} [m]")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user