2017-06-26 1 views
-2
i, j, k, u = 0, 5, 1, 3 
for l in range(i, j, k): 
    if l == u: 
     print(l) 
     u = 8 
     i = 12 
     j = 7 
     k = -1 
    else: 
     print(l) 

OUTPUT:Ausgabe der for-Schleife Code-Schnipsel in Python

0 
1 
2 
3 
4 

Warum wir diese Ausgabe erhalten?

+5

Welche Ausgabe haben Sie erwartet? – Carcigenicate

+1

@Carcigenicate ist richtig. Wir können Ihnen nichts erklären, bis wir verstehen, was Sie erwartet haben. –

Antwort

1

Wenn Python zuerst die Schleife for findet, erstellt es das range Objekt, das Sie angefordert haben: range(0, 5, 1). Einmal aufgebaut, steuert es die Schleife und wird nicht neu ausgewertet werden. Durch Ändern der Variablenwerte während der Ausführung der Schleife wird die Schleifenoperation nicht geändert.

Das bedeutet, dass, soweit die Schleife (oder eine ausreichenden Optimierer) betroffen ist, Ihr Code wie folgt aussieht:

i,j,k,u=0,5,1,3 
for l in range(i,j,k) : 
    print(l) 

u=8 
i=12 
j=7 
k=-1 
0

nicht sicher, was Ausgabe, die Sie erwarten. Da Sie jedoch die Werte der Parameter ändern, die für die Generierung des Bereichs verwendet werden, gehe ich davon aus, dass die Ausgabe länger ist. Zu diesem Zeitpunkt wird die Liste jedoch bereits generiert und ist nicht betroffen.

Um die Möglichkeit zu erreichen, den Loop-Bereich während des Loopings zu erhöhen, schlage ich vor, dass Sie die Range-Funktion vermeiden und stattdessen while statt for verwenden.

https://docs.python.org/3/tutorial/controlflow.html

Edit: Prune war schneller und besser als ich.

+0

@Prune und NacMacFeegle Danke für deine Hilfe, du hast das Problem gelöst, das ich hatte und :) –