Dissenya una funció que donada una posició inicial x0 en metres, una velocitat inicial v0 (en m/s), una acceleració constant a (en m/s²), i el temps transcorregut t (en segons), calculi i retorni la posició final.
def mrua(x0, v0, a, t): """ >>> round(mrua(0, 0, 6, 5), 2) 75.0 >>> round(mrua(10, 0, 2, 20.3), 2) 422.09 """ x = x0 + v0*t + (1/2)*a*t**2 return x
Fent servir la funció anterior, dissenya un altre funció caiguda_lliure(h, t), que donada una altura h (en metres) i un termps t (expressat en minuts) calculi i retorni la altura final. Si aquesta és inferior a 0, ha de retornar -1.0.
Amb les dues funcions en el mateix mòdul: fisica_lliure.py
def mrua(x0, v0, a, t): """ >>> round(mrua(0, 0, 6, 5), 2) 75.0 >>> round(mrua(10, 0, 2, 20.3), 2) 422.09 """ x = x0 + v0*t + (1/2)*a*t**2 return x def caiguda_lliure(h, t): """ La altura h esta en metres, i el temps t en minuts! >>> round(caiguda_lliure(1000, 0.1), 1) # 6 segons 823.5 >>> round(caiguda_lliure(1000, 0.2), 1) # 12 segons 293.9 >>> round(caiguda_lliure(1000, 0.3), 1) # 18 segons -1.0 """ h = mrua(h, 0, -9.80665, t*60) return max(h, -1.0) # max ens permet estalviar el condicional
Amb la nova funció en un altre mòdul:
en el mòdul fisica.py
def mrua(x0, v0, a, t): """ >>> round(mrua(0, 0, 6, 5), 2) 75.0 >>> round(mrua(10, 0, 2, 20.3), 2) 422.09 """ x = x0 + v0*t + (1/2)*a*t**2 return xen el mòdul lliure.py
import fisica # la funció mrua es troba al mòdul fisica.py import scipy.constants # aquest altre mòdul defineix el valor de g amb més precissió def caiguda_lliure(h, t): """ La altura h esta en metres, i el temps t en minuts! >>> round(caiguda_lliure(1000, 0.1), 1) 823.5 >>> round(caiguda_lliure(1000, 0.2), 1) 293.9 >>> round(caiguda_lliure(1000, 0.3), 1) -1.0 """ a = scipy.constants.g # acceleració de la gravetat h = fisica.mrua(h, 0, -a, t*60) return max(h, -1.0)