2015-11-05 8 views
0

Я делаю округленное целое число конверсии по Фаренгейту по Цельсию (да, для codeabbey.com), и я потратил несколько часов на это, чтобы застрять в чем-то, что похоже, что он должен работать плавно. В частности, мои результаты равны нулю. Итак, где-то в цикле for, вероятно, в задании j и k, математика разрушается. Я смотрел на него снова и снова. Почему я получаю нули в своих результатах?Почему все мои результаты 0?

fahrenheit = raw_input().split() # Dump copy-and-pasted values into a list. 
iter = int(fahrenheit.pop(0)) # Remove the first value and use it as a counter. 

celsius = [] # Make an empty list for results. 
x = 0 # Index counter 

for i in fahrenheit: 
    j = (int(i)-32) * (5.0/9) 
    k = (int(i)-32) * (5/9) 
    if float(j) == k: 
     celsius.append(j) 
    elif j > 0: # For positive results 
     if (j - k) >= 0.5: # If integer value needs +1 to round up. 
      celsius.append(k+1) 
     else: 
      celsius.append(k) 
    elif j < 0: # For negative results 
     if (k - j) >= 0.5: 
      celsius.append(k+1) # If integer values needs +1 to bring it closer to 0. 
     else: 
      celsius.append(k) 
    else: 
     celsius.append(k) # If the result is 0. 

print ' '.join(celsius) 

Форматирование данных требует этой странной настройки. Первое число в данных не является температурой для тестирования. Все остальные. Таким образом, 5 80 -3 32 212 71 требует пяти вычислений: 80, -3, 32, 212 и 71 преобразован в Цельсий.

+6

целочисленное деление: '5/9 == 0 ' –

+1

... D'Oh! Я не могу поверить, что так долго смотрел на эту штуку и никогда не осознавал этого. Спасибо, что указали мне это! – thektulu7

+0

Вы можете получить правильный результат, удалив круглые скобки вокруг '5/9'. Без них умножение на 5 произойдет до деления. – Blckknght

ответ

1

Как отметил Peter Wood в своем комментарии, 5/9 оценивает как 0 из-за целочисленного деления. Однако остальную часть вашей программы можно было бы упростить, используя Python, встроенный в функцию round.

>>> [round(x) for x in [26.0, 26.4, 26.5, 26.9]] 
[26.0, 26.0, 27.0, 27.0] 

Вы можете переписать так:

celsius = [int(round((f-32)*5.0/9.0)) for f in fahrenheit[1:]] 
+0

Путь прохладно. Благодарю. Я не могу дождаться, пока не узнаю, что я могу сконденсировать свой код на такие эффективные линии. Должно быть, прочь, понемногу! – thektulu7

Смежные вопросы