Seite 1 von 2

Hilfe bei meiner FOR IF Schleife

Verfasst: Samstag 4. Oktober 2014, 13:43
von Peter_77
Hallo Forum!
Meine Hausaufgaben habe ich mit MAX und MIN gelöst und Punkte bekommen.

Der Sinn war aber, alle vorgegebenen Zahlen einzeln miteinander zu vergleichen.
Könnt Ihr mir bitte helfen. Ich erkenne meinen Fehler nicht.

Code: Alles auswählen

# sys.version_info(major=3, minor=4, micro=0, releaselevel='final', serial=0)
# Menge der Zahlen
Zahlen = [41, 25, 40, 97, 76, 40, 10, 43]

# Die kleinste gefundene Zahl  Soll 10
kzahl = Zahlen[0]

# Die größte gefundene Zahl Soll 97
gzahl = Zahlen[-1]

# Antworten mit Lücke
Satz1 = ("Die kleinste Zahl ist {} Soll 10 ")
Satz2 = ("und die größte Zahl ist {} Soll 97")

# Antwort mit Ergebnis
a = (Satz1.format(kzahl))
b = (Satz2.format(gzahl))

# Ergebnis als Satz
c = a + b

# Anzahl der Listeneinträge
Menge = len(Zahlen)

			   
# FOR Schleife für Variable kzahl (Kleinste Zahl)
for i in range(0, (len(Zahlen))-1:
    if Zahl <= kzahl:
      Zahl = kzahl
  
print(c)
print("AUS")

Peter

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Samstag 4. Oktober 2014, 14:30
von Sirius3
@Peter_77: Zuerst einmal gibt es einen SyntaxError und wenn Du den behoben hast, einen NameError. Aber wo der ist, sagt Dir schon Python freundlicherweise. Die Ausgabe erzeugt man passenderweise nachdem man das Ergebnis gefunden hat und nicht davor. Etliche Klammern sind überflüssig. Variablennamen sollten etwas aussagen und nicht aus einem Buchstaben oder kryptischen Abkürzungen bestehen.

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Samstag 4. Oktober 2014, 14:32
von EmaNymton
Es gibt in deinem Programm mehrere Fehler/Probleme:

Du hast in Zeile 27 einen Syntax-Fehler

Code: Alles auswählen

for i in range(0, len(Zahlen)-1):
    ...
wäre richtig, wobei du da auch einfach deine Variable Menge verwenden könntest, die wird nämlich sonst gar nicht benutzt, könnte dann also auch weggelassen werden.

Der nächste Fehler wäre dann, dass er innerhalb der for-Schleife die Variable Zahl nicht kennt. Du willst da eher auf die Listenelemente zugreifen, also Zahlen aufrufen.

Ansonsten funktioniert dein Sortieralgorithmus so nicht. Habt ihr da schon Verfahren kennengelernt? Ansonsten einfach mal nach Bubblesort, Min- oder Maxsort bei Wikipedia suchen, nachvollziehen und in Python umsetzen.

Zeilen 6 und 9 machen nicht das, was du erwartest. in kzahl und gzahl wird die aktuelle Zahl der Liste gespeichert. Wenn sich diese ändert, bekommen kzahl und gzahl davon nichts mit.

Warum sind deine Strings in Tupeln organisiert? Du kannst die Klammern auch weglassen

Variablennamen sind in Python klein zu schreiben, das ist eine Konvention, die man sich angewöhnen sollte.

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Samstag 4. Oktober 2014, 15:07
von darktrym

Code: Alles auswählen

range(0, len(Zahlen)-1)
- diese Konstruktion ist augenscheinlich wenig durchdacht. Zahlen ist eine Liste, warum benutzt dann nicht slices, Stand einen Zweifingerhandstand zu vollführen?

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Samstag 4. Oktober 2014, 15:11
von cofi
@darktrym: Er will aber eigentlich nicht dieses Konstruktion, denn dann ist der Algorithmus fehlerhaft. `- 1` ist falsch und darum waeren dann auch Slices falsch ;)

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Samstag 4. Oktober 2014, 15:25
von EmaNymton
@cofi: Wieso? Peter_77 hat nicht wirklich spezifiziert, wie er sortieren will, er soll lediglich die Zahlen vergleichen. Bei Bubblesort würde ich so vorgehen (bis zum vorletzen Index). Du kannst ja schlecht über die Elemente der Liste iterieren, wenn sie verändert werden, oder?

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Samstag 4. Oktober 2014, 15:34
von cofi
@EmaNymton: Man findet trotzdem nicht die kleinste aller Zahlen (was der Kommentar sagt), indem man die letzte Zahl nicht betrachtet. Aus dem Quelltext Bubblesort herauszudeuten finde ich dann doch sehr gewagt.

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Samstag 4. Oktober 2014, 15:35
von BlackJack
@EmaNymton: Wo soll denn da sortiert werden? Ich habe die Aufgabe so verstanden das min und max gefunden werden sollen und zwar ohne die Funktionen zu benutzen. Und wahrscheinlich auch ohne `list.sort()` zu benutzen. Also ein (effizientes) `min_max()` selbst implementieren.

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Samstag 4. Oktober 2014, 15:37
von EmaNymton
Der Sinn war aber, alle vorgegebenen Zahlen einzeln miteinander zu vergleichen.
Das hört sich für mich danach an, dass die Liste sortiert werden soll und dann mit erstem und letzten das kleinste und größte ausgegeben werden soll. Ich hab mir die Aufgabe ja nicht ausgedacht... ;)

Vielleicht warten wir einfach, bis der Threadersteller konkreter wird ;)

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Samstag 4. Oktober 2014, 16:18
von Hyperion
Also für mich hört sich das schlicht danach an, dass das Minimum und das Maximum gefunden werden sollen. Dazu muss man ja nichts sortieren; das erhöht die Komplexität ja obendrein - sowohl der Aufgabe als auch des Algorithmus.

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Samstag 4. Oktober 2014, 17:53
von Peter_77
EmaNymton hat geschrieben:Es gibt in deinem Programm mehrere Fehler/Probleme:

Du hast in Zeile 27 einen Syntax-Fehler

Code: Alles auswählen

for i in range(0, len(Zahlen)-1):
    ...
wäre richtig, wobei du da auch einfach deine Variable Menge verwenden könntest, die wird nämlich sonst gar nicht benutzt, könnte dann also auch weggelassen werden.
Erst mal Danke, dass Du Dir Zeit für meine Probleme genommen hast.
Den Fehler werde ich morgen korrigieren.
Die Variable Menge soll in meiner Endfassung len(Zahlen)-1 ersetzen. Phyton überrascht mich aber immer wieder, dass bei Print(Liste) mal alle korrekten Werte aufgeführt werden, bei fortlaufenden Zahlenkolonnen aber mal der letzte Eintrag fehlt und mal nicht.
Das durchschaue ich noch nicht so ganz.
Der nächste Fehler wäre dann, dass er innerhalb der for-Schleife die Variable Zahl nicht kennt. Du willst da eher auf die Listenelemente zugreifen, also Zahlen aufrufen.

Wie ich die Zahl da reinbekommen sollte, war mir nicht klar.

Ansonsten funktioniert dein Sortieralgorithmus so nicht. Habt ihr da schon Verfahren kennengelernt? Ansonsten einfach mal nach Bubblesort, Min- oder Maxsort bei Wikipedia suchen, nachvollziehen und in Python umsetzen.

Mist. Nein, eigentlich sollen keine Python Verfahren benutzt werden. Es sollen alle Zahlen mit range, if und for miteinander verglichen werden, um die größte und die kleinste Zahl zu finden.

Zeilen 6 und 9 machen nicht das, was du erwartest. in kzahl und gzahl wird die aktuelle Zahl der Liste gespeichert. Wenn sich diese ändert, bekommen kzahl und gzahl davon nichts mit.

Richtig. Das habe ich gemacht, damit der Antwortsatz erst mal funktioniert, obwohl meine Zahlensuche noch nicht funktioniert.
Eigentlich sollen wir die erste Zahl der Liste als Startwert nehmen. Ich habe versucht, den letzten Wert auszuwählen. Meine Überlegung war, dass ich die Länge der Liste nicht brauche, wenn ich von hinten nach vorne arbeite, weil ja nach Zahl0 die Liste am Ende ist. So wollte ich das Programmende erzwingen und nicht in einer Endlosschleife (wegen meiner vielen Fehler) hängenbleiben.


Warum sind deine Strings in Tupeln organisiert? Du kannst die Klammern auch weglassen

Variablennamen sind in Python klein zu schreiben, das ist eine Konvention, die man sich angewöhnen sollte.

Tupeln sagt mir nicht. Werde ich googeln.
Die Variablen schreibt der Professor groß. Nach dem Kurs werde ich das dann abstellen.
Vielen Dank für die vielen Hinweise.

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Samstag 4. Oktober 2014, 18:04
von Hyperion
Peter_77 hat geschrieben: Die Variablen schreibt der Professor groß. Nach dem Kurs werde ich das dann abstellen.
OMG :shock: Wie heißt der denn? Dem würd ich gerne mal nen Link zu PEP8 schicken! :twisted:

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Samstag 4. Oktober 2014, 18:09
von Sirius3
@Peter_77: Keine Sorge, Du verwendest keine Tuple, nur unnötigerweise Klammern. (@EmaNymton: Denn nicht alles was in Klammern geschrieben wird, ist automatisch ein Tuple und auch wenn die Klammern fehlen, so kann man doch ein Tuple erzeugen).
Wenn Du "range" für die Lösung Deines Problems brauchst, dann machst Du etwas falsch. Über Listen wird in Python direkt iteriert und nicht über den Umweg eines Indexes.
Bei Zahlenbereichen ist in Python der Endwert immer exklusiv. Da fehlt also nichts, das ist nur Konvention.

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Samstag 4. Oktober 2014, 19:00
von BlackJack
@Peter_77: Ich sehe immer noch nicht so ganz warum man `range()` braucht. Sich diese Indirektion einzuhandeln nur um einen Vergleich pro zu ermittelndem Wert zu sparen lohnt sich einfach nicht.

Und das mit der Grossschreibung kannst Du auch jetzt schon sein lassen. Du ziehst das doch sowieso nicht durch und hast auch klein geschriebene Namen. Da kannst Du Dich auch gleich an den Style Guide for Python Code halten und das gegebenfalls dem Professor sagen, oder es in einem Kommentar als Hinweis schreiben inklusive URL zum Style Guide.

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Sonntag 5. Oktober 2014, 07:59
von Peter_77
EmaNymton hat geschrieben:Es gibt in deinem Programm mehrere Fehler/Probleme:

Der nächste Fehler wäre dann, dass er innerhalb der for-Schleife die Variable Zahl nicht kennt. Du willst da eher auf die Listenelemente zugreifen, also Zahlen aufrufen.

Ansonsten funktioniert dein Sortieralgorithmus so nicht. Habt ihr da schon Verfahren kennengelernt? Ansonsten einfach mal nach Bubblesort, Min- oder Maxsort bei Wikipedia suchen, nachvollziehen und in Python umsetzen.

Zeilen 6 und 9 machen nicht das, was du erwartest. in kzahl und gzahl wird die aktuelle Zahl der Liste gespeichert. Wenn sich diese ändert, bekommen kzahl und gzahl davon nichts mit.



So, nun habe ich Zeit.
Den Syntaxfehler habe ich behoben und in der FOR Schleife Zahl durch i ersetzt. Das läuft nun ohne Fehlermeldung durch.
Zeile 6 ist eine statische Angabe, die die Variable als Zahl definieren soll und verhindert, dass da irgendwas anderes drin steht.

Code: Alles auswählen

# FOR Schleife für Variable kzahl (Kleinste Zahl)
for i in range(0, Menge):
    if i <= kzahl:
      i = kzahl
Eigentlich hätte ich erwartet, dass kzahl überschrieben wird von der FOR Schleife. Also habe ich i = kzahl geändert in kzahl = i.
Das hat aber nichts bewirkt.
Warum kann ich den Wert der Variablen nicht überschreiben?

Sortierverfahren sollen nicht benurzt werden.
Also: Du brauchst zwei Variablen, die einen Anfangswert haben, der "alles" abfängt,
sowohl positive als auch negative Zahlen!
Einfachhalber nimmst du dazu die erste Zahl aus der Liste.
Dann beginnst du mit der Schleife, die natürlich für die Anzalh der Durchläufe
angepasst sein muss, je nachdem wie viel Werte in der Liste stehen,
das variiert nämlich! (range wäre hier das Stichwort!
Dann vergleichst du die erste Zahl mit einer der ersten vorher definierten
Variablen, so lang, bis du das erste Ergebnis (gross oder klein hast).
Dann im nächsten Schritt die umgekehrte Richtung!
Peter

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Sonntag 5. Oktober 2014, 08:45
von Sirius3
@Peter_77: das sieht mir ziemlich viel nach Raten und ziemlich wenig nach Nachdenken aus. Du hast in den Zeilen davor schon öfter die =-Operation benutzt, also solltest Du auch wissen was "i = kzahl" und was "kzahl = i" macht.
Wenn Du nicht weißt, was in einer Schleife passiert, dann hilft es oft, sich bei jedem Schleifendurchgang die relevanten Größen ausgeben zu lassen:

Code: Alles auswählen

for i in range(0, Menge):
    print(i, kzahl, i <= kzahl)
    if i <= kzahl:
        kzahl = i
Damit sollte klar werden, wann und wie kzahl überschrieben wird.

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Sonntag 5. Oktober 2014, 09:08
von EmaNymton
@Peter_77: Ist das die wörtliche Aufgabenstellung? Wenn ja, finde ich sie sehr bedenklich, da wie bereits geschrieben dafür in Python keine Zählschleife (also das iterieren über eine Zahlenliste, die du mit range erzeugst) notwendig ist und man direkt über die Elemente der Liste iterieren kann.

Code: Alles auswählen

for zahl in zahlen:
    print(zahl)
Ich würde die Aufgabe vielleicht mit beiden Varianten lösen (keine Ahnung wie stur dein Prof ist ;)) und darauf hinweisen, dass die Variante mit der Zählschleife in Python nicht sinnvoll/notwendig ist.

@Sirius3: Danke für den Hinweis mit den Tupeln, ich habe bisher fälschlicherweise angenommen, dass ("String") ein Tupel erzeugt, was für mich im Vergleich zu Listen, Dicts und Sets irgendwie intuitiv richtig war. Selbst wieder was gelernt... ;)

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Sonntag 5. Oktober 2014, 12:51
von /me
Peter_77 hat geschrieben:

Code: Alles auswählen

# FOR Schleife für Variable kzahl (Kleinste Zahl)
for i in range(0, Menge):
    if i <= kzahl:
      i = kzahl
Eigentlich hätte ich erwartet, dass kzahl überschrieben wird von der FOR Schleife. Also habe ich i = kzahl geändert in kzahl = i.
Das hat aber nichts bewirkt.
Warum kann ich den Wert der Variablen nicht überschreiben?
Du solltest mal in Textform beschreiben was du hier eigentlich tun willst. Es passiert nämlich definitiv nicht das, was du erwartest. Wenn du schon anfängst mit "i = kzahl hat nicht funktioniert, da habe ich dann kzahl = i genommen", dann machst du etwas Grundsätzliches falsch. Programmieren funktioniert nicht indem man Algorithmen oder Befehle rät.

Lass dir doch in der Schleife einfach mal mit print die Werte ausgeben die du da hast.

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Sonntag 5. Oktober 2014, 15:35
von Peter_77
Du solltest mal in Textform beschreiben was du hier eigentlich tun willst. Es passiert nämlich definitiv nicht das, was du erwartest.
Na, versuch ich mal:
Zahlen = [41, 25, 40, 97, 76, 40, 10, 43]
Ist 25 kleiner kzahl, wenn ja, definiere 25 als kzahl, sonst nehme den nächsten Wert aus der Liste.
Beende den Vorgang, wenn der letzte Wert der Liste ZAHLEN erreicht ist.
Ist 40 kleiner kzahl, wenn ja, definiere 40 als kzahl, sonst nehme den nächsten Wert aus der Liste.
Beende den Vorgang, wenn der letzte Wert der Liste ZAHLEN erreicht ist.
Ist 97 kleiner kzahl, wenn ja, definiere 97 als kzahl, sonst nehme den nächsten Wert aus der Liste.
Beende den Vorgang, wenn der letzte Wert der Liste ZAHLEN erreicht ist.
usw.

Erklärt das, was ich erreichen will?

Peter

Re: Hilfe bei meiner FOR IF Schleife

Verfasst: Sonntag 5. Oktober 2014, 15:39
von Sirius3
@Peter_77: so kann man die kleinste Zahl finden. Und jetzt vergleich das mit dem, was Du programmiert hast.