在Python中相乘浮点数

0 投票
3 回答
1559 浏览
提问于 2025-04-30 02:49

在我的Python代码中,我寻找一种特定的格式,然后返回浮点数,也就是小数,比如

...
        return {'ID': int(dataINgood[0]),
                'mIdx': int(dataINgood[2])-1,
                'Px' : float(dataINgood[6]),
                'Py' : float(dataINgood[7]),
                'Pz' : float(dataINgood[8]),
                'E' : float(dataINgood[9]),
                'M' : float(dataINgood[10])}

我想做的事情是这样的

'Pt' : math.sqrt(float( dataINgood[6] * dataINgood[6]) + float(dataINgood[7]*dataINgood[7])) 

但是这样返回的是

'Pt' : math.sqrt(float( dataINgood[6] * dataINgood[6]) + float(dataINgood[7]*dataINgood[7])) }
TypeError: can't multiply sequence by non-int of type 'str'

有什么提示吗?

谢谢

暂无标签

3 个回答

0
math.sqrt(float( dataINgood[6] * dataINgood[6]) + float(dataINgood[7]*dataINgood[7]))
**math.sqrt((float(dataINgood[6]) * float(dataINgood[6])) + (float(dataINgood[7])* float(dataINgood[7])))**

在进行乘法运算之前,你需要把dataINgood[x]转换成浮点数(float),所以你可以试试下面的写法。

1

把所有东西都转换好,然后再进行操作:

fs = [float(x) for x in dataINgood]
{... 'Pt' : math.sqrt(fs[6]**2 + fs[7]**2) }

顺便说一下,这样做更好:

{... 'Pt' : math.hypot(fs[6], fs[7]) }

所以你的代码看起来是这样的:

fs = [float(x) for x in dataINgood]
return {'ID': int(fs[0]),
        'mIdx': int(fs[2])-1,
        'Px' : fs[6],
        'Py' : fs[7],
        'Pz' : fs[8],
        'E' : fs[9],
        'M' : fs[10],
        'Pt' : math.hypot(fs[6], fs[7])
        }
1

因为 dataINgood 是一个包含字符串的 list(列表)。你需要把这些值转换成 float(浮点数):

'Pt' : math.sqrt(float( dataINgood[6] ) * float( dataINgood[6]) + 
       float(dataINgood[7]) * float(dataINgood[7])) 

撰写回答