Python二次方程函数报错:TypeError: 无法隐式转换complex对象为str
解决Python复数与字符串拼接的TypeError问题
嘿,我一眼就看出问题所在啦!你遇到的TypeError: Can't convert 'complex' object to str implicitly,是因为你直接把复数类型的计算结果和字符串做拼接了——Python不会自动把复杂数据类型(比如这里的复数)转换成字符串,得咱们手动来处理。
错误原因拆解
你的res1和res2是通过cmath计算出来的复数对象,当你执行"Solution 1: " + res1的时候,Python不知道怎么把复数转成字符串去拼接,所以抛出了这个错误。
两种修正方案
方案1:用str()手动转换复数为字符串
直接把res1和res2用str()包裹,转换成字符串后再拼接:
import cmath def quad(a,b,c): r = (b ** 2 - 4 * a * c) res1 = ((-b) + cmath.sqrt(r))/2 res2 = ((-b) - cmath.sqrt(r))/2 # 这里用str()转换复数 print("Solution 1: " + str(res1) + " Solution 2: " + str(res2)) nums = input() param = nums.split() p1 = float(param[0]) p2 = float(param[1]) p3 = float(param[2]) quad(p1,p2,p3)
方案2:用f-string(推荐!更简洁易读)
Python 3.6及以上支持的f-string可以自动帮你处理类型转换,写法更清爽:
import cmath def quad(a,b,c): r = (b ** 2 - 4 * a * c) res1 = ((-b) + cmath.sqrt(r))/2 res2 = ((-b) - cmath.sqrt(r))/2 # 用f-string直接嵌入变量 print(f"Solution 1: {res1} Solution 2: {res2}") nums = input() param = nums.split() p1 = float(param[0]) p2 = float(param[1]) p3 = float(param[2]) quad(p1,p2,p3)
额外小提示
如果想让输出的复数格式更美观,还可以用格式化选项,比如保留两位小数:
print(f"Solution 1: {res1:.2f} Solution 2: {res2:.2f}")
内容的提问来源于stack exchange,提问作者BathrobeOverlord69
相关产品推荐
相关产品推荐

