每个人的Python:数学、算法和游戏编程训练营
上QQ阅读APP看书,第一时间看更新

4.3.1 编程实现——平方根函数

我们知道,计算一个数的平方很简单,例如计算数n的平方,使用乘法n*n即可实现。但是开平方就不那么容易了,幸好在Python中,我们有直接可以使用的开平方函数,例如下面的示例代码:

        import math
        math.sqrt(9)

如以上代码所示,在math工具包中提供了sqrt函数可以直接计算某个数的平方根。现在,假设让我们自己实现一个函数,其功能类似于sqrt函数,用来对某个数字进行开平方计算,你能做到吗?注意,为了简化题目,我们要求计算结果为正整数值,即如果某个数的平方根不为整数,则只保留其整数部分即可。

要计算平方根,我们需要明确一个数的平方是如何计算得到的。一个数与其自身相乘可以得到其平方值,那么对一个数开平方,最简单的方法是使用二分法找到符合条件的数。对于本题,有一点需要注意,因为题目中要求只保留整数部分,因此在使用二分法查找符合条件的数时,要采用向下取整的原则。

示例代码如下:

如以上代码所示,我们使用两个变量l和r分别记录二分边界的左边界和右边界。如果在查找过程中刚好找到了符合条件的数,则可以直接返回。当左边界不再小于右边界时,说明已经查找完毕,我们没有找到完全符合条件的整数,这时候就要采用向下取整的原则,将左边界返回即可。这里需要注意,当二分过程结束之后,左边界不一定会大于右边界,可以确定的是两者的差的绝对值不会大于1,因此我们可以先尝试左边界的平方是否小于原输入的数,如果小于,则左边界就是答案,如果不小于,则我们需要将左边界减一后返回。