Conversion code not working properly

W

weasel

Why is the Farenheit to Celsius part not working properly? Instead of
showing a similar range of what the farenheit is listing, the celsius
portion is showing half the range of farenheit.

print "\nWelcome to the Temperature program"

while True:
low1 = raw_input("Please enter a low temperature: ").upper()
if low1 != 'I QUIT':
low = int(low1)
if low1 == 'I QUIT':
break


high = int(raw_input("Please enter a high temperature: "))
temp = raw_input('Please indicate Celsius or Fahrenheit ').upper()

while not temp or temp not in 'CF':
temp = raw_input('Please indicate Celsius or Fahrenheit
').upper()

if temp == 'C' and low <= high:

low_other_temp = (9 / 5 * low) + 32
high_other_temp = (9 / 5 * high) + 32
rnge = range(low, high + 1)
faren = range(low_other_temp, high_other_temp + 1)
print rnge
print faren

elif temp == 'F' and low <= high:

num1 = low - 32
num2 = high - 32
low_temp = num1 * 5/9
high_temp = num2 * 5/9
rnge = range(low, high + 1)
celsi = range(low_temp, high_temp + 1)
print rnge
print celsi

else:
print 'Invalid temperatures specified! The low must be less
than the high!'

exit = raw_input('Hit <enter> to continue. Type " I quit" in the
low temp field to exit.')
print 'Returning to main.'
 
T

Terry Reedy

weasel said:
Why is the Farenheit to Celsius part not working properly?

Specific examples of what you put in, what you get out, and what you
expected out and why often helps get answers.
Instead of
showing a similar range of what the farenheit is listing, the celsius
portion is showing half the range of farenheit.

Celcius ranges are 5/9ths, approximately 1/2, the corresponding Farenheit
ranges.

Terry J. Reedy
 
A

Andrei

weasel wrote on Sun, 22 Feb 2004 19:07:01 GMT:
Why is the Farenheit to Celsius part not working properly? Instead of
showing a similar range of what the farenheit is listing, the celsius
portion is showing half the range of farenheit.

Try this in your interactive interpreter:

What's odd about the result? "/" does integer division. It's weird and
unexpected to lots of people, but it's the way it is - it will be fixed in
due time. However, due to some time machine Guido is said to possess, you
can already use the future behavior by doing this:

from __future__ import division

Then try 9/5 again. Integer division is "//" now, while "/" behaves as
floating-point division.

Alternatively, you could use a floating-point number instead of integers.
Try this in a clean interpreter session (without the from __future__
thing):

low_other_temp = (9 / 5 * low) + 32
high_other_temp = (9 / 5 * high) + 32
rnge = range(low, high + 1)
faren = range(low_other_temp, high_other_temp + 1)
print rnge
print faren

elif temp == 'F' and low <= high:

num1 = low - 32
num2 = high - 32
low_temp = num1 * 5/9
high_temp = num2 * 5/9
rnge = range(low, high + 1)
celsi = range(low_temp, high_temp + 1)
print rnge
print celsi
<snip>

--
Yours,

Andrei

=====
Real contact info (decode with rot13):
(e-mail address removed). Fcnz-serr! Cyrnfr qb abg hfr va choyvp cbfgf. V ernq
gur yvfg, fb gurer'f ab arrq gb PP.
 
W

weasel

It's not working. I don't think the conversion is the problem. After
converting, the program shows the original entry you put in

i.e. Please enter low temp:
32
Please enter high temp:
42
Please enter a conversion letter (C, F):
F

Then, the display shows
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42

However,

the conversion is only showing
0, 1, 2, 3, 4, 5.

What happened to the other half? I tried using 5.0/9.0, but got the
same results.

Any more ideas?
 
W

weasel

I just figured it out. It has to do with range. The conversion is
working, but the range functionality is screwing it all up. Back to
the drawing board!
 
A

Andrei

weasel wrote on Sun, 22 Feb 2004 19:45:30 GMT:
It's not working. I don't think the conversion is the problem. After
converting, the program shows the original entry you put in

You're right, I saw integer division where you were trying to convert
temperatures and automatically assumed that was the only problem, without
really reading the code.
What happened to the other half? I tried using 5.0/9.0, but got the
same results.

How did you get range() to work on floats without deprecation warnings?
Any more ideas?

Terry Reedy answered a short while ago to why a Celsius range is by
definition shorter than a Fahrenheit range. I'm not quite sure what the
point of the conversion is to be honest, more specifically why a range is
returned. You can't map a celsius temperature in the Celsius range to a
Fahrenheid temperature in the other range and the extreme values are
incorrect due to the integer division and/or the range() used with float
arguments. 42 F should be 5.556 C and your program returns 5.

Btw, there's also a Python list for beginners if you're interested
(python-tutor).

--
Yours,

Andrei

=====
Real contact info (decode with rot13):
(e-mail address removed). Fcnz-serr! Cyrnfr qb abg hfr va choyvp cbfgf. V ernq
gur yvfg, fb gurer'f ab arrq gb PP.
 
W

weasel

Well, I know that the range command is the problem, because it just
keeps adding 1 which throws off the decimal entries. So, in removing
range, I need to take the beginning temp, and add up to the ending
temp.

The conversion seems to be working fine, even by using "float" for the
input.
 
W

weasel

I just figured it out. It has to do with range. The conversion is
working, but the range functionality is screwing it all up. Back to
the drawing board!


Just finished it. Thank you for the suggestions, it helped me move in
the right direction.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top