Problem bei ersten python versuchen

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.
lunar

@Hyperion: Ich glaube, der OP hat jetzt Angst… hätte ich auch, wenn ich nicht schon länger hier unterwegs wäre ;)
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

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 :roll:
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Ich persönlich hab solche Threads gerne :D. 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
T64
User
Beiträge: 16
Registriert: Dienstag 18. Oktober 2011, 16:36

Für alle, die die gleiche Aufgabe haben und noch eine Lösung suchen, das hier müsste für 2. funktionieren:

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))
Edit: Bei mir war auch ein kleiner Fehler drin :O ...
Zuletzt geändert von T64 am Donnerstag 20. Oktober 2011, 17:24, insgesamt 1-mal geändert.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Das auch:

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
Edit: Fehler behoben, den hoffentlich noch keiner bemerkt hat :P
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@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.
lunar

Ich finde ja einen endlosen Iterator mit allen Paaren viel schöner :)

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))
Ansonsten fängt die Fakultät ja eigentlich bei 0 an ;)
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Ihr habt ja soooo Recht :D

EyDu: Das kann ich nicht erklären :oops:
BlackJack

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
BlackJack

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

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!
Antworten