Python decimal range()逐步值

Python decimal range()逐步值,python,Python,我想检查满足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+

我想检查满足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
def排放(启动、停止、步骤):
r=开始
当rb>c:
打印
打印b
打印c

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

这里遇到的问题本质上是浮点运算背后的问题。看看发生了什么,为什么会发生

总而言之,只需看看您的
drange(0.1,0.9,0.1)
的结果:

正如你所看到的,你没有得到确切的结果。所以当你把它们加起来的时候,你不会得到一个精确的
1

相反,当比较浮点数和四舍五入的数字时,应该始终考虑某种精度损失。一种方法是计算差值,看看它是否低于某个阈值(在本例中,我选择了
0.00001
):

如果abs((a+b+c)-1)<0.00001:
打印('总和可能为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
对于一个in-drange(0.1,0.9,0.1):
对于drange中的b(0.1,0.9,0.1):
对于drange中的c(0.1,0.9,0.1):
如果abs((a+b+c)-1)<0.00001且a>b>c:
打印
打印b
打印c

这将安全地产生预期的输出。

应该有四种组合,但它只给出三种组合。它遗漏了a=0.7b=0.2c=0.1Or,换句话说,为什么
print 0.7+0.2+0.1==1
返回
False
?:)您可以将
drange(0.1,0.9,0.1)
更改为
drange(1,9,1)
并比较
a+b+c=10
,作为解决方法。打印信息时,请务必
打印a/10.0
非常感谢您的回答。它工作正常,我理解了原因。@Upendra很高兴它能为你工作。请记住,如果解决了您的问题,请将此问题标记为已解决。
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