Python-Arduino USB communication floats problem

What is causing this??

Your misunderstanding about how floats are stored on each end of the pipe.

You also do not understand what the volatile keyword is for, or you wouldn't be splattering it all over the place.

You should have ONE struct for sending AND receiving. You create an instance of the struct, and populate it, to send data.

You receive data into another instance of the same struct, and extract the data of interest from that instance.

const int total_bytes=16; //total bytes to send

That is the WRONG way to declare the size of the struct.