问题描述
嘿,所以我想编写代码来查找小于或等于某个特定数字(x)的最近平方数。我尝试了以下方法:
m = 0
base = 0
while m <= x:
if m > x:
break
m = base**2
base += 1
print(m)
但是,尽管已将m插入x,但仍给出了数字x之后的最接近平方,因为已经将m> x分配给了m。我如何在m> x之前停止循环?
解决方法
if m > x
是多余的。仅当m <= x
为True时才输入循环体,如果为True,则m > x
永远不会为真,因此break
永远不会运行。
尽管要回答您的问题,但又不了解数学知识,我只介绍第二个变量prev_m
,然后使用它:
m = 0
prev_m = m
base = 0
while m <= x:
prev_m = m
m = base**2
base += 1
print(prev_m) # Then use prev_m instead
,
使用math
模块有一种更简单的方法:
import math
y = math.sqrt(x) #find the square root of x
if y.is_integer() == False: #check y is not a whole number
print(math.pow(int(y),2)) # find the square root of the nearest whole number to y
,
大多数答案是基于计算一个平方过多,然后再使用前一个平方。
但是是否有可能知道下一个正方形是否太大而不计算它?
m = 0
base = -1
while base*2 + m < x:
base += 1
m = base**2
print(m)
免责声明:这是一个有趣的答案,以考虑它为什么起作用。