757 Stimmen

Warum verwendet Python "else" nach for- und while-Schleifen?

Ich verstehe, wie dieses Konstrukt funktioniert:

for i in range(10):
    print(i)

    if i == 9:
        print("Too big - I'm giving up!")
        break
else:
    print("Completed successfully")

Aber ich verstehe nicht, warum else wird hier als Schlüsselwort verwendet, da es nahelegt, dass der betreffende Code nur ausgeführt wird, wenn die for Block wird nicht abgeschlossen, was das Gegenteil von dem ist, was er tut! Egal, wie ich darüber denke, mein Gehirn kann nicht nahtlos von der for Anweisung an den else blockieren. Für mich, continue o continuewith wäre sinnvoller (und ich versuche, mich darauf einzustellen, es so zu lesen).

Ich frage mich, wie Python-Programmierer dieses Konstrukt in ihrem Kopf (oder laut, wenn Sie wollen) lesen. Vielleicht übersehe ich etwas, das solche Codeblöcke leichter entzifferbar machen würde?


Diese Frage bezieht sich auf die <em>zugrundeliegende Entwurfsentscheidung </em>d.h. <em>warum sie nützlich ist </em>um diesen Code schreiben zu können. Siehe auch <a href="https://stackoverflow.com/questions/3295938">Else-Klausel in der Python-Anweisung while </a>für die spezifische Frage nach <em>was die Syntax bedeutet </em>.

2voto

Harley Punkte 1013

Der else-Zweig einer Schleife wird einmal ausgeführt, unabhängig davon, ob die Schleife in ihren Körper eintritt oder nicht, es sei denn, der Schleifenkörper wird betreten, aber nicht beendet. Das heißt, dass innerhalb der Schleife eine Break- oder Return-Anweisung auftritt.

my_list = []
for i in my_list:
    print(i, end=',')
else:
    print('loop did not enter')

##################################    

for i in range(1,6,1):
    print(i, end=',')
else:
    print('loop completed successfully:', i)

##################################    

for i in range(1,6,1):
    if i == 3:
        print('loop did not finish:', i)
        break
    print(i, end=',')
else:
    print('else:', i)

Ausgabe:

loop did not enter
1,2,3,4,5,loop completed successfully: 5
1,2,loop did not finish: 3

Das Gleiche gilt für while-else.

import random
random.seed(8)

i = 100
while i < 90:
    print(i, end=',')
    i = random.randint(0,100)
else:
    print('loop did not enter:', i)

##################################    

i = 25
while i < 90:
    print(i, end=',')
    i = random.randint(0,100)
else:
    print('loop completed successfully:', i)

##################################    

i = 25
while i < 90:
    if i % 10 == 0:
        print('loop did not finish:', i)
        break
    print(i, end=',')
    i = random.randint(0,100)
else:
    print('else:', i)

Ausgabe:

loop did not enter: 100
25,29,47,48,16,24,loop completed successfully: 90
25,5,loop did not finish: 10

1voto

Dilux Punkte 136
for i in range(10):
    print(i)

    if i == 9:
        print("Too big - I'm giving up!")
        break;
else:
    print("Completed successfully")

Das Schlüsselwort break wird verwendet, um die Schleife zu beenden. Wenn i = 9 ist, wird die Schleife beendet. while any si Bedingungen nicht sehr zufriedenstellend, dann ist die else wird den Rest erledigen.

0voto

jamylak Punkte 119693

Man könnte es sich so vorstellen, else wie der Rest der Sachen oder die anderen Sachen, die nicht in der Schleife gemacht wurden.

-2voto

Jie Zhang Punkte 39

Ich betrachte die Struktur als for (if) A else B, und for(if)-else ist ein spezielles if-else , etwa . Es kann helfen zu verstehen sonst .

A und B wird höchstens einmal ausgeführt, was der if-else-Struktur entspricht.

for(if) kann als ein spezielles if betrachtet werden, das eine Schleife durchläuft, um zu versuchen, die if-Bedingung zu erfüllen. Sobald die si Bedingung erfüllt ist, A und Pause ; Sonst , B.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X