python fakultät programmieren?

5 Antworten

Der Ansatz ist nicht schlecht.

Kleiner Tipp:

Du kannst den vorherigen Wert in einer zweiten Variable speichern, mit dem aktuellen Wert der Laufvariable multiplizieren und dann die zweite Variable durch den nächsthöheren Wert ersetzen.

Woher ich das weiß:Berufserfahrung

Das würde es für jede beliebige Zahl 1 zurückgeben.

So sollte das laufen:

def faculty(n):
    if n < 0: raise ValueError("n must be >= 0")
    result = 1
    for x in range(2, n + 1):
        result *= x
    return result
LeanEveryday 
Fragesteller
 28.09.2018, 23:03

den teil if n < 0: raise ValueError("n must be >= 0") versteh ich nicht. ist das überhaupt nötig und was macht das?

0
Isendrak  29.09.2018, 02:02
@Mark Berger

Nicht ganz. faculty(0) gibt ordnungsgemäß den Wert 1 zurück. Nur für n<0 ist die Fakultät nicht definiert.

0
LeanEveryday 
Fragesteller
 28.09.2018, 23:04

und warum muss ich 2 und n + 1 wählen? bei listen hab ich gemerkt, dass er die letzte zahl nie annimmt, also quasi wie ein offenes intervall...

ist das bei der anfangszahl auch so?

0
Isendrak  29.09.2018, 02:00
@LeanEveryday

2 als Startwert, da 1*1 redundant wäre.

n+1 als "Endwert", da list(range(2,5)) = [2,3,4], wobei [2,3,4,5] für n=5 benötigt wird.

1

Wenn es eien Fingerübung ist:

import math
math.factorial(n)

Wenn die Implementierung selbst gemacht werden soll, dann gibt es einen ganzen Strauß an Ansätzen, Isendrak hat Dir bereits den iterativ imperativen Ansatz gezeigt.

Oder auch rekursiv:

function factorial(n) {
  if (n>1) {
    return n*factorial(n-1);
  } else if {
    return 1;
  }
}
Woher ich das weiß:Hobby – Linux-Nutzer seit 2006