Why there is no do while loop in python

Question:

Why doesn’t Python have a ‘do while’ loop like many other programming language, such as C?

Example : In the C we have do while loop as below :

do {
   statement(s);
} while( condition );
Asked By: Bahubali Patil

||

Answers:

There is no do...while loop because there is no nice way to define one that fits in the statement: indented block pattern used by every other Python compound statement. As such proposals to add such syntax have never reached agreement.

Nor is there really any need to have such a construct, not when you can just do:

while True:
    # statement(s)
    if not condition:
        break

and have the exact same effect as a C do { .. } while condition loop.

See PEP 315 — Enhanced While Loop:

Rejected […] because no syntax emerged that could
compete with the following form:

    while True:
        <setup code>
        if not <condition>:
            break
        <loop body>

A syntax alternative to the one proposed in the PEP was found for
a basic do-while loop but it gained little support because the
condition was at the top:

    do ... while <cond>:
        <loop body>

or, as Guido van Rossum put it:

Please reject the PEP. More variations along these lines won’t make the
language more elegant or easier to learn. They’d just save a few hasty
folks some typing while making others who have to read/maintain their code
wonder what it means.

Answered By: Martijn Pieters

Because everyone is looking at it wrong. You don’t want DO … WHILE you want DO … UNTIL.

If the intitial condition is true, a WHILE loop is probably what you want. The alternative is not a REPEAT … WHILE loop, it’s a REPEAT … UNTIL loop. The initial condition starts out false, and then the loop repeats until it’s true.

The obvious syntax would be

repeat until (false condition):
  code
  code

But for some reason this flies over everyone’s heads.

Answered By: Caleb Fuller
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.