I am trying to create a temperature conversion module. My class is set up as below:
JavaScript
x
25
25
1
class Temperature:
2
"""A class to help work with temperature in various units"""
3
4
def __init__(self, number, unit):
5
# Convert and store units as self.celcius measure
6
self.number = number
7
self.unit = unit
8
9
def __str__(self):
10
return f"Temperature: {self.number}{self.unit}"
11
12
def celcius(self): #convert to celcius
13
if unit == 'C': self.celcius = number
14
elif unit == 'F': self.celcius = (number - 32) * 5/9
15
elif unit == 'K': self.celcius = number - 273.15
16
else: raise Exception("Unit not recognised")# Unit not recognised
17
18
def to(self, unit, dp=None):#convert self.celcius to temperature measure
19
if unit == 'C': number = self.celcius()
20
elif unit == 'F': number = (9/5 * self.celcius()) + 32
21
elif unit == 'K': number = self.celcius() + 273.15
22
else: raise Exception("Unit not recognised")
23
if dp: number= round(number, dp)
24
return f"{number}{unit}"
25
I then try to convert using the following:
JavaScript
1
14
14
1
from temperature import Temperature
2
#assign temps
3
temp_1 = Temperature(32,'C')
4
temp_2 = Temperature(100, 'F')
5
temp_3 = Temperature(324, 'K')
6
7
print(temp_1)
8
print(temp_2)
9
print(temp_3)
10
11
print(temp_1.to('F'))
12
print(temp_2.to('K', 3))
13
print(temp_3.to('C', 1))
14
The original prints work but the conversion has the error: NameError: name ‘unit’ is not defined. How can I avoid this?
Advertisement
Answer
JavaScript
1
47
47
1
class Temperature:
2
"""A class to help work with temperature in various units"""
3
4
def __init__(self, number, unit):
5
# Convert and store units as self.celcius measure
6
self.number = number
7
self.unit = unit
8
9
def __str__(self):
10
return f"Temperature: {self.number}{self.unit}"
11
12
def celcius(self): # convert to celcius
13
if self.unit == 'C':
14
return self.number
15
elif self.unit == 'F':
16
return (self.number - 32) * 5 / 9
17
elif self.unit == 'K':
18
return self.number - 273.15
19
else:
20
raise Exception("Unit not recognised") # Unit not recognised
21
22
def to(self, unit, dp=None): # convert self.celcius to temperature measure
23
if unit == 'C':
24
self.number = self.celcius()
25
elif unit == 'F':
26
self.number = (9 / 5 * self.celcius()) + 32
27
elif unit == 'K':
28
self.number = self.celcius() + 273.15
29
else:
30
raise Exception("Unit not recognised")
31
if dp: number = round(self.number, dp)
32
return f"{self.number}{unit}"
33
34
if __name__ == '__main__':
35
# assign temps
36
temp_1 = Temperature(32, 'C')
37
temp_2 = Temperature(100, 'F')
38
temp_3 = Temperature(324, 'K')
39
40
print(temp_1)
41
print(temp_2)
42
print(temp_3)
43
44
print(temp_1.to('F'))
45
print(temp_2.to('K', 3))
46
print(temp_3.to('C', 1))
47