Thonny, VSCode or Emacs for Python
I teach programming, and every year, students that already have some experience nag me about using VSCode as soon as we start writing code. According to the Stackoverflow Survey, around 75% of professional developers use VSCode, so being familiar with it may be useful for those of my students that are interested in becoming developers. (I also teach first year students that will go for media production on their second year and second year students that will get an apprenticeship within IT administration or spend their third year with general studies before higher education, so only a rather small percentage of my students will go into an apprenticeship for two years and the the new craft certificate as developers.)
My plan this year is to introduce VSCode to my first year students when we start working with HTML and CSS in the spring since I find it a good tool for webdev (even though I personally use Emacs). For now, my first year students are working on Python. I don't think VSCode is a good tool for Python, especially not for learners. My second year students all use VSCode for JavaScript, HTML, CSS, React and React Native which it is rather good at.
Instead of VSCode for the first year students, I have opted to use Thonny which includes great learner tools like a stepwise debugger that shows in detail how loops and recursion works (the one in VSCode isn't as detailed and as good for learners in my opinion), a variable table which shows which values are associated with variable names, a heap table which together with the debugger shows in even more detail how python actually evaluates expressions and stores them in memory associated with variable names etc, a coding assistant to help the students when they are stuck if they don't want to ask me and the python shell with great integrations where the code in the code window is imported and run in the shell when the Run-command is executed. There are other features as well that we haven't used as much.
I have let the students use VSCode if they are already used to it (to avoid wasting time on discussing tools instead of code), but whenever I make a task where the students are supposed to interact with the python shell, I get half-answers from the VSCode users since the python shell isn't as easily available in VSCode. Even if you can get the shell in VSCode by writing python in the terminal on the bottom right, you don't get the integrations you get in Thonny (and Emacs) which makes interacting with functions, classes, methods and variables defined in your code window more cumbersome. You can import your python file manually, but it is an extra step compared to Thonny. This lack of integration with the shell leads to print-debugging, print-statements when the task tells them to interact with the code (which sometimes ruins the whole point of a task like when defining the repr-method in a class definition) and complaints whenever there is a task involving the shell from the VSCode-users.
Personally, I find using a REPL extremely convenient. It is one of the pleasures of using an interpreted programming language. I got used to having one back in the late 80s when I taught myself HyperTalk with the HyperCard Help stack (in English which I barely knew at the time) and the HyperCard MessageBox (a REPL). When working with Python, I use the shell whenever I am uncertain of something, like if I can't remember if there is a method I can use for my purposes or if I am mixing up JavaScript and Python built-in functions etc. It is much faster than using an LLM for those kinds of questions and there are no hallucinations and no extremely wasteful energy footprint that leads to reopening of accident-prone nuclear power plants. (Microsoft is reopening Three-Mile Island to power LLMs.)
I also use the python shell to try out if solutions I come up with will work before writing them into the code if in doubt. The great thing with a REPL is that you can work out a solution from the ground up and get instant feedback if you do a mistake. When the code is ready, you can copy it into a function defintion or a method in a class definition in the code window. I also use the shell to interact with the code once written to check if functions or methods or classes if something seems wonky, tests don't pass and I need to find out where I have made a mistake.
Python mode in Emacs gives me the same kind of great integrations with the shell as Thonny does, but within a more text- and keyboard-centric, programmable editor. Just like when using Thonny, there is never a need for print-debugging since I can interact with my code from the shell. I also get the same kind of language support I would have had in VSCode through an LSP server with eglot, company and eldoc. I first used Microsoft's pyright which is also used by the Python extension for VSCode, but I switched to the community-based python-lsp-server a while ago.