Programmers learn & share
0 votes
329 views

Problem :

I learning Python with the help of free online Python tutorial which wants me to write following Program:

Create a temperature converter which will convert Fahrenheit values to Celsius and vice-versa using the following two formulas which relate the temperature f in Fahrenheit to the temperature c in Celsius:

    f = c *  9/5 + 32
    c = (f -32)* 5/9 

The input will be a string consisting of a floating-point number followed immediately by the letter F or C, such as "13.2C". I need to convert to the other temperature scale and print the converted value in the same format. For example, if the input is "8F" then the output should be (approximately) "-13.333C", and if the input is "12.5C" then the output should be "54.5F".

My answers are always slightly wrong. Is there any problem in my code? My code is as follows:

def celsiusConvert(farenheit):
   return (farenheit - 32)*(5/9)
def farenheitConvert(celsius):
   return ((celsius*(9/5)) + 32)
inputString = input()
inputDigit = float(inputString[0:-2])
if inputString[-1] == 'C':
   celsius = inputDigit
   print(farenheitConvert(celsius),'F',sep ='')
if inputString[-1] == 'F':
   farenheit = inputDigit
   print(celsiusConvert(farenheit),'C', sep='')
by (6.9k points)   | 329 views

1 Answer

0 votes

Solution :

 

You are cutting the last 2 characters not just the last one:

inputDigit = float(inputString[0:-2])

should be:

inputDigit = float(inputString[0:-1])

This why you are facing accuracy problem as follows:

>>> celsiusConvert(2.4)
-16.444444444444446
>>> celsiusConvert(2.49)
-16.394444444444446

Note : slicing counts from the end slicing to :-2 will cut of both the unit and the last digit as follows:

>>> '2.49F'[:-2]
'2.4'
>>> '2.49F'[:-1]
'2.49'
by (36.1k points)  
2,245 questions
2,807 answers
60 comments
241 users