How to differentiate between __str__ and __repr__?

I am seeking the help of the community to understand the difference between the __str__ and __repr__ methods in Python, and how they are used to represent objects. Specifically, I am looking for a detailed explanation of the differences between these methods, and how they can be implemented in code to achieve different results. I would appreciate any examples or resources that can help me gain a better understanding of these methods.