Python3 平方根

一、方法 1:math.sqrt() - 常用非负数值平方根(推荐)

math模块是 Python3 内置的标准数学库,其sqrt()函数是计算非负数值平方根的首选方案,具有执行效率高、结果精度高的特点,专门针对实数(浮点数 / 整数)的平方根计算做了优化。

核心特性

  1. 适用类型:非负整数(int)、非负浮点数(float
  2. 返回类型:浮点数(float
  3. 异常情况:传入负数时会抛出ValueError异常(不支持复数计算)
  4. 使用前提:需导入math模块

代码实例 

# 导入math模块
import math

# 1. 计算整数的平方根
int_num = 16
int_sqrt = math.sqrt(int_num)
print(f"整数 {int_num} 的平方根:{int_sqrt}")
print(f"结果类型:{type(int_sqrt)}")

# 2. 计算浮点数的平方根
float_num = 2.25
float_sqrt = math.sqrt(float_num)
print(f"浮点数 {float_num} 的平方根:{float_sqrt}")

# 3. 计算无理数平方根(保留高精度小数)
irrational_num = 10
irrational_sqrt = math.sqrt(irrational_num)
print(f"无理数 {irrational_num} 的平方根(高精度):{irrational_sqrt}")

# 注意:传入负数会报错,以下代码注释解除后会抛出ValueError
# negative_num = -9
# negative_sqrt = math.sqrt(negative_num)
 

运行结果

整数 16 的平方根:4.0
结果类型:<class 'float'>
浮点数 2.25 的平方根:1.5
无理数 10 的平方根(高精度):3.1622776601683795
 

二、方法 2:指数运算 ** 0.5 / ** (1/2) - 无依赖灵活计算

Python 的指数运算符**可直接实现平方根计算,无需导入任何模块,是最灵活的极简方案。其本质是通过幂运算推导(平方根即数值的 1/2 次幂),支持更广泛的数值类型。

核心特性

  1. 适用类型:非负整数、非负浮点数、负数(返回复数类型)
  2. 返回类型:非负数返回浮点数,负数返回复数(complex
  3. 优势:无需导入模块,代码简洁,支持复数平方根计算
  4. 注意:1/2在 Python3 中默认返回浮点数,与0.5效果一致;整数作底数时,结果仍为浮点数

代码实例 

# 1. 非负整数平方根(无模块导入)
num1 = 25
sqrt1 = num1 ** 0.5
print(f"整数 {num1} 的平方根(** 0.5):{sqrt1}")

# 2. 非负浮点数平方根
num2 = 4.9
sqrt2 = num2 ** (1/2)
print(f"浮点数 {num2} 的平方根(** (1/2)):{sqrt2}")

# 3. 负数平方根(自动返回复数)
num3 = -16
sqrt3 = num3 ** 0.5
print(f"负数 {num3} 的平方根:{sqrt3}")
print(f"负数平方根结果类型:{type(sqrt3)}")
 

运行结果

整数 25 的平方根(** 0.5):5.0
浮点数 4.9 的平方根(** (1/2)):2.2135943621178655
负数 -16 的平方根:(0+4j)
负数平方根结果类型:<class 'complex'>
 

三、方法 3:math.isqrt() - 整数专属整数平方根(Python3.8 + 新增)

math.isqrt()是 Python3.8 版本新增的专属函数,专门用于计算非负整数的整数平方根(向下取整,即舍去小数部分,返回最大的不大于真实平方根的整数),适用于只需整数结果的场景。

核心特性

  1. 适用类型:非负整数(int),传入浮点数或负数会报错
  2. 返回类型:整数(int
  3. 核心逻辑:向下取整,例如math.isqrt(10)返回3(真实平方根≈3.16,向下取整为 3)
  4. 优势:相比math.sqrt()再强制类型转换,效率更高,结果直接为整数,无需额外处理

代码实例 

import math

# 1. 完全平方数的整数平方根(结果为精确整数)
num1 = 36
isqrt1 = math.isqrt(num1)
print(f"整数 {num1} 的整数平方根:{isqrt1}")
print(f"结果类型:{type(isqrt1)}")

# 2. 非完全平方数的整数平方根(向下取整)
num2 = 10
isqrt2 = math.isqrt(num2)
print(f"整数 {num2} 的整数平方根(向下取整):{isqrt2}")

# 3. 大数整数平方根(仍高效返回整数结果)
num3 = 123456789
isqrt3 = math.isqrt(num3)
print(f"大数 {num3} 的整数平方根:{isqrt3}")

# 注意:传入浮点数/负数会报错,以下代码注释解除后会抛出异常
# num4 = 17.5
# isqrt4 = math.isqrt(num4)
# num5 = -25
# isqrt5 = math.isqrt(num5)
 

运行结果

 
整数 36 的整数平方根:6
结果类型:<class 'int'>
整数 10 的整数平方根(向下取整):3
大数 123456789 的整数平方根:11111
 

四、方法 4:cmath.sqrt() - 复数专属高精度平方根

cmath模块是 Python 的复数数学库,其sqrt()函数专门用于处理复数的平方根计算,也可处理实数(非负数返回浮点数形式复数,负数返回纯虚数),适用于高精度复数运算场景。

核心特性

  1. 适用类型:所有整数、浮点数(实数)、复数
  2. 返回类型:复数(complex,即使非负数结果也会以复数形式返回,如4.0+0j
  3. 优势:高精度复数运算,专门适配复数场景,无异常抛出
  4. 使用前提:需导入cmath模块

代码实例

# 导入cmath模块
import cmath

# 1. 非负实数的平方根(返回复数类型)
num1 = 81
sqrt1 = cmath.sqrt(num1)
print(f"非负整数 {num1} 的平方根(cmath):{sqrt1}")

# 2. 负数的平方根(返回纯虚数)
num2 = -25
sqrt2 = cmath.sqrt(num2)
print(f"负数 {num2} 的平方根(cmath):{sqrt2}")

# 3. 复数的平方根(直接处理复数底数)
num3 = 3 + 4j
sqrt3 = cmath.sqrt(num3)
print(f"复数 {num3} 的平方根:{sqrt3}")
 

运行结果

非负整数 81 的平方根(cmath):(9+0j)
负数 -25 的平方根(cmath):5j
复数 (3+4j) 的平方根:(2+1j)
 

五、核心方法对比表

为方便你快速选择最优方案,整理了 4 种方法的关键特性对比:
 
方法适用类型返回类型核心优势适用场景Python 版本要求
math.sqrt() 非负 int/float float 精度高、效率高 普通实数平方根计算(需高精度浮点数) 所有 Python3 版本
** 0.5/** (1/2) 所有 int/float(含负数) 非负:float;负数:complex 无模块依赖、代码简洁、支持复数 快速计算、无需导入模块、负数平方根 所有 Python3 版本
math.isqrt() 非负 int int 整数结果、向下取整、效率高 只需整数平方根的场景(如计数、判断) Python3.8+
cmath.sqrt() 所有 int/float/ 复数 complex 高精度复数运算、无异常 复数场景的平方根计算 所有 Python3 版本

六、常见问题与注意事项

  1. 避免负数传入math.sqrt():该函数不支持负数,传入后会抛出ValueError: math domain error,需提前做非负判断或改用** 0.5/cmath.sqrt()
  2. math.isqrt()的版本兼容:若你的 Python 版本低于 3.8,使用该函数会报错,可改用int(math.sqrt(x))(效果一致,但效率略低)。
  3. 精度差异:math.sqrt()比指数运算** 0.5的精度略高,对高精度要求的科学计算,优先选择math.sqrt()
  4. 复数识别:** 0.5处理负数时自动返回复数,若无需复数类型,需先过滤负数。

posted on 2025-12-30 11:17  小陶coding  阅读(1)  评论(0)    收藏  举报