Che è una soluzione Pythonic al seguente?modo efficiente per arrotondare con precisione arbitraria in Python
Sto leggendo un sensore di temperatura che ha .5 risoluzione. Ho bisogno di scriverlo (ha un'uscita cronotermostato programmabile), anche con risoluzione .5.
Così ho scritto questa funzione (Python 2.7) per arrotondare un galleggiante come input per il al più vicino 0,5:
def point5res(number):
decimals = number - int(number)
roundnum = round(number, 0)
return roundnum + .5 if .25 <= decimals < .75 else roundnum
print point5res (6.123)
print point5res(6.25)
print point5res(6.8)
che funziona bene, le uscite 6.0, 6.5 e 7.0, rispettivamente. È proprio quello che voglio.
Sono relativamente nuovo a Python. La linea
return roundnum + .5 if .25 <= decimals < .75 else roundnum
mi fa sbavare con ammirazione per i suoi implementatori. Ma è Pythonic?
Edit: dal distacco, ho imparato un po 'di più what is and isn't 'Pythonic'. Il mio codice non lo è. Cmd's anwwer, sotto, è. Grazie!
Provalo per - 5.4. –
o valori negativi in generale, suppongo –
Prova 6.51. Il risultato è 7.5. Ma hai ragione, i confronti concatenati sono una grande caratteristica. E anche la sintassi delle espressioni ternarie, una volta che la "ottieni", è molto bella. –