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