You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中二次公式与多线程实现的错误排查及修复方案

二次公式多线程代码错误修复

1. TypeError: 'int'/'float'对象不可调用

  • 原因:创建Thread对象时,target参数传的是函数调用结果(比如Quad_pt1()),不是函数本身。函数执行后返回int/float类型值,线程启动时会尝试调用这个值,直接触发类型错误。另外原代码里的exit()会直接终止程序,后面的计算代码根本跑不起来;而且函数内部的Pt1/Pt2/Pt3是局部变量,外部根本访问不到。
  • 修复:
    • 创建线程时,target只传函数名(不带括号),比如threading.Thread(target=Quad_pt1)
    • 用全局列表或者threading.Queue来存线程的计算结果,方便后续获取
    • 删掉多余的exit()语句

2. math domain error(判别式为负时)

  • 原因:math.sqrt()只能处理非负实数,当判别式b²-4ac为负数时,就会抛出定义域错误。
  • 修复:
    • 改用cmath.sqrt(),它支持复数运算,就算判别式为负,也能算出复数根
    • 也可以在计算前先判断判别式的正负,给用户提示后再决定是否计算复数根

3. 大整数输入无法转换为float

  • 原因:超大整数转float会丢失精度(float的有效位数有限),导致计算结果不准。
  • 修复:
    • 如果判别式是非负整数,用math.isqrt()(Python3.8及以上版本)计算平方根,保持整数运算的精度
    • 要是需要支持复数,直接用cmath模块,它能处理大整数的复数运算

修复后的完整代码

import math
import cmath
import threading

# 用全局列表存储各线程的计算结果
results = [None, None, None]

A = input("What is your a? ")
B = input("What is your B? ")
C = input("What is your C? ")

# 增加输入转换的异常处理,避免非整数输入报错
try:
    a = int(A)
    b = int(B)
    c = int(C)
except ValueError:
    print("请输入有效的整数!")
    exit()

def Quad_pt1():
    results[0] = -b

def Quad_pt2():
    discriminant = b**2 - 4*a*c
    # 根据判别式类型选择对应的平方根计算方式
    if discriminant >= 0:
        # 整数判别式用isqrt保证精度,非整数用math.sqrt
        results[1] = math.isqrt(discriminant) if isinstance(discriminant, int) else math.sqrt(discriminant)
    else:
        # 负判别式用cmath计算复数平方根
        results[1] = cmath.sqrt(discriminant)

def Quad_pt3():
    results[2] = 2*a

# 创建线程时传入函数名,而非函数调用
t1 = threading.Thread(target=Quad_pt1)
t2 = threading.Thread(target=Quad_pt2)
t3 = threading.Thread(target=Quad_pt3)

t1.start()
t2.start()
t3.start()

t1.join()
t2.join()
t3.join()

# 提取结果并计算二次方程的根
pt1, pt2, pt3 = results
if pt3 == 0:
    print("a不能为0,这不是二次方程!")
else:
    root1 = (pt1 + pt2) / pt3
    root2 = (pt1 - pt2) / pt3
    print(f"第一个根: {root1}")
    print(f"第二个根: {root2}")

内容的提问来源于stack exchange,提问作者Sterling Russell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:05:36