Hallo zusammen,
ich habe diese funktion geschrieben aber die expotenz schreibweise wird nich akzaptiert innerhal der funktion.
weiß jemand, woran es liegt. und ob ander schreibweise gibt.
def exp(b**x):#b hoch x
if (x==1):
return exp(b)
elif(x%2==0):#potenz ist gerade
return exp(b**x/2)*(b**x/2)
else:
return exp(b**(x-1)*b)
rekursive funktion potenzieren
- __blackjack__
- User
- Beiträge: 14042
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@moh: Andere Schreibweisen wofür? Was soll denn das in der Funktionssignatur bedeuten? Was soll die Funktion überhaupt machen?
Und was die Rekursion angeht: In jedem der Zweige steht ein rekursiver Aufruf – damit hört die Rekursion nie auf und Du bekommst nie tatsächlich ein Ergebnis. Also praktisch wird das schon aufhören – mit einer Ausnahme wenn das Rekursionslimit erreicht ist.
Und was die Rekursion angeht: In jedem der Zweige steht ein rekursiver Aufruf – damit hört die Rekursion nie auf und Du bekommst nie tatsächlich ein Ergebnis. Also praktisch wird das schon aufhören – mit einer Ausnahme wenn das Rekursionslimit erreicht ist.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
wenn ich schreibe: b**x als varible in der funktion ergibt mir einer fehler es wird nicht aktzaptiert__blackjack__ hat geschrieben: Freitag 3. Mai 2019, 11:26 @moh: Andere Schreibweisen wofür? Was soll denn das in der Funktionssignatur bedeuten? Was soll die Funktion überhaupt machen?
Und was die Rekursion angeht: In jedem der Zweige steht ein rekursiver Aufruf – damit hört die Rekursion nie auf und Du bekommst nie tatsächlich ein Ergebnis. Also praktisch wird das schon aufhören – mit einer Ausnahme wenn das Rekursionslimit erreicht ist.
def exp(b**x):#SyntaxError: invalid syntax
man definier einer funktion mit def und dann kommt die name der funktion und im klammern schreibt man doch einer variable(b hoch x)__deets__ hat geschrieben: Freitag 3. Mai 2019, 11:54 Du musst schon wenigestens mal halb auf ein Grundlagentutorial schielen. Das ist eine Funktions DEFINTION. Darin kannst du nur Namen von Parametern angeben. Nicht beliebige Ausdruecke.
kannst du mit tipps geben, wie kann ich das schreiebn?
Nein, das ist NICHT so. Dort kommt NUR DER NAME HIN. Das was du mit dem Parameter machen willst kommt in den Block danach.
Es gibt tatsaechlich Faelle, in denen in Funktionssignaturen (also der Parameterliste) * und ** vorkommen, die sind aber hier irrelevant und fuer etwas komplett anderes gedacht.
Es gibt tatsaechlich Faelle, in denen in Funktionssignaturen (also der Parameterliste) * und ** vorkommen, die sind aber hier irrelevant und fuer etwas komplett anderes gedacht.
- __blackjack__
- User
- Beiträge: 14042
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Und man kann solche Ausdrücke für Defaultwerte verwenden, aber das ist auch etwas anderes, dann muss ein Name da stehen der diesen Wert bekommen soll.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Code: Alles auswählen
def exp(b,x):#b hoch x
c=b**x
if (x==1):
return c
elif(x/2==0):#potenz ist gerade
return (b**x/2)*(b**x/2)
else:
return (b**(x-1))*b
Zuletzt geändert von moh am Freitag 3. Mai 2019, 12:42, insgesamt 1-mal geändert.
Wenn du b**x durch eine Funktion berechnen lassen möchtest, dann sähe die so aus:
Die Frage ist nur, warum?
Code: Alles auswählen
def exp(b, x):
return b**x
print(exp(3, 2))
>> 9
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
ah ok, jetzt verstehe ich worum es hier geht. 

Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
- __blackjack__
- User
- Beiträge: 14042
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
`exp()` ist kein besonders guter Name, denn so eine Funktion gibt es bereits, und die berechnet die Potenz der mathematischen Konstante e (≈2.718281828459045) mit einem gegebenen Argument. Der übliche Name für die Potenzfunktion ist `pow()` und die gibt es auch unter dem Namen bereits in Python:
Eine selbst geschrieben Funktion könnte man dann vielleicht `power()` nennen.
Code: Alles auswählen
In [6]: pow(3, 2)
Out[6]: 9
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
dachte, dass pow funktion nur in c . hätte ich mir doch viel arbeit speichern.__blackjack__ hat geschrieben: Freitag 3. Mai 2019, 12:45 `exp()` ist kein besonders guter Name, denn so eine Funktion gibt es bereits, und die berechnet die Potenz der mathematischen Konstante e (≈2.718281828459045) mit einem gegebenen Argument. Der übliche Name für die Potenzfunktion ist `pow()` und die gibt es auch unter dem Namen bereits in Python:Eine selbst geschrieben Funktion könnte man dann vielleicht `power()` nennen.Code: Alles auswählen
In [6]: pow(3, 2) Out[6]: 9
danke
- __blackjack__
- User
- Beiträge: 14042
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@moh: Wenn Du Dir Arbeit ersparen möchtest, dann verwende einfach den ``**``-Operator:
`pow()` würde ich nur verwenden wenn ich eine Funktion als Argument brauche, beispielsweise für `map()`, oder wenn man ganze Zahlen hat und das dritte Argument der Funktion benötigt, weil das effizienter ist als die Modulo-Operation nach dem normalen potenzieren anzuwenden. Und selbst wenn man sich die Funktion selbst implementieren würde, weil man die eingebaute `pow()`-Funktion und `operator.pow()` nicht kennen würde, dann würde man ja nicht irgendwelchen rekursiven Unsinn anfangen, sondern in der Funktion einfach den ``**``-Operator verwenden. So wie ThomasL das gezeigt hat.
Code: Alles auswählen
In [7]: 3**2
Out[7]: 9
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.