为什么我的所有结果都是0?

时间:2015-11-05 15:53:16

标签: python

我正在进行华氏温度到摄氏温度的舍入整数批量转换(是的,对于codeabbey.com而言),我花了好几个小时才陷入了看似应该顺利运行的事情。具体来说,我的结果都是零。所以在for循环的某个地方,可能在jk的分配中,数学正在崩溃。我一次又一次地看着它。为什么我的结果会变为零?

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转换为摄氏度。

1 个答案:

答案 0 :(得分:2)

正如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:]]