Fakultät berechnen
-
- User
- Beiträge: 58
- Registriert: Sonntag 29. Juli 2007, 18:34
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.
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.
-
- User
- Beiträge: 18
- Registriert: Mittwoch 15. Februar 2006, 23:20
- Wohnort: Linz.at
- Kontaktdaten:
Du kannst eine Liste verwenden. In Python können Listen fast alles, sie haben sogar die Stack Funktionen implementiert.
So, damit bekommst du es jetzt sicher auch alleine hin. Viel Spaß
Gruß
Christoph
PS: warum multiplizierst du das Ergebnis eigentlich nicht gleich aus, dann musst du nicht 2mal iterieren...
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()
Gruß
Christoph
PS: warum multiplizierst du das Ergebnis eigentlich nicht gleich aus, dann musst du nicht 2mal iterieren...
[url]http://www.ubuntuusers.de[/url]
-
- User
- Beiträge: 49
- Registriert: Dienstag 13. November 2007, 21:56
- Wohnort: Berlin
- Kontaktdaten:
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
http://www.ts-onlyfree.de
- nkoehring
- User
- Beiträge: 543
- Registriert: Mittwoch 7. Februar 2007, 17:37
- Wohnort: naehe Halle/Saale
- Kontaktdaten:
ü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
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
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
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)
Ich weißBlackJack hat geschrieben:Hm, ich hätte auf `reduce()` zurückgegriffen.
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
-
- User
- Beiträge: 58
- Registriert: Sonntag 29. Juli 2007, 18:34
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
Greez Michael
http://docs.python.org/dev/index.htmlbreathe_easy hat geschrieben:Bleibt noch die Frage wie und vor allem wo bekomme ich einen Inhalt zu all diesen neuen Begriffen bzw. Funktionen.
-
- User
- Beiträge: 25
- Registriert: Samstag 8. März 2014, 12:17
Nach 8 Jahren des denkens, hier die (soweit ich weiß) kürzeste Lösung: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...
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))
Naja:graceflotte hat geschrieben:Nach 8 Jahren des denkens, hier die (soweit ich weiß) kürzeste Lösung:
Code: Alles auswählen
import math
math.factorial(6)
Das Leben ist wie ein Tennisball.
@EyDu, graceflotte: es geht also um Bytes.
48 Bytes:
39 Bytes:
und die kürzeste Lösung, 37 Bytes:
48 Bytes:
Code: Alles auswählen
print reduce(lambda x,y: x*y, xrange(1,zahl+1))
Code: Alles auswählen
import math
print math.factorial(zahl)
Code: Alles auswählen
y=x=zahl
while y>2:y-=1;x*=y
print x
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Oder wenn schon zu Fuß dann in hübsch:
Ach nee... Mist:
Code: Alles auswählen
reduce(mul, range(1, zahl))
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... :-(
Grund: Hab mich geirrt... :-(
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Ach so, es geht um Bytes
34 Bytes:
34 Bytes:
Code: Alles auswählen
__import__("math").factorial(zahl)
Das Leben ist wie ein Tennisball.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Und wenn 's spezieller sein darf, geht es auch noch kürzer:
Code: Alles auswählen
print "720"
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
@Hyperion: Das Leerzeichen zwischen ``print`` und der Zeichenkette könnte man noch einsparen.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Hatte kein Python 2 da, um das zu testen Aber danke für den Hinweis!BlackJack hat geschrieben:@Hyperion: Das Leerzeichen zwischen ``print`` und der Zeichenkette könnte man noch einsparen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert