如果语句打印在范围浮点中,则不在范围内

时间:2019-01-03 17:36:44

标签: python python-3.x

我在使用简单的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)

在此先感谢您的帮助。

3 个答案:

答案 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)