2016-04-04 4 views
1

Wie mache ich eine Schleife, die außerhalb der Funktion ist, indem Sie die Funktionen dazu verwenden? Hier ist mein Code:Wie man eine Schleife mit einer Funktion unterbricht

for x in range(5): 
def display_grid(): 
    if px == 1: 
     print 
     print "Invalid input, please Use the format \'x,y\'" 
     print 
     return 
    elif nx == 1: 
     return 
    print '\n' *30 
    print p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9 + p10 + p11 + p12 + p13 + p14 
    return 
while i > 0: 
    display_grid() 
    break 

Die Rückkehr bricht nur die Funktion und die Schleife eine bedingte wobei über nur 5 Mal den Druck der Anweisungen halten, ich will es so, dass es es den Druck halten, bis die Bedingungen sind nicht angetroffen. Vielen Dank!

+3

Sie müssen machen 'auf einen Wert von Funktion return' (' my_value = display_grid() ') und hängen von diesem Wert (zB wenn der Wert ist' true' oder ' Falsch "Entweder aus der Schleife" oder "bleiben" –

+0

Tatsächlich kann es sehr verwirrend sein, einer Funktion zu erlauben, implizit aus einer Schleife auszubrechen. Was würde beispielsweise passieren, wenn die Funktion außerhalb einer Schleife aufgerufen wird? –

+0

Eigentlich dort sind schwerwiegende Einrückungsprobleme mit Ihrem Code.Was beinhaltet das forx∈ran≥ (5) forx∈ran≥ (5) für x in der Schleife des Bereichs (5)? ​​Ist die Funktionsdefinition gemeint, darin zu sein? Wie ist mit dem whi≤ whi≤while loop? Was sind 'px' und' nx'? – kdopen

Antwort

3

Die offensichtlichen Probleme im ursprünglichen Code vermeiden (es könnte gut bearbeitet worden sein, wenn Sie dies lesen), der übliche Ansatz für diese Art von Problem besteht darin, dass die Funktion einen Wert zurückgibt, der zur Konditionierung des äußeren verwendet wird Schleife, also:

def foo(): 
    ... 
    return need_to_be_called_again() 

while foo(): 
    ... # Do something 

Hier need_to_be_called_again() ist einfach Pseudo-Code zu bestimmen, ob oder nicht foo() muss erneut aufgerufen werden. Alternativ könnten Sie eigentlich foo() einen Generator

def foo(): 
    while need_to_be_called_again(): 
     ... 
     yield True 

for _ in foo(): 
    ... # Do something 
Verwandte Themen