The "loop and a half"

bartc bc at freeuk.com
Thu Oct 5 06:56:59 EDT 2017


On 05/10/2017 07:57, Gregory Ewing wrote:
> Steve D'Aprano wrote:
>> I recall that the Pascal compiler had to do some clever behind the scenes
>> jiggery-pokery to get eof() to work, but that's what compilers are 
>> supposed
>> to do: make common tasks easy for the programmer.
> 
> Sometimes the jiggery-pokery worked, sometimes it didn't.
> For example, the following wouldn't work as expected:
> 
>     while not eof(input) do begin
>        write(output, 'Enter something:');
>        readln(input, buffer);
>        process(buffer);
>     end
> 
> because the eof() would block waiting for you to enter
> something, so the prompt wouldn't get printed at the
> right time.
> 
> Basically, Pascal's eof-flag model was designed for
> batch processing, and didn't work very well for
> interactive use.

This doesn't make sense. For interactive use, you wouldn't bother 
testing for eof, as you'd be testing the eof status of the keyboard.

You might want a way of the user indicating end-of-data, but that's 
different; you don't want to abruptly send an EOF (via Ctrl-C, D, Z, 
Break or whatever). That would be a crass way of doing it. Besides you 
might want to continue interacting with the next part of the program.

So the loop would be like this (Python 3; don't know why it doesn't work 
in Python 2):

     while 1:
         buffer = input("Enter something (Type quit to finish): ")
         if buffer == "quit": break
         print ("You typed:", buffer)     # process(buffer)

     print ("Bye")

This is a loop-and-a-half.

-- 
bartc



More information about the Python-list mailing list