[英]why does this code break out of loop?
import math
t=raw_input()
k=[]
a=0
for i in range(0,int(t)):
s=raw_input()
b=1
c=1
a=int(s)
if a==0:
continue
else:
d=math.atan(float(1)/b) + math.atan(float(1)/c)
v=math.atan(float(1)/a)
print v
print d
print float(v)
print float(d)
while():
if float(v)== float(d):
break
b=b+1
c=c+1
d=math.atan(float(1)/float(b)) + math.atan(float(1)/float(c))
print d
k.append(int(b)+int(c))
for i in range(0,int(t)):
print k[i]
因为很明显float(v) != float(d)
直到b
变成2并且c
变成3。
您的while
循环在一个空的元组上进行测试,该元组的值为False
。 因此, while
循环中的语句将永远不会执行:
如果希望while
循环运行直到遇到break
语句,请执行以下操作:
while True:
if (some_condition):
break
else:
# Do stuff...
如果进行比较非常危险,例如float(a)== float(b),因为float变量没有确切的表示形式。 由于舍入错误,您可能没有相同的值。
甚至2 * 0.5也可能不等于1。您可以使用以下方法:
if abs(float(a)-float(b)) < verySmallValue:
http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
浮点数学并不精确。 使用二进制浮点数不能精确地表示像0.2这样的简单值,并且浮点数的有限精度意味着操作顺序中的微小变化会改变结果。 不同的编译器和CPU体系结构以不同的精度存储临时结果,因此结果将根据环境的详细信息而有所不同。 如果您进行计算,然后将结果与某个预期值进行比较,则极不可能会获得预期的结果。 换句话说,如果您先进行计算然后进行以下比较:if(结果== ExpectedResult)
那么这种比较不可能是真的。 如果比较正确,则可能不稳定-输入值,编译器或CPU的微小变化可能会改变结果并使比较结果为假。
好吧,它还没有达到断点。 问题在于while()
根本不会循环。 要进行无限循环,请执行while (1):
因为while条件必须评估为true。这是一个有效的(清理后的)示例。
import math
t = raw_input()
k = []
a = 0.0
for i in range(0,int(t)):
s = float(raw_input())
b = 1.0
c = 1.0
a= float(s)
if a == 0:
continue
else:
d = math.atan(1.0/b) + math.atan(1.0/c)
v = math.atan(1.0/a)
print v
print d
while True:
if v == d:
print 'bar'
break
b += 1
c += 1
d = math.atan(1.0/b) + math.atan(1.0/c)
print d
k.append(int(b)+int(c))
for i in range(0,int(t)):
print k[i]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.