The "loop and a half"
bartc
bc at freeuk.com
Wed Oct 4 07:29:41 EDT 2017
On 04/10/2017 11:42, Stefan Ram wrote:
> Robin Becker <robin at reportlab.com> writes:
>> Given the prevalence of the loop and a half idea in python I wonder why we don't
>> have a "do" or "loop" statement to start loops without a test.
>
> VBA has quite an orthogonal way to build loop control:
>
> pre-checked positive:
>
> Do While ...
> ...
> Loop
>
> post-checked positive:
>
> Do
> ...
> Loop While ...
>
> pre-checked negative:
>
> Do Until ...
> ...
> Loop
>
> post-checked negative
>
> Do
> ...
> Loop Until ...
>
> "endless":
>
> Do
> ...
> Loop
None of them appear to be loop-and-a-halves.
(Note that your reverse-indentation style is confusing! Imagine that
Python was written like this:
for i in R:
print (i)
)
Anyway I think what is needed in Python for a proper loop-and-a-half is
this:
while:
s1
s2
do cond:
s3
s4
s1, s2, s3, s4 are executed in sequence while cond is true. When cond is
false, only s1, s2 are executed in that iteration, and the loop
terminates. (A few syntactical details to be worked out such as whether
while, do and else line up or not.)
This is equivalent I think to the current:
while 1:
s1
s2
if cond:
s3
s4
else:
break
But this would be a less satisfactory, ad-hoc approach. For example,
there can be several such if-blocks within the same loop. They could be
nested. There might not be any, so can't at a glance distinguish an
endless loop from a loop-and-a-half.
My proposed while-do has a less chaotic structure. It wouldn't preclude
'break' from still being used, but there would be less need.
--
bartc
More information about the Python-list
mailing list