2017-01-30 3 views
1
import numpy as np 
def Vin(t): 
    inputs = [] 
    for i in range (1000): 
     if (-1)**(np.floor(2 * t[i])) == 1: 
      Vin = (1) 
      inputs.append(Vin) 
     else: 
      Vin = (-1) 
      inputs.append(Vin) 

     return inputs 

, wenn ich diese Funktion auf eine Reihe von t Werte verwenden, erhalte ich nur ein Ergebnis,Python for-Schleife wird nur einmal ausgeführt?

dh

input1=Vin(tpoints) 
print (input1) 

nur ergibt [1], während ich die Funktion will es tun für alle t Wert.

+3

Sobald Ihre Funktion einen 'return' erreicht, ist die Funktion beendet. Wenn Sie die gesamte Schleife ausführen möchten, bevor Sie zurückkehren, setzen Sie die Anweisung 'return' hinter die Schleife statt in die Schleife. – khelwood

+1

Sie sind bei der ersten Wiederholung der Schleife –

Antwort

0

Sie kommen von mit in der for-Schleife zurück, also würden Sie von der Funktion bei der ersten Iteration der Schleife zurückkehren.

Sie wie folgt die Funktion erneut writ e kann

-Code

def Vin(t): 
    inputs = [] 
    for i in range (1000): 
     if (-1)**(np.floor(2 * t[i])) == 1: 
      inputs.append(1) 
     else: 
      inputs.append(-1) 
    return inputs 

Überprüfen Sie die Vertiefung von Return-Eingänge in der Funktion hier.

BTW, können Sie Ihre Funktion als mehr pythonic und effizienten Code reduziert werden

def Vin(t): 
reduce map(lambda x:int((-1)**(np.floor(t[i] < 1))), range (1000)) 
+1

Vielen Dank :) – chknpie

0

Versuch:

for i in range (1000): 
     if (-1)**(np.floor(2 * t[i])) == 1: 
      Vin = (1) 
      inputs.append(Vin) 
     else: 
      Vin = (-1) 
      inputs.append(Vin) 

return inputs 

Aktuelle Einzug der Rückkehr verlässt der for-Schleife nach dem 1. Iteration

3

Wie andere sagten, gibt es einen Einrückungsfehler in Ihrer return Aussage. Ich konnte nicht widerstehen Sie den Code in einer pythonic Weise umschreiben, zu vermeiden alles, was umständlich Schleifen und die daraus resultierenden Fehler:

return [1 if (-1)**(np.floor(2 * t[i])) == 1 else -1 for i in range (1000)] 

diese Liste comprenhension + ternäre Konstruktion Anweisung erstellt Ihre -1,1 Array in 1 Zeile, viel schneller als Sie mit einer Schleife schreiben würden.

+0

Die Funktion kann noch weiter reduziert werden, überprüfen Sie meine Antwort –

Verwandte Themen