如果声明条件不满足,但程序仍然有效

时间:2015-08-23 00:45:19

标签: python if-statement

我有一个简单的代码

def func(a,b):
    if (b>=3.0) and (b<=4.0):
        if (a>=3.0) and (a<=6.0):
            var_region='A'
        if (a>6.0) and (a<=11.0):
            var_region='B'
    if (b>4.0):
        var_region='C'

    region=var_region
    print region
    return region


Tmax=4.1
Tmin=3.0
T=Tmin
var=3.0
dT=0.1
while T<Tmax:
    calll=func(var,T)
    T=T+dT

该计划的输出是:

A,A..........,C

在while循环中,&#34; T&#34;的最终值是4.0,它打印&#34; C&#34;而不是&#34; A&#34;。那是为什么?

3 个答案:

答案 0 :(得分:5)

这是因为浮点数不能用float精确表示,所以它的计算也不精确。 b不是4.0,而是一个非常接近它的浮点数。添加这可能有助于您理解:

if (b>4.0):
    print(repr(b))
    var_region='C'

输出:

4.000000000000001
C

答案 1 :(得分:1)

原因浮动类型在计算机中不准确。

while T<Tmax:
    print T
    calll=func(var,T)
    T=T+dT

在函数调用while循环之前添加一个print语句,你会发现T的最终值是4.000000000000001if (b>4.0):将获得True值,并导致最后一个输出为{ {1}}

我建议您使用十进制来实现您想要的,该类型在计算机中是精确的

C

答案 2 :(得分:-1)

这是因为.1不能完全表示为浮点数,因此计算不能准确给出您期望的结果。如果在函数内打印b,则在最后一次调用时会发现该值为4.000000000000001。顺便说一句,在python中,你不必编写像

这样的尴尬的东西
if (b>=3.0) and (b<=4.0):

你可以写

if 3.0 <= b <= 4.0:
相关问题