Zählschleife

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.
Antworten
Noobinfo
User
Beiträge: 2
Registriert: Freitag 22. Juni 2018, 16:00

Wenn ich für die folgende Zählschleife die Variable 5 wähle, erhalte ich als Ergebnis die Zahl 5. Wenn ich allerdings int(input(" ") weglasse und a=5 schreibe erhalte ich
als Ergebnis die Zahl 15. was hat es mit int(input(" ") auf sich und was bedeutet das? und könnt ihr mir bitte kurz erläutern wie die zählschleife funktioniert? ich verstehe nicht warum z=z*i "z" ergeben soll. und was für "i" eingesetzt wird...
Vielen vielen dank;)

a=int(input("7"))
z=2

for i in range(1,a,2):
z=z*i
while(z<5):
z=z+1
print(str(z))
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Noobinfo: Erst einmal Dein Code noch mal in [ Python ]-Tags, damit man die Einrückung sehen kann, die ist wichtig in Python:

Code: Alles auswählen

a=int(input("7"))
z=2

for i in range(1,a,2):
    z=z*i
    while(z<5):
        z=z+1
print(str(z))
Wenn Du den Code nicht verstehst, dann fang mit etwas einfaherem an. Ansonsten lass Dir die Werte der Variablen in jedem Schritt ausgeben. Von `i` und von `z`, jeweils für jeden Schleifendurchlauf an dem sie beteiligt sind.

Was ``int(input())`` bedeutet kann man in der Dokumentation nachlesen. `input()` fragt den Benutzer nach einer Eingabe und liefert das was der eingegeben hat als Zeichenkette. Und die wird dann `int()` übergeben, das die Zeichenkette als Ziffern einer Dezimalzahl betrachtet und in eine ganze Zahl umwandelt. Das Du im Code '7' als Argument an `input()` übergibst, ist wahrscheinlich eher verwirrend als hilfreich. Schau mal in die Dokumentation was das Argument bedeutet.

Die Klammern um die Bedingung bei ``while`` gehören da nicht hin, denn so sieht diese Anweisung aus wie ein Funktionsaufruf, was es nicht ist.

Das ``z=z*i`` darfst Du nicht als mathematische Gleichung betrachten. Das ist eine Zuweisung. Mehr sage ich dazu mal nicht, denn Du kommst weiter wenn Du ein Tutorial durcharbeitest, als wenn wir Dir hier die Grundlagen der Sprache erklären. Vor allem weil das bereits in Tutorials alles beschrieben ist.

Edit: In der Python-Dokumentation ist ein Tutorial das man mal durchgearbeitet haben sollte.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Noobinfo
User
Beiträge: 2
Registriert: Freitag 22. Juni 2018, 16:00

ich lerne für eine Klausur. kann man das nicht einfach kurz schrittweise erklären wie man es sonst unter Mitstudenten macht?
Das wäre echt nett
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Noobinfo: Kannst Du nicht einfach kurz nachlesen was die verwendeten Funktionen und Kontrollstrukturen machen, ein wenig in einer interaktiven Python-Shell damit arbeiten wenn etwas unklar sein sollte, und/oder das im Einzelschritt in einem Debugger durchgehen?

Etwas besser als die Python-Shell die man durch starten von Python ohne Pythonprogramm bekommt, ist IPython.

Debugger ist eigentlich nicht so mein Ding, weil man in Python sehr leicht mit ein paar strategisch eingestreuten `print()`-Aufrufen den Wert von Variablen verfolgen kann. Wenn man es doch mal Schritt für Schritt braucht, gibt es in der Standardbibliothek das `pdb`-Modul. Und ein paar Python-IDEs haben dafür auch ein grafisches Frontend.

Wenn Du dann konkrete Fragen hast, kannst Du die gerne stellen. Beschreibe am besten was Du gemacht hast, was dabei heraus kam, und wie das von dem abweicht was Du erwartet hast, und warum Du etwas anderes erwartet hast.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Die Berechnung von `z` lässt sich ohne die Schleifen übrigens auch als einfacher Ausdruck schreiben:

Code: Alles auswählen

from math import factorial as fac
a = int(input())
z = 2 if a < 2 else (lambda n: fac(2 * n) // (fac(n) * 1 << n))(a >> 1) * 5
print(z)
:-)

Edit: Das Syntaxhighlighting nervt. :-(
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten