Python执行物理计算代码报float与set相乘不支持的TypeError求解
Python 代码运行
TypeError 报错排查与修复 报错原因定位
触发报错的核心问题出在ve的计算表达式编写上:代码错将数学公式里用于标识运算优先级的大括号,全部用Python语法的花括号{}书写。
Python 语法中,花括号{}的作用是定义字典或集合,并不具备数学公式里圈定运算范围的功能。原代码里两处使用{}的位置会直接触发类型解析错误:
- 包裹整个分子计算结果的外层花括号:会把这部分计算结果解析为单元素集合
4*k*后面紧跟的花括号包裹的表达式:会被直接解析为一个新的集合对象
当程序执行到乘法运算环节时,float类型的变量k需要和后一个操作数做乘法,但后一个操作数是set类型的集合对象,两类类型不支持乘法运算,就抛出了TypeError: unsupported operand type(s) for *: 'float' and 'set'的运行错误。
对应修复方案
把表达式里所有错用的花括号{},全部替换为可实现运算优先级隔离的圆括号(),修改后的核心计算行如下:
ve = (-k*(v1+v2) + math.sqrt(math.pow((k*(v1+v2)), 2) - 4*k*(k*v1*v2 + v1 - v2))) / (2*k)
替换完成后,代码的运算逻辑就和原本的物理公式推导逻辑完全匹配,可正常执行得到计算结果。
内容的提问来源于stack exchange,提问作者Woojin K
相关产品推荐
相关产品推荐

