python - 有没有办法找到下一个完美的正方形?
问题描述
这是我的代码,但是它只返回下一个数字(例如,取 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
解决方案
你的逻辑不正确。使用sqnext = sq + 1
,您正在计算下一个数字,而不是下一个平方。
尝试这个:
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 = math.sqrt(sq) + 1
return sqnext * sqnext
else:
return -1
print(find_next_square(121))
编辑
看起来is_integer
方法有缺陷,并且给出了亨利指出的错误值。下面的代码适用于达到一定限制的正整数。
import math
def find_next_square(sq):
# Return the next square if sq is a square, -1 otherwise
if int(math.sqrt(sq))**2 == sq:
sqnext = math.sqrt(sq)
return sqnext * sqnext
else:
return -1
print(find_next_square(5))
print(find_next_square(121))
此外,由于sqrt
不适用于负数,因此需要单独处理:
import math
def find_next_square(sq):
# Return the next square if sq is a square, -1 otherwise
sign = -1 if sq < 0 else 1
if int(math.sqrt(abs(sq)))**2 == abs(sq):
sqnext = math.sqrt(abs(sq)) + sign * 1
return sqnext * sqnext * sign
else:
return -1
print(find_next_square(5))
print(find_next_square(121))
print(find_next_square(-9))
此外,由于溢出问题,上述所有方法都不适用于超出限制的大量数据。
推荐阅读
- sql - MSSQL Transpose / Pivot data in to columns by type
- powerbi - 订购带有空白到基础的矩阵视觉对象
- jsf - @org.omnifaces.cdi.ViewScoped 在卸载已销毁的视图时调用 @PostConstruct
- arrays - 如何在 interface{} 中迭代数组?
- java - Java Joda 时间无法解析 DateTimeFormat::longTime
- c# - 如何将单选按钮和组合框选择添加到 C# 中的列表框中?
- android - 使用PagedListAdapter时如何恢复屏幕上的recyclerview位置旋转
- ios - 滚动视图中的 GestureRecognizer 不起作用
- detection - Aframe 陀螺仪检测
- java - 如何在spring boot中使用spring web services动态WSDL生成?