2016-03-24 76 views
1

Ich programmiere 4-parametrische RAINFLOW-Methode. Die Idee ist also, Standardbelastungszyklen, die mit 4 Anforderungen definiert sind, aus einer Lasthistorie zu holen, die normalerweise aus einigen 1000, 10000 oder noch mehr Punkten (Kraft-Zeit) besteht. Es gibt 2 Standardzyklen, nach denen Sie in dieser Lasthistorie suchen, eine steigende und eine fallende example here. Beide sind auf dem Bild zu sehen. Du fängst immer am Anfang an und versuchst einen der Zyklen zu finden, wenn du nicht von den ersten Punkten kommst, bewegst du dich einen Punkt nach oben (j = j + 1) und fängst von vorne an. Sobald Sie einen Zyklus gefunden haben, löschen Sie den 2. und 3. Punkt (y1 und y2) und beginnen Sie wieder am Anfang.Python - Zurück zum Anfang Schleife mit While-Schleife

Ich habe den Algorithmus in einer Weise durchgeführt, bei der zuerst festgestellt wird, ob der zweite Punkt der Lasthistorie höher ist als der erste oder niedriger, so dass er weiß, für welchen Zyklus er zuerst schauen soll (von wo aus er startet). Von da an wird nur noch nach den Anforderungen gesucht, die auch im Bild aufgelistet sind.

Mein Problem: Ich möchte dies in einer Art und Weise programmieren, bei denen für den Fall, dass nicht der 2 Zyklen gefunden werden, würde das Programm ein +1 auf den j hinzuzufügen und wieder von oben beginnen und würde also bis ein Zyklus gefunden würde. Ich habe die While-Schleife benutzt und versucht, mit dem Wahr/Falsch zu arbeiten, aber es funktioniert nicht. Nichts passiert wirklich .... wenn jemand eine Idee hat.

y ist nur ein kurzes Beispiel für den Vektor zufälliger Punkte.

y = [0.00, 2.00, 4.00, 5.00, 5.50, 6.00, 5.00, 4.00, 3.20, 3.50, 4.00, 4.50, 4.70, 4.80, 5.00, 4.50, 4.30, 4.00, 3.00, 2.00, 1.00, 
1.50, 2.50, 4.00, 4.50, 2.50, 1.50, 0.50, 0.30, 2.50, 3.00, 1.50, 2.00, 2.50, 5.00, 5.50, 6.00, 6.20, 5.50, 3.00] 


a = [] 
for j in range(len(y)): 
while j<(len(y)-4): 
    if y[j+1] > y[j]: 
     while False: 
      if y[j+2] >= y[j] and y[j+3] >= y[j+1]: 
       True 
       a.append(y[j+1])     
       del y[j+1] 
       a.append(y[j+1])     
       del y[j+1] 
      else: 
       j = j+1 
       if y[j] >= y[j+2] and y[j+1]>= y[j+3]: 
        stavek = True 
        a.append(y[j+1])      
        del y[j+1] 
        a.append(y[j+1])      
        del y[j+1] 
       else: 
        j=j+1 
        False 

    elif y[j+1] < y[j]: 
     while False: 
      if y[j+2] <= y[j] and y[j+3] <= y[j+1]:      
       a.append(y[j+1]) 
       del y[j+1] 
       a.append(y[j+1]) 
       del y[j+1] 
      else: 
       j = j+1 
       if y[j] <= y[j+2] and y[j+1]<= y[j+3]: 
        stavek = True 
        a.append(y[j+1]) 
        del y[j+1] 
        a.append(y[j+1]) 
        del y[j+1] 
       else: 
        j=j+1 
        False 
+0

Wenn Sie Code schreiben, sollten Sie die Sprache markieren. Es hilft Menschen, Ihre Frage zu finden und beeinflusst auch die Syntax-Färbung. – crashmstr

+0

Es tut mir leid, ich bin neu in diesem Forum und noch nicht daran gewöhnt :) – mcluka

+0

Es gibt gute Informationen in der [Tour] (http://Stackoverflow.com/tour) und [How To Ask] (http : //stackoverflow.com/help/how-to-ask) – crashmstr

Antwort

0

while False wird nie ausgeführt werden, da die Bedingung nicht erfüllt ist. Vielleicht sollten Sie in ein do gehen ->while, so dass es mindestens einmal ausgeführt wird, und führen Sie eine neue Variable, die Sie auf True oder False setzen würden, um die Schleife fortzusetzen.

Verwandte Themen