Python十进制range()逐步值

Upendra

我想检查所有满足if语句中给出条件的组合值

def drange(start, stop, step):
    r = start
    while r < stop:
        yield r
        r += step   

for a in drange(0.1, 0.9,0.1):
    for b in drange(0.1, 0.9,0.1):
        for c in drange(0.1, 0.9,0.1):
            if a+b+c == 1 and a>b>c:
                print a
                print b
                print c

它正在工作,但没有给出所有组合。

实际上,您在这里遇到的是浮点算法的问题。请参阅此问题,以获取有关正在发生的事情及其发生原因的更多信息

总结一下,只要看一下您的结果drange(0.1, 0.9, 0.1)

>>> list(drange(0.1, 0.9, 0.1))
[0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999]

如您所见,那里没有确切的结果。因此,当您对它们进行总结时,您将无法获得确切的1

相反,在将浮点数与四舍五入的数字进行比较时,应始终考虑某种精度损失。一种方法是采用差异,看差异是否低于某个阈值(在这种情况下,我选择了0.00001):

if abs((a + b + c) - 1) < 0.00001:
    print('The sum is likely 1')

因此,在您的情况下,您的代码可能如下所示:

for a in drange(0.1, 0.9, 0.1):
    for b in drange(0.1, 0.9, 0.1):
        for c in drange(0.1, 0.9, 0.1):
            if abs((a + b + c) - 1) < 0.00001 and a > b > c:
                print a
                print b
                print c

这样就可以安全地产生预期的输出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章