my answer is definitely PyCharm. Especially for medium and large Projects. It has very good integrated tools like version control, code completion and many many more.
For small projects (with one or two scripts) Spyder is an alternative. It has nice features for visualization of scientific data at runtime and interactive scripting.
For sharing or presenting small pieces of code the jupyter notebook or jupyterlab are nice formats. Some books are written in jupyter notebooks. It serves a nice combination of markdown language and python code.