Files
Python/physics/escape_velocity.py

68 lines
2.0 KiB
Python
Raw Permalink Normal View History

import math
def escape_velocity(mass: float, radius: float) -> float:
"""
Calculates the escape velocity needed to break free from a celestial body's
gravitational field.
The formula used is:
v = sqrt(2 * G * M / R)
where:
v = escape velocity (m/s)
G = gravitational constant (6.67430 * 10^-11 m^3 kg^-1 s^-2)
M = mass of the celestial body (kg)
R = radius from the center of mass (m)
Source:
https://en.wikipedia.org/wiki/Escape_velocity
Args:
mass (float): Mass of the celestial body in kilograms.
radius (float): Radius from the center of mass in meters.
Returns:
float: Escape velocity in meters per second, rounded to 3 decimal places.
Examples:
>>> escape_velocity(mass=5.972e24, radius=6.371e6) # Earth
11185.978
>>> escape_velocity(mass=7.348e22, radius=1.737e6) # Moon
2376.307
>>> escape_velocity(mass=1.898e27, radius=6.9911e7) # Jupiter
60199.545
>>> escape_velocity(mass=0, radius=1.0)
0.0
>>> escape_velocity(mass=1.0, radius=0)
Traceback (most recent call last):
...
ZeroDivisionError: Radius cannot be zero.
"""
gravitational_constant = 6.67430e-11 # m^3 kg^-1 s^-2
if radius == 0:
raise ZeroDivisionError("Radius cannot be zero.")
velocity = math.sqrt(2 * gravitational_constant * mass / radius)
return round(velocity, 3)
if __name__ == "__main__":
import doctest
doctest.testmod()
print("Calculate escape velocity of a celestial body...\n")
try:
mass = float(input("Enter mass of the celestial body (in kgs): ").strip())
radius = float(input("Enter radius from the center of mass (in ms): ").strip())
velocity = escape_velocity(mass=mass, radius=radius)
print(f"Escape velocity is {velocity} m/s")
except ValueError:
print("Invalid input. Please enter valid numeric values.")
except ZeroDivisionError as e:
print(e)