Fakultät berechnen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
breathe_easy
User
Beiträge: 58
Registriert: Sonntag 29. Juli 2007, 18:34

Mittwoch 14. November 2007, 18:53

Ja ich weiß keine Informatikfragen! Aber!! Mir geht es darum in Python (das ist kein Studiumsinhalt!!) die Fakultät einer eingegebenen Zahl zu berechnen und ich habe keine Ahnung wie ich die jeweiligen Zwischenergebnisse abspeichern soll.

x = input Zahl
for schleife in range (1 bis x)
x = x-1

aber wie schaffe ich es, dass die verschiedenen Werte, die x annimmt nicht verloren gehen. Welche Mittel stellt mir Python zur Verfügung. ein stack o.ä.?
Den Rest bekomme ich dann schon hin.
tux21b
User
Beiträge: 18
Registriert: Mittwoch 15. Februar 2006, 23:20
Wohnort: Linz.at
Kontaktdaten:

Mittwoch 14. November 2007, 18:59

Du kannst eine Liste verwenden. In Python können Listen fast alles, sie haben sogar die Stack Funktionen implementiert.

Code: Alles auswählen

liste = [] # leere Liste anlegen
liste.append(1) # Elemente hinzufügen
liste.append(3)
print liste.pop() # und wieder lesen -> 3, 1
print liste.pop()
So, damit bekommst du es jetzt sicher auch alleine hin. Viel Spaß :D

Gruß
Christoph

PS: warum multiplizierst du das Ergebnis eigentlich nicht gleich aus, dann musst du nicht 2mal iterieren...
[url]http://www.ubuntuusers.de[/url]
Frank aka Ch3ck3r
User
Beiträge: 49
Registriert: Dienstag 13. November 2007, 21:56
Wohnort: Berlin
Kontaktdaten:

Mittwoch 14. November 2007, 19:19

also ich würde es so lösen xD

Code: Alles auswählen

def fakult(n):
    #Für Re- hat die Fakultät keine Wertemenge
    if n < 0:
        raise ValueError
    #Nach Definition ist 0! = 1
    if n == 0:
        return 1
    #Ansonten wird hier die Fakultät ausgerechnet
    else:
        save = 1
        for i in range(2,n+1):
            save *= i
        return save
Zuletzt geändert von Frank aka Ch3ck3r am Samstag 17. November 2007, 00:06, insgesamt 3-mal geändert.
kostenlose TS2-Server für jeweils 31 Tage:
http://www.ts-onlyfree.de
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Mittwoch 14. November 2007, 19:19

übrigens: Es ist nicht schlimm "Informatiker-Fragen" zu stellen... nur wenn jemand versucht hier die fertige Loesung fuer seine Hausaufgaben zu bekommen... dann wird er nicht so viel Glueck haben...
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Mittwoch 14. November 2007, 19:49

Code: Alles auswählen

lfac = lambda n: n-1 + abs(n-1) and lfac(n-1)*long(n) or 1
g = (lfac(x) for x in xrange(1, 5))
for x in g: print x
BlackJack

Mittwoch 14. November 2007, 19:55

Hm, ich hätte auf `reduce()` zurückgegriffen. :-)

Code: Alles auswählen

from operator import mul


def fak(n):
    if n < 0:
        raise ValueError
    return reduce(mul, xrange(2, n + 1), 1)


def main():
    for i in xrange(20):
        print i, fak(i)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Mittwoch 14. November 2007, 20:02

BlackJack hat geschrieben:Hm, ich hätte auf `reduce()` zurückgegriffen. :-)
Ich weiß ;-)

NB: Bei mir gibt es keine Fehlermeldung bei Werten < 0. Das kann gewünscht sein oder auch nicht. Hängt von der Fragestellung ab.

Gruß,
Christian
breathe_easy
User
Beiträge: 58
Registriert: Sonntag 29. Juli 2007, 18:34

Freitag 16. November 2007, 17:15

wow wow wow, das ist eine ganze Menge Stoff den sich ein Beginner wie ich da reinziehen muss!, aber vielen Dank für die schnellen und hoffentlich auch nütlzichen Antworten. Bleibt noch die Frage wie und vor allem wo bekomme ich einen Inhalt zu all diesen neuen Begriffen bzw. Funktionen im Moment lese ich nur How to think like a computerscientist.

Greez Michael
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Freitag 16. November 2007, 17:32

breathe_easy hat geschrieben:Bleibt noch die Frage wie und vor allem wo bekomme ich einen Inhalt zu all diesen neuen Begriffen bzw. Funktionen.
http://docs.python.org/dev/index.html
graceflotte
User
Beiträge: 25
Registriert: Samstag 8. März 2014, 12:17

Mittwoch 7. Januar 2015, 16:09

nkoehring hat geschrieben:übrigens: Es ist nicht schlimm "Informatiker-Fragen" zu stellen... nur wenn jemand versucht hier die fertige Loesung fuer seine Hausaufgaben zu bekommen... dann wird er nicht so viel Glueck haben...
Nach 8 Jahren des denkens, hier die (soweit ich weiß) kürzeste Lösung:

Code: Alles auswählen

zahl = 6 #Zahl, aus der die Fakultät berechnet werden soll.
print reduce(lambda x,y: x*y, xrange(1,1+zahl))
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 7. Januar 2015, 16:18

graceflotte hat geschrieben:Nach 8 Jahren des denkens, hier die (soweit ich weiß) kürzeste Lösung:
Naja:

Code: Alles auswählen

import math
math.factorial(6)
Das Leben ist wie ein Tennisball.
Sirius3
User
Beiträge: 8436
Registriert: Sonntag 21. Oktober 2012, 17:20

Mittwoch 7. Januar 2015, 16:51

@EyDu, graceflotte: es geht also um Bytes.
48 Bytes:

Code: Alles auswählen

print reduce(lambda x,y: x*y, xrange(1,zahl+1))
39 Bytes:

Code: Alles auswählen

import math
print math.factorial(zahl)
und die kürzeste Lösung, 37 Bytes:

Code: Alles auswählen

y=x=zahl
while y>2:y-=1;x*=y
print x
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mittwoch 7. Januar 2015, 16:55

Oder wenn schon zu Fuß dann in hübsch:

Code: Alles auswählen

 reduce(mul, range(1, zahl))
Ach nee... Mist:

Code: Alles auswählen

In [35]: zahl = 1

In [36]: reduce(mul, range(1, zahl))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-36-7c3b8deb12f3> in <module>()
----> 1 reduce(mul, range(1, zahl))

TypeError: reduce() of empty sequence with no initial value
Zuletzt geändert von Hyperion am Mittwoch 7. Januar 2015, 17:02, insgesamt 1-mal geändert.
Grund: Hab mich geirrt... :-(
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3))
assert encoding_kapiert
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 7. Januar 2015, 16:57

Ach so, es geht um Bytes :mrgreen:
34 Bytes:

Code: Alles auswählen

__import__("math").factorial(zahl)
Das Leben ist wie ein Tennisball.
Sirius3
User
Beiträge: 8436
Registriert: Sonntag 21. Oktober 2012, 17:20

Mittwoch 7. Januar 2015, 17:29

@EyDu: Fair bleiben, mit print sind's 41.
Antworten