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

Python编写一元二次方程求解代码时报TypeError: bad operand type for unary -: 'str'如何解决

报错原因

input() 函数的返回值默认是字符串类型,你的代码没有对输入的a、b、c做类型转换就直接进行数学运算,执行到-b这一步时,解释器无法对字符串类型的变量执行一元负号操作,直接触发了该类型错误。
同时你的代码还存在两处额外的逻辑问题:

  • 类型转换顺序错误:你试图在完成所有数学运算后再转int,此时字符串已经参与运算,转换逻辑完全不生效
  • 没有处理判别式小于0的场景:当b²-4ac<0时,根号运算会得到复数结果,未做兼容会触发异常
修复方案

首先拿到输入后立刻转换为数值类型,优先用float类型兼容整数、小数两种输入场景;其次提前对判别式做判断,覆盖实数解、复数解两种情况;删除无效的int转换逻辑避免精度丢失。
修正后代码如下:

def quad_gleichung():
    # 输入后立刻转float
    a = float(input('a:'))
    b = float(input('b:'))
    c = float(input('c:'))
    # 计算判别式
    delta = b ** 2 - 4 * a * c
    # 分情况处理解
    if delta >= 0:
        sqrt_delta = delta ** 0.5
        x1 = (-b + sqrt_delta) / (2 * a)
        x2 = (-b - sqrt_delta) / (2 * a)
        print('解1:', x1)
        print('解2:', x2)
    else:
        # 处理复数解
        sqrt_delta = (-delta) ** 0.5
        real_part = -b / (2 * a)
        imag_part = sqrt_delta / (2 * a)
        print(f'解1: {real_part} + {imag_part}i')
        print(f'解2: {real_part} - {imag_part}i')

quad_gleichung()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:24:03