1. Canvi d’unitats¶
Un diccionari de canvi d’unitats és un diccionari en què les claus són noms d’unitats i el valor corresponent és el factor de conversió a la unitat de referència. Per exemple, al diccionari de canvi d’unitats següent, la unitat de referència són els centímetres cúbics.
{
'cl': 10, # 1 cl = 10 cm³
'dl': 100, # 1 dl = 100 cm³
'l': 1000, # 1 l = 1000 cm³
}
Volem facilitar la creació de diccionaris de canvi d’unitats quan
les unitats a convertir són del Sistema Internacional d’Unitats
(SI). Per això, partirem d’un diccionari de prefixos que contindrà
alguns dels prefixos de l’SI. Una clau d’aquest
diccionari serà un símbol del prefix i el valor associat la potència
de 10 que li correspon. Per exemple, al diccionari de prefixos
següent, la clau 'd' és el símbol del prefix deci i li correspon
\(10^{-1}\), la clau 'c' és el símbol del prefix centi i li
correspon \(10^{-2}\) i així successivament.
>>> prefixos = {
... 'da': 1e1,
... 'h': 1e2,
... 'k': 1e3,
... 'd': 1e-1,
... 'c': 1e-2,
... 'm': 1e-3,
... }
Dissenya la funció següent i desa-la al mòdul unitats (fitxer
unitats.py).
- unitats.calcula_canvi_unitats(uni_origen, potencia, factor, prefixos)¶
uni_origen és una unitat de l’SI sense prefix.
potencia a què cal elevar els prefixos. Normalment, serà 1, però pot ser 2 en el cas d’unitats de superfície (m²) o 3 en cas de volum (m³).
factor de conversió entre uni_origen i la unitat de referència (que és implícita).
prefixos és un diccionari de prefixos.
Retorna el diccionari de canvi d’unitats que conté els factors de conversió tant de uni_origen com dels prefixos del diccionari de prefixos cap a la unitat de referència. Cal enganxar els símbols dels prefixos a uni_origen.
Per exemple:
La unitat de referència és cm³ >>> cu = calcula_canvi_unitats('m³', 3, 1e6, prefixos) >>> ru = { ... 'm³': 1e6, ... 'dam³': 1e9, ... 'hm³': 1e12, ... 'km³': 1e15, ... 'dm³': 1e3, ... 'cm³': 1, ... 'mm³': 1e-3, ... } ru == cu amb tolerància eps en cada unitat >>> if any(map(lambda x: abs(cu[x] - ru[x]) >= eps, ru)): print(cu)
Trobaràs més tests al fitxer
test-calcula_canvi_unitats.txt.