我在使用简单的Python脚本时遇到了麻烦。该脚本有一个温度输入列表,我想打印所有0到5以外的温度。
这很好,直到我输入浮点数。例如,如果列表具有1、4、6,-2,则仅按预期打印6和-2。如果我输入1、4、4.3、6,则会打印出4.3和6。
我了解到此问题与浮点数有关,并且出于某种原因,为什么不通过浮点数声明。我已经搜索过高低位,但没有运气,尽管我确信这很简单。
你知道为什么会这样吗?
# input for temperatures
temperatures = [1, 4, 4.3,6]
# empty output list
output_list = []
for temperature in temperatures:
if temperature not in range (0,6):
output_list = output_list + [temperature]
# print the output_list
print(output_list)
在此先感谢您的帮助。
答案 0 :(得分:5)
temperature not in range (0,6)
表示温度不是range(0,6)
中的值之一,它们是0、1、2、3、4和5。
您实际要检查的不是该值是否为0、1、2、3、4、5之一,而是是否为> = 0和<= 5。
if not 0 <= temperature <= 5:
...
顺便说一句,要更清楚地了解range
的作用,请尝试以下操作:
>>> print(list(range(0, 6)))
[0, 1, 2, 3, 4, 5]
答案 1 :(得分:5)
range()
函数默认仅输出步长为1的数字。
例如,range(4)
返回0, 1, 2, 3
。将其与返回range(2, 4)
的{{1}}和返回2, 3
的{{1}}进行比较。
对于您的问题,更好的解决方案是将range(2, 4, 0.5)
替换为2, 2.5, 3, 3.5
。
这是您固定的整个代码:
感谢@Bazingaa注意到此错误。 (也感谢您推荐if temperature not in range (0,6):
。)
if not 0 <= temperature <= 5:
在这里注意一个更简单的列表理解:
.append()
答案 2 :(得分:1)
我认为这不是浮点错误。它与range
是可迭代的有关。 4.3
包含在输出中,因为它不是可迭代的。如果温度为3
,则检查温度是否在该范围内的语句将返回range(0, 6, 2)
。
更好的解决方案如下
# input for temperatures
temperatures = [1, 4, 4.3,6]
# empty output list
output_list = []
temp_range = list(range(0, 6))
for temperature in temperatures:
if min(temp_range) >= temperature or max(temp_range) <= temperature:
output_list = output_list + [temperature]
# print the output_list
print(output_list)