Just_Newbie
Just_Newbie

Reputation: 447

Multiplying floats in python

in my python code I search for a specific format which then returns floats ie

...
        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])}

What I want is to do something line

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

but this returns

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

Any hint ?

thanks

Upvotes: 0

Views: 1641

Answers (3)

Sujal Sheth
Sujal Sheth

Reputation: 392

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

you need to convert dataINgood[x] to float before multiplication so you should try below syntax

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

Upvotes: 0

Elazar
Elazar

Reputation: 21585

Cast everything, then work:

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

BTW, this is better:

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

So your code looks like this:

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])
        }

Upvotes: 1

vz0
vz0

Reputation: 32923

Because dataINgood is a list of strings. You need to convert the values to float:

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

Upvotes: 1

Related Questions