【发布时间】:2021-01-26 13:14:34
【问题描述】:
这是我的代码,但是它只返回下一个数字(例如,取 121 它返回 122 而不是 144),但我不明白为什么。
import math
def find_next_square(sq):
# Return the next square if sq is a square, -1 otherwise
if math.sqrt(sq).is_integer:
sqnext = sq + 1
if math.sqrt(sqnext).is_integer:
return sqnext
else:
return -1
【问题讨论】:
-
.is_integer是一种方法,但您没有调用它。math.sqrt(sq).is_integer()测试从 sqrt 返回的值是否为整数,而math.sqrt(sq).is_integer是一个内置方法对象,在 if 语句中始终被认为是 True。 -
(你的逻辑也错了)
-
4 是 2 的平方。为什么你会认为下一个平方不是 5 或者什么都没有? (如果
sq是一个正方形,可以写成x * x。下一个大于sq的正方形是(x + 1) * (x + 1),不是sq+1,不需要测试)。 -
请注意,
math.sqrt(sq).is_integer()是一种测试数字是否为正方形的有缺陷的方法。它对于负数(引发异常)和四舍五入(或作为双精度数的不可表达性)导致麻烦的大数失败。