(Ich habe vor Dennis89 angefangen den Beitrag zu schreiben, darum ist der wohl recht redundant, sorry.)
@Intregral: Schönes Beispiel für schlechte Variablennamen. Wenn man einen Kommentar schreiben muss was der einbuchstabige Name bedeuten soll, und der Kommentar nur aus einem Wort besteht, dann kann man in der Regel davon ausgehen, dass dieses eine Wort in 99,9% der Fälle eigentlich der Variablenname hätte sein sollen.
Hier wird es dann aber wirr in Deinem Code: Du schreibst an `s` den Kommentar ”Zähler”, aber in der Schleife hochgezählt wird dann `i` mit dem Kommentar ”Zähler raufsetzen”. Der Kommentar beim initialisieren von `i` ist damit auch inhaltlich falsch. Schlimmer als keine Kommentare sind falsche Kommentare, denn Kommentare sollen ja gerade aufkommende Fragen beim Leser beseitigen, und nicht neue aufwerfen. Dann machen sie genau das Gegenteil von dem wofür sie da sind.
Statt ``i < n + 1`` wäre es einfacher, und auch effizienter, ``i <= n`` als Schleifenbedingung zu verwenden. Letztlich ist das hier aber eindeutig ein Fall für eine ``for``-Schleife statt einer ``while``-Schleife.
Hier eine Variante ohne explizite Schleife mit Werkzeugen aus der Standardbibliothek:
Code: Alles auswählen
#!/usr/bin/env python3
from functools import reduce
from operator import mul as multiplicate
def main():
number = int(input("Welche Zahl möchtest du berechnen?: "))
#
# FIXME Handle negative input.
#
result = reduce(multiplicate, range(1, number + 1), 1)
print(f"Die Fakultät von {number} ist: {result}")
if __name__ == "__main__":
main()
Wie die anderen Varianten die hier schon stehen geht der Code davon aus, das der Benutzer keine negative Zahl eingibt, denn dann ist das Ergebnis falsch.
Und natürlich könnte man auch einfach die vorhandene `math.factorial()`-Funktion verwenden, statt sich etwas selbst zu schreiben.