Moin,
hab ein problem mit der def funktion in Python.
Wenn ich folgendes eingebe:
def fakultaet(self,n)
kommt immer nur:
SyntaxError: invalid syntax
meine frage ist jetzt, was daran (def fakultaet(self,n)) falsch ist?
Schöne grüsse Komandant
def problem
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Komandant,
wenn das so alleine steht ist es keine korrekte Syntax.
Ausserhalb einer Klasse brauchst Du kein self als ersten Parameter. Es fehlt dann nur noch der ":" am Ende und darunter die Kommandos welche die Funktion bilden.
Denke auch immer daran, daß Einrückungen mit zur Syntax gehören!!!
Hier mal der korrekte Code für eine Fakultätsfunktion:
Gruß
Dookie
wenn das so alleine steht ist es keine korrekte Syntax.
Ausserhalb einer Klasse brauchst Du kein self als ersten Parameter. Es fehlt dann nur noch der ":" am Ende und darunter die Kommandos welche die Funktion bilden.
Denke auch immer daran, daß Einrückungen mit zur Syntax gehören!!!
Hier mal der korrekte Code für eine Fakultätsfunktion:
Code: Alles auswählen
def fakultaet(n):
result = n
while n > 2:
n = n - 1
result = result * n
return result
Dookie
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hier noch die Version für die Pythonfreaks
Dookie
Code: Alles auswählen
>>> fak = lambda n: ((n>1) and reduce(lambda a, b: a*b, xrange(2,n+1)) or n)
>>> fak(7)
5040
-
- User
- Beiträge: 2
- Registriert: Montag 24. März 2003, 14:53
- Wohnort: nähe Hannover
- Kontaktdaten:
Moin,
erstmal thx füt eure antworten.
und die beiden codes führen zum selben ergebnis?
ps: kennt einer ein gutes tutorial für python einsteiger?
Hab noch kein gutes gefunden, scheinen alle zu alt zu sein...
Schöne grüße Komandant
erstmal thx füt eure antworten.
und die beiden codes führen zum selben ergebnis?
ps: kennt einer ein gutes tutorial für python einsteiger?
Hab noch kein gutes gefunden, scheinen alle zu alt zu sein...
Schöne grüße Komandant
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Hmm, sehr gute bücher (auch online) gibt es bei O'reilly
Onlineversionen http://safari.oreilly.com/
Onlineversionen http://safari.oreilly.com/
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Für Ein/Umsteiger finde ich http://www.way2python.de/ sehr gut.
Wenn Du noch keine Ahnung von Programmeiren hast, ist auch http://www.freenetpages.co.uk/hp/alan.g ... tintro.htm zu empfehlen. Auch wenn das 2. nicht auf die Spezialitäten von Python2.3 eingeht, So sind die Grundlagen für Python doch die selben.
Nochmal zurück zur Fakultätsfunktion. Nach dem Motto "Viele Wege führen nach Rom" gibts auch hier noch mehr Möglichkeiten. Wenn man die In der Mathematik verwendete Definition der Fakultät einer Zahl nimmt, "f(n) = n*f(n-1) für n > 1" kann man auch eine rekursive Funktion schreiben.
ich habe mal ein kleines Beispielscript gemacht, das die verschiedenen Wege zur Fakultätsberechnung zeigt und die Ausführungsgeschwindigkeit testet.
Gruß
Dookie
Wenn Du noch keine Ahnung von Programmeiren hast, ist auch http://www.freenetpages.co.uk/hp/alan.g ... tintro.htm zu empfehlen. Auch wenn das 2. nicht auf die Spezialitäten von Python2.3 eingeht, So sind die Grundlagen für Python doch die selben.
Nochmal zurück zur Fakultätsfunktion. Nach dem Motto "Viele Wege führen nach Rom" gibts auch hier noch mehr Möglichkeiten. Wenn man die In der Mathematik verwendete Definition der Fakultät einer Zahl nimmt, "f(n) = n*f(n-1) für n > 1" kann man auch eine rekursive Funktion schreiben.
Code: Alles auswählen
def fak_recursive(n):
if n > 2: #da 3*2*1 == 3*2
return n * fak_recursive(n-1)
else:
return n
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
Modul: fak_test
Description: Teste
Version: V0.1
Copyright: 2003 by Fritz Cizmarov (Dookie)
Last modified: 15. Sep. 2003
License: Free
"""
from time import time
from sys import version_info
if version_info[:2] < (2,2):
raise SystemError("need at least Version2.2 of Python"+str(version_info))
def fak_recursive(n):
if n > 2:
return n * fak_recursive(n-1)
else:
return n
def fak_iter_while(n):
res = n
while n > 2:
n -= 1 # entspricht n = n - 1
res *= n # ginge auch als res = res * n
return res
def fak_iter_for(n):
res = n
for n in xrange(2,n):
res *= n
return res
fak_lambda = lambda n: reduce(lambda a, b: a*b, xrange(2,n),n)
num = 100000
msg = u"%s: %d Berechnungen brauchen %.2f sekunden"
def test(funktion_name, f):
values = range(1,101)*(num/100)
t_start = time()
for val in values:
tmp = f(val)
t_end = time()
print msg % (funktion_name, num, (t_end-t_start))
test("fak_recursive", fak_recursive)
test("fak_iter_while", fak_iter_while)
test("fak_iter_for", fak_iter_for)
test("fak_lambda", fak_lambda)
Dookie