Problem bei ersten python versuchen
@Hyperion: Ich glaube, der OP hat jetzt Angst… hätte ich auch, wenn ich nicht schon länger hier unterwegs wäre
In jedem Witz steckt ein Fünkchen Wahrheit ... wenn ich über die Jahre hinweg, die ich dieses Forum nun schon lese (und auch lange Zeit meinen Brei dazugegeben habe), betrachte -> wieviele Neulinge verschlissen, verratzt und mundtot gemacht worden sind (direkt, wie indirekt) *lach*und nie wieder einen Fuß in die Foren-Territorialität gesetzt haben ... *TräneAusAugewisch* ... dann hat es fast schon wieder etwas komisches an sich.
Jaja, Wattebäuschen bis ich blute - ich weiss
Jaja, Wattebäuschen bis ich blute - ich weiss
Ich persönlich hab solche Threads gerne . Man lernt was (BlackJacks Assembler) und es macht Spass das Problem auch in anderen Sprachen zu lösen und die Ergebnisse zu vergleichen.
the more they change the more they stay the same
Für alle, die die gleiche Aufgabe haben und noch eine Lösung suchen, das hier müsste für 2. funktionieren:
Edit: Bei mir war auch ein kleiner Fehler drin :O ...
Code: Alles auswählen
def fak(x):
if x == 0: return 1
y = 1
for i in range(1, x +1):
y = y*i
return y
for i in range(10):
print "%s! = %s" % (i, fak(i))
Zuletzt geändert von T64 am Donnerstag 20. Oktober 2011, 17:24, insgesamt 1-mal geändert.
Das auch:
Edit: Fehler behoben, den hoffentlich noch keiner bemerkt hat
Code: Alles auswählen
>>> print '\n'.join("%d! = %d" % (index, value) for index, value in enumerate(imap(math.factorial, xrange(1, 10)), 1))
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
@derdon: Jetzt musst du uns nur noch erklären, warum du `enumerate` UND `xrange` brauchst
Code: Alles auswählen
print "\n".join("%d! = %d" % (x, math.factorial(x)) for x in range(1, 10))
Das Leben ist wie ein Tennisball.
Ich finde ja einen endlosen Iterator mit allen Paaren viel schöner
Ansonsten fängt die Fakultät ja eigentlich bei 0 an
Code: Alles auswählen
facs = ((x, math.factorial(x)) for x in count())
print '\n'.join('{0}! = {1}'.format(x, y) for x, y in islice(facs, 10))
Die eigenständigere 6510-Assembler-Variante ohne Rückgriff auf die Rechenroutinen im BASIC-ROM des C64 ist noch in Arbeit. Aber zwischendurch mal schnell der BASIC-Einzeiler, der das selbe macht (wie die Assembler-Variante, die wohl irgendwo bei ≈200 Zeilen enden wird):
Code: Alles auswählen
1 N=1:FOR I=0 TO 12:PRINT I "!=" N:N=N*(I+1):NEXT
Okay, hier ist nun die Assemblervariante für Problem 2 die nicht die Rechenroutinen im BASIC-ROM verwendet: http://pastebin.com/uCCF6UXb
Edit: Noch mal ein Nachtrag zur Forth-Lösung auf dem C64. Jetzt auch hier mit 32-Bit, also bis 12!:
Edit: Noch mal ein Nachtrag zur Forth-Lösung auf dem C64. Jetzt auch hier mit 32-Bit, also bis 12!:
Code: Alles auswählen
\ Fac-Table bj
: d*u ( d u -- d*u )
dup rot * -rot um* rot + ;
: main ( -- )
page 1.
13 0 ?do
i . del ." ! = " 2dup d. cr
i 1+ d*u
loop
2drop ;
\\ Print a fac table from 0! to 12!