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

Fakultät berechnen

Beitragvon breathe_easy » 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.
Benutzeravatar
tux21b
User
Beiträge: 18
Registriert: Mittwoch 15. Februar 2006, 23:20
Wohnort: Linz.at
Kontaktdaten:

Beitragvon tux21b » 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...
Frank aka Ch3ck3r
User
Beiträge: 49
Registriert: Dienstag 13. November 2007, 21:56
Wohnort: Berlin
Kontaktdaten:

Beitragvon Frank aka Ch3ck3r » 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:

Beitragvon nkoehring » 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...
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » 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

Beitragvon 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:

Beitragvon CM » 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

viel neues

Beitragvon breathe_easy » 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: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Re: viel neues

Beitragvon EyDu » 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

Re: Fakultät berechnen

Beitragvon graceflotte » 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=python file=Untitled.py]zahl = 6 #Zahl, aus der die Fakultät berechnet werden soll.
print reduce(lambda x,y: x*y, xrange(1,1+zahl))[/code]
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Re: Fakultät berechnen

Beitragvon EyDu » 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: 7061
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Fakultät berechnen

Beitragvon Sirius3 » 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: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Re: Fakultät berechnen

Beitragvon Hyperion » Mittwoch 7. Januar 2015, 16:55

Oder wenn schon zu Fuß dann in hübsch:
[code=python file=Untitled.py]
reduce(mul, range(1, zahl))[/code]

Ach nee... Mist:
[code=python file=Untitled.py]
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[/code]
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: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Re: Fakultät berechnen

Beitragvon EyDu » 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: 7061
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Fakultät berechnen

Beitragvon Sirius3 » Mittwoch 7. Januar 2015, 17:29

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]