2017-05-03 4 views
1

Ich brauche eine Funktion zu erstellen, die eine Exponencial Funktion gibt, aber die Exponentialfunktion nimmt nur positive Zahlen, habe ich versucht Lambda mit (ist Teil der Einschränkungen ich habe) , und ich versuchte, auf diese Weise:, die nur nehmen positive numbres

def create(v): 
    return (lambda x: (v*e**-(v*x)) if x>=0) 

aber es fordert Syntaxfehler die ganze Zeit:

File "<stdin>", line 8 
    return (lambda x : (v*e**-(v*x)) if x>=0) 
             ^
SyntaxError: invalid syntax 

Wie konnte ich es nur mit positiven Zahlen funktioniert?

+0

Was soll es tun, wenn die eingegebene Nummer nicht positiv ist? –

+0

Ein Benutzer (oder Aufrufer) kann sowieso negative Werte liefern. Fragen Sie sich, welcher Teil des Codes ausgeführt wird, wenn der Eingabewert für die Funktion negativ ist. –

+0

Ich möchte nur, dass es zurückgibt Keine, wenn der Wert zur Verfügung gestellt wird, ist negativ – gramsch

Antwort

2

Es gibt nur wenige Dinge falsch mit Ihrem Code:

  1. Sie verpassen die else Klausel, die erforderlich ist, wenn der ternären Operator. Python-Interpreter muss wissen, was zu tun ist, wenn jemand eine negative Zahl eingibt.
  2. Während nicht falsch, brauchen Sie nicht die äußersten Parameter um die ganze lambda Funktion.
  3. Ihre Klammern sind falsch platziert, die if sollte eine Ebene tiefer in der lambda 's Körper der Klammer sein.

Jetzt basierend auf Ihren Kommentar:

Ich will es einfach keine zurückzukehren, wenn der angegebene Wert negativ ist

Hier ist, was das Endergebnis aussehen soll:

def create(v): 
    return lambda x: (v*e**-(v*x) if x >= 0 else None) 

In der Tat brauchen Sie nicht die die Klammer a rund um die lambda ‚s Körper entweder:

def create(v): 
    return lambda x: v*e**-(v*x) if x >= 0 else None 

an dieser Stelle Obwohl es kompliziert werden könnte, die den Betrieb zunächst lief, so empfehle ich die Klammer zu halten.

1

Ein ternärer Ausdruck braucht immer seinen else Teil, sonst haben Sie nicht angegeben, was passieren soll, wenn die Zahl negativ ist (was, obwohl Sie es nicht wünschen, immer noch der Fall sein könnte).

Zum Beispiel:

>>> import math 
>>> r = lambda x: math.sqrt(x) if x >= 0 else x 
>>> r(9) 
3.0 
>>> r(-9) 
-9 

Die Syntaxfehler Sie bekommen sind über den Mangel an diesen else.

+1

Ich markierte Ihre als Antwort, da ist die vollständigste, Prost Mate! – gramsch

+1

@gramsch länger ist nicht immer vollständiger, seine Antwort enthält nicht Ihren ursprünglichen Code und berücksichtigt nicht Ihre Anfrage zur Rückgabe von 'None'. Ich sage nicht * sein * Anwer ist ungültig, ich sage nur * Ihr * Argument macht nicht viel Sinn –

Verwandte Themen