python is.integer() 出现故障
python is.integer() malfunctioning
我正在做一个测试,计算最小 n 使得对于 1/a + 1/b = 1/n,至少有 x 个不同的解决方案。 (a, b, n, x均为正整数)
我检查了 b = 1/(1/n - 1/a) 并用 is.integer()
测试了 b,结果让我很惊讶。
x = 2
n = 1
while(1):
x0 = 0
for a in range(n+1,2*n + 1):
print '-------------'
print 'a={}'.format(a)
b = 1.0 / (1.0/n - 1.0/a)
print 'b={}'.format(b)
print 'b is integer: ' + str(b.is_integer())
if b.is_integer():
print 'a={} b={} n={}'.format(a,b,n)
x0 += 1
if x0 * 2 - 1 >= x:
print n
exit(0)
n += 1
输出,为什么 b = 6.0 和 12.0 不是整数?
-------------
a=2
b=2.0
b is integer: True
a=2 b=2.0 n=1
-------------
a=3
b=6.0
b is integer: False
-------------
a=4
b=4.0
b is integer: True
a=4 b=4.0 n=2
-------------
a=4
b=12.0
b is integer: False
-------------
a=5
b=7.5
b is integer: False
-------------
a=6
b=6.0
b is integer: True
a=6 b=6.0 n=3
...
如果你尝试这样的事情
print 'b is integer: ' + str(b.is_integer()), repr(b)
您会看到,由于浮点数学中的近似值,这些值非常接近但不完全是整数
在 Python2 中,str 不是数字的忠实表示,它适用于 "user-friendly output"。所以非常接近 6 的数字输出为 6.0。如果您想看到正确的输出,请在 .format 中使用 repr 或 !r 说明符。
'b = {!r}'.format(b)
或者只使用 Python 3.:-)
我正在做一个测试,计算最小 n 使得对于 1/a + 1/b = 1/n,至少有 x 个不同的解决方案。 (a, b, n, x均为正整数)
我检查了 b = 1/(1/n - 1/a) 并用 is.integer()
测试了 b,结果让我很惊讶。
x = 2
n = 1
while(1):
x0 = 0
for a in range(n+1,2*n + 1):
print '-------------'
print 'a={}'.format(a)
b = 1.0 / (1.0/n - 1.0/a)
print 'b={}'.format(b)
print 'b is integer: ' + str(b.is_integer())
if b.is_integer():
print 'a={} b={} n={}'.format(a,b,n)
x0 += 1
if x0 * 2 - 1 >= x:
print n
exit(0)
n += 1
输出,为什么 b = 6.0 和 12.0 不是整数?
-------------
a=2
b=2.0
b is integer: True
a=2 b=2.0 n=1
-------------
a=3
b=6.0
b is integer: False
-------------
a=4
b=4.0
b is integer: True
a=4 b=4.0 n=2
-------------
a=4
b=12.0
b is integer: False
-------------
a=5
b=7.5
b is integer: False
-------------
a=6
b=6.0
b is integer: True
a=6 b=6.0 n=3
...
如果你尝试这样的事情
print 'b is integer: ' + str(b.is_integer()), repr(b)
您会看到,由于浮点数学中的近似值,这些值非常接近但不完全是整数
在 Python2 中,str 不是数字的忠实表示,它适用于 "user-friendly output"。所以非常接近 6 的数字输出为 6.0。如果您想看到正确的输出,请在 .format 中使用 repr 或 !r 说明符。
'b = {!r}'.format(b)
或者只使用 Python 3.:-)