Skip to content

Commit ff77e37

Browse files
committed
temperature convert
1 parent 815e8af commit ff77e37

1 file changed

Lines changed: 42 additions & 0 deletions

File tree

newcodes/answers/q69.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#!/usr/bin/env python
2+
# coding=utf-8
3+
4+
class Temperature:
5+
coefficients = {'c':(1.0, 0.0, -273.15), 'f':(1.8, -273.15, 32.0)}
6+
7+
def __init__(self, **kwargs):
8+
try:
9+
name, value = kwargs.popitem()
10+
except KeyError:
11+
name, value = 'k', 0
12+
13+
if kwargs or name not in "kcf":
14+
kwargs[name] = value
15+
raise TypeError( 'invalid arguments {0}'.format(kwargs))
16+
setattr(self, name, float(value))
17+
18+
def __getattr__(self, name):
19+
try:
20+
eq = self.coefficients[name]
21+
except KeyError:
22+
raise AttributeError(name)
23+
return (self.k + eq[1]) * eq[0] + eq[2]
24+
25+
def __setattr__(self, name, value):
26+
if name in self.coefficients:
27+
eq = self.coefficients[name]
28+
self.k = (value - eq[2] ) / eq[0] - eq[1]
29+
elif name == 'k':
30+
object.__setattr__(self, name, value)
31+
else:
32+
raise AttributeError(name)
33+
34+
def __str__(self):
35+
return "{0}K".format(self.k)
36+
37+
if __name__ == "__main__":
38+
t = Temperature(f = 70)
39+
print(t.c)
40+
t.c = 23
41+
print(t.f)
42+
print(t.k)

0 commit comments

Comments
 (0)