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
相关产品推荐
相关产品推荐

