Temperature conversion: Difference between revisions
m (→{{header|Python}}: Remove idle version info) |
(→{{header|Python}}: Universal conversion.) |
||
Line 93: | Line 93: | ||
KeyboardInterrupt |
KeyboardInterrupt |
||
>>> </lang> |
>>> </lang> |
||
===Python: Universal conversion=== |
|||
This converts from any one of the units to all the others |
|||
<lang python>>>> toK = {'C': (lambda c: c + 273.15), |
|||
'F': (lambda f: (f + 459.67) / 1.8), |
|||
'R': (lambda r: r / 1.8), |
|||
'K': (lambda k: k) } |
|||
>>> while True: |
|||
magnitude, unit = input('<value> <K/R/F/C> ? ').split() |
|||
k = toK[unit](float(magnitude)) |
|||
print("%g Kelvin = %g Celsius = %g Fahrenheit = %g Rankine degrees." |
|||
% (k, k - 273.15, k * 1.8 - 459.67, k * 1.8)) |
|||
<value> <K/R/F/C> ? 222.2 K |
|||
222.2 Kelvin = -50.95 Celsius = -59.71 Fahrenheit = 399.96 Rankine degrees. |
|||
<value> <K/R/F/C> ? -50.95 C |
|||
222.2 Kelvin = -50.95 Celsius = -59.71 Fahrenheit = 399.96 Rankine degrees. |
|||
<value> <K/R/F/C> ? -59.71 F |
|||
222.2 Kelvin = -50.95 Celsius = -59.71 Fahrenheit = 399.96 Rankine degrees. |
|||
<value> <K/R/F/C> ? 399.96 R |
|||
222.2 Kelvin = -50.95 Celsius = -59.71 Fahrenheit = 399.96 Rankine degrees. |
|||
<value> <K/R/F/C> ? </lang> |
Revision as of 20:07, 12 February 2013
There are quite a number of temperature scales. For this task we will concentrate on 4 of the perhaps best-known ones: Kelvin, Celcius, Fahrenheit and Rankine.
The Celcius and Kelvin scales have the same magnitude, but different null points.
0 degrees Celcius corresponds to 273.15 kelvin.
0 kelvin is absolute zero.
The Fahrenheit and Rankine scales also have the same magnitude, but different null points.
0 degrees Fahrenheit corresponds to 459.67 degrees Rankine.
0 degrees Rankine is absolute zero.
The Celcius/Kelvin and Fahrenheit/Rankine scales have a ratio of 5 : 9.
Write code that accepts a value of kelvin, converts it to values on the three other scales and prints the result. For instance:
K 21.00 C -252.15 F -421.87 R 37.80
D
<lang d>import std.stdio, std.conv, std.string;
void main(string[] args) {
if (args.length == 2 && isNumeric(args[1])) { immutable kelvin = to!double(args[1]); if (kelvin >= 0) { writefln("K %2.2f", kelvin); writefln("C %2.2f", kelvinToCelsius(kelvin)); writefln("F %2.2f", kelvinToFahrenheit(kelvin)); writefln("R %2.2f", kelvinToRankine(kelvin)); } else writefln("%2.2f K is below absolute zero", kelvin); }
}
double kelvinToCelsius(in double k) pure nothrow {
return k - 273.15;
}
double kelvinToFahrenheit(in double k) pure nothrow {
return k * 1.8 - 459.67;
}
double kelvinToRankine(in double k) pure nothrow {
return k * 1.8;
}
unittest {
import std.math; assert(approxEqual(kelvinToCelsius(21.0), -252.15)); assert(approxEqual(kelvinToFahrenheit(21.0), -421.87)); assert(approxEqual(kelvinToRankine(21.0), 37.8));
}</lang>
- Output:
K 21.00 C -252.15 F -421.87 R 37.80
Python
<lang python>>>> while True: k = float(input('K ? ')) print("%g Kelvin = %g Celsius = %g Fahrenheit = %g Rankine degrees." % (k, k - 273.15, k * 1.8 - 459.67, k * 1.8))
K ? 21.0
21 Kelvin = -252.15 Celsius = -421.87 Fahrenheit = 37.8 Rankine degrees.
K ? 222.2
222.2 Kelvin = -50.95 Celsius = -59.71 Fahrenheit = 399.96 Rankine degrees.
K ?
Traceback (most recent call last):
File "<pyshell#4>", line 2, in <module> k = float(input('K ? '))
KeyboardInterrupt >>> </lang>
Python: Universal conversion
This converts from any one of the units to all the others <lang python>>>> toK = {'C': (lambda c: c + 273.15),
'F': (lambda f: (f + 459.67) / 1.8), 'R': (lambda r: r / 1.8), 'K': (lambda k: k) }
>>> while True: magnitude, unit = input('<value> <K/R/F/C> ? ').split() k = toK[unit](float(magnitude)) print("%g Kelvin = %g Celsius = %g Fahrenheit = %g Rankine degrees." % (k, k - 273.15, k * 1.8 - 459.67, k * 1.8))
<value> <K/R/F/C> ? 222.2 K
222.2 Kelvin = -50.95 Celsius = -59.71 Fahrenheit = 399.96 Rankine degrees.
<value> <K/R/F/C> ? -50.95 C
222.2 Kelvin = -50.95 Celsius = -59.71 Fahrenheit = 399.96 Rankine degrees.
<value> <K/R/F/C> ? -59.71 F
222.2 Kelvin = -50.95 Celsius = -59.71 Fahrenheit = 399.96 Rankine degrees.
<value> <K/R/F/C> ? 399.96 R
222.2 Kelvin = -50.95 Celsius = -59.71 Fahrenheit = 399.96 Rankine degrees.
<value> <K/R/F/C> ? </lang>