我想检查所有满足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] 删除。
我来说两句