Op 27/10/2021 om 17:05 schreef Christman, Roger Graydon:
I'm going to provide two loop-and-a-half segments to illustrate my interpretation of this PEP and the purpose of the walrus operator: [ first example ] Now contrast with this example: Without the walrus: replay = True while replay: play_game() replay = input("Play again? ") in ['y','Y','yes','Yes'] (I think it silly to ask about playing again at first). With the walrus: replay = None while replay==None or (replay := input("Play again? ") in ['y','Y','yes','Yes']: play_game() To use the walrus operator here, I have to fabricate a value that would allow me to bypass the input operation, that cannot be otherwise produced. I do not find this second version any clearer or more intuitive than the first (and the PEP did emphasize the value of clarity).
But the above is not a one and a half loop. The above is essentially a do loop (repeat loop in pascal), where you have the test at the end of the loop body. But because python doesn't have that loop you have to use a boolean to control the loop that is initialized to True and then later assign that boolean the result of the test which you use to control this loop. Should I think it worth the trouble to rewrite your example, quod non, it would be like below, with that unneeded list. while [ play_game(), input("Play again? ") in ['y', 'Y', 'yes', 'Yes']][-1]: pass -- Antoon Pardon. -- https://mail.python.org/mailman/listinfo/python-list