Seite 1 von 1
Verständnisfrage zur For Schleife
Verfasst: Freitag 22. April 2022, 11:19
von TheNormalGuy
Hallo liebe Community,
ich habe einen Code für eine Berechnung einer Fakultät gefunden und an meine Vorstellungen angepasst.
Für mein Verständnis habe ich an euch noch die Frage, ob man dies noch hätte anders lösen können.
Und bitte kann mir jemand erklären, was für eine Funktion
fact im Code hat.
Ich hatte viel ausprobiert und nur mit diesem Code hat es funktioniert. Mit anderen Codes wurde nur
n abgefragt.
Code:
Code: Alles auswählen
n = int(input("Welche Zahl möchtest du berechnen?: "))
fact = 1
for i in range(1,n+1):
fact = fact * i
print ("Die Fakultät von",n,"ist: ",end="")
print (fact)
Re: Verständnisfrage zur For Schleife
Verfasst: Freitag 22. April 2022, 11:56
von TheNormalGuy
Den Code habe ich gerade beim Durchstöbern anderer Codes ganz gut verstanden. Danke euch trotzdem!
Re: Verständnisfrage zur For Schleife
Verfasst: Montag 25. April 2022, 10:20
von Intregral
So hab ich das mal gemacht:
Code: Alles auswählen
n = int(input("Welche Zahl möchtest du berechnen?: "))
i=1 #Startwert (ergibt 1 für !0)
s=1 #Zähler
while i<n+1:
s = s*i
i = i+1 #Zähler raufsetzen
print(s)
Re: Verständnisfrage zur For Schleife
Verfasst: Montag 25. April 2022, 11:47
von Dennis89
Hallo Intregral,
Dein Code ist ein gutes Beispiel dafür, wie wichtig ordentliche Namen sind und wie verwirrend Kommentare sein können, die versuchen die schlecht gewählten Namen zu beschreiben.
'i' ist also der Startwert und 's' der Zähler. Ein paar Zeilen später ist 'i'' plötzlich der Zähler und 's' ist viel mehr das Ergebnis der Berechnung.
Ich finde, spätestens wenn man Code zeigt, der etwas erklären soll, dann müsste man sich um die Namen kümmern. Naja nur so als Anmerkung.
Grüße
Dennis
Re: Verständnisfrage zur For Schleife
Verfasst: Montag 25. April 2022, 11:59
von Intregral
Stimmt, ist mir leider nicht aufgefallen.
Wobei ich sagen muss dass ich absoluter Anfänger bin und beileibe nichts erklären wollte, sondern nur auf die Frage, "ob man dies noch hätte anders lösen können", geantwortet habe.
Ich könnte noch nicht mal sagen, ob es weitere Möglichkeiten gibt oder welche die effizienteste ist.
Re: Verständnisfrage zur For Schleife
Verfasst: Montag 25. April 2022, 12:07
von __blackjack__
(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.
Re: Verständnisfrage zur For Schleife
Verfasst: Montag 25. April 2022, 17:30
von Dennis89
__blackjack__ hat geschrieben: Montag 25. April 2022, 12:07
(Ich habe vor Dennis89 angefangen den Beitrag zu schreiben, darum ist der wohl recht redundant, sorry.)
Dass ich das noch erleben darf.
Eine zeitlange kam es öfters vor, das ich vor dem posten noch mals aktualisiert habe und dann schon eine viiiiiiiiel ausführlichere und bessere Antwort von dir da stand
Ausführlicher ist sie wieder, aber wenigstens war ich mal schneller.
Grüße
Dennis