Seite 1 von 1
For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 15:07
von ae123
Liste1 = [0,1,2,3]
for i in range (17):
Liste1.append(Liste1[i+1]+Liste1[i+3])
if i<[1000]:
break
print(Liste1)
Problem: Ich kriege es nicht hin die Liste zu stoppen sobald die Einträge größer als 1000 werden.
Ich würde mich über schnelle Hilfe freuen

Re: For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 15:45
von pillmuncher
Warum steht da [1000] und nicht einfach 1000?
Re: For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 15:52
von ae123
pillmuncher hat geschrieben: Mittwoch 16. Dezember 2020, 15:45
Warum steht da [1000] und nicht einfach 1000?
Die kann man auch weglassen und es funktioniert trotzdem nicht

Re: For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 15:53
von noisefloor
Hallo,
der Code läuft so doch gar nicht, weil man einen Integer nicht mit einer Liste vergleichen kann.
... und überleg' auch mal, wenn der Vergleich korrigiert ist, welchen Wert i bei dir maximalen annehmen kann.
Gruß, noisefloor
Re: For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 15:55
von peterpy
Hallo ae123,
Du hast eine Liste mit 4 Einträgen.
Dann fügst Du dieser Liste 17 Einträge hinzu, ergibt 21 Einträge.
Dann fräst Du i ab. i kann höchstens den Wert 16 annehmen (Werte 0 bis 16)
Du musst den Wert in der List abfragen, also liste[i+4] und den mit dem Wert 1000 vergleichen, nicht mit einer andern Liste, welche den Wert 1000 drin hat.
Und wenn dein Wert nicht über 1000 sein darf, musst Du das "grösser als" Zeichen verwenden.
Bitte setze deinen Code zwischen die Code Tags </>, dann ist der Code mit deinen Einrückungen für uns lesbar.
Variablen werden klein mit Unterstrich geschrieben. Also liste_1, wobei liste_1 ein schlechter Name ist, da findest Du sicher einen besseren Namen.
Gruss Peter
Re: For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 15:56
von ae123
noisefloor hat geschrieben: Mittwoch 16. Dezember 2020, 15:53
Hallo,
der Code läuft so doch gar nicht, weil man einen Integer nicht mit einer Liste vergleichen kann.
... und überleg' auch mal, wenn der Vergleich korrigiert ist, welchen Wert i bei dir maximalen annehmen kann.
Gruß, noisefloor
Ich versteh nicht ganz was du damit meinst.
Was kann kann ich denn ändern damit es funktioniert?
Re: For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 16:03
von noisefloor
Hallo,
der Vergleich gibt einen TypeError, d.h. dein Programm läuft gar nicht.
Code: Alles auswählen
>>> i = 2
>>> i<[1000]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'int' and 'list'
>>>
Aber selbst, wenn du `if i<1000` schreiben würdest, was ein korrekter Vergleich ist - welche Wert kann i bei dir annehmen? Macht der Vergleich bei deinem gezeigten Code Sinn?
Und poste den Code bitte in einem Codeblock, damit man die Einrückungen sieht. Den Codeblock bekommst du, indem du den vollständigen Editor für das Eingabefeld hier im Forum öffnest und dann auf </> klickst.
Gruß, noisefloor
Re: For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 16:09
von ae123
Code: Alles auswählen
liste_1 = [0,1,2,3]
for i in range (17):
liste_1.append(liste_1[i+1]+liste_1[i+3])
if i<1000:
break
print(liste_1)
Jetzt nochmal als Codeblock

Re: For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 16:15
von Zizibee
ae123 hat geschrieben: Mittwoch 16. Dezember 2020, 15:07
Problem: Ich kriege es nicht hin die Liste zu stoppen sobald die Einträge größer als 1000 werden.
Willst du die Schleife stoppen, wenn der eingetragene Wert in der Liste größer 1000 ist oder wenn du mehr als 1000 Einträge drin hast?
Re: For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 16:16
von /me
Mal abgesehen von der defekten Einrückung: die Schleife würde doch sofort abbrechen, da i im ersten Durchlauf 0 ist. Kann es sein, dass du eigentlich mit dem letzten zur Liste hinzugefügten Wert vergleichen möchtest und auch eigentlich prüfen willst, ob der Wert größer ist?
Re: For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 19:19
von ae123
Zizibee hat geschrieben: Mittwoch 16. Dezember 2020, 16:15
ae123 hat geschrieben: Mittwoch 16. Dezember 2020, 15:07
Problem: Ich kriege es nicht hin die Liste zu stoppen sobald die Einträge größer als 1000 werden.
Willst du die Schleife stoppen, wenn der eingetragene Wert in der Liste größer 1000 ist oder wenn du mehr als 1000 Einträge drin hast?
Ich möchte die Schleife stoppen wenn der letzte Wert in liste_1 größer 1000 ist.
Re: For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 19:20
von ae123
/me hat geschrieben: Mittwoch 16. Dezember 2020, 16:16
Mal abgesehen von der defekten Einrückung: die Schleife würde doch sofort abbrechen, da i im ersten Durchlauf 0 ist. Kann es sein, dass du eigentlich mit dem letzten zur Liste hinzugefügten Wert vergleichen möchtest und auch eigentlich prüfen willst, ob der Wert größer ist?
Ja genau dass will ich machen. Entschuldigung wenn ich das falsch formuliert habe.
Kannst du mir helfen wie man das macht?
Re: For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 20:10
von /me
In dem Fall möchtest du keine for-Schleife, da du damit die Anzahl der dir unbekannten Menge an Durchläufen limitierst. Man verwendet dafür eine Endlosschleife die man mit `break` verlässt, sobald eine bestimmte Bedingung eingetreten ist. Ein einfacher Aufbau könnte wie folgt aussehen:
Code: Alles auswählen
data = [0, 1, 2, 3]
i = 1
while True:
next_value = data[i] + data[i + 2]
# hier gehört jetzt noch sinnvoller Code hin (ich überlasse das dem Leser)
i += 1
Anmerkung: ja, ich weiß dass man auch `for i in itertools.count(1)` verwenden könnte.
Re: For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 20:18
von Sirius3
@ae123: weißt Du, wie man auf das letzte Element einer Liste zugreift? Da hilft ein negativer Index -1.
Re: For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 20:20
von hyle
Anhand der Vorlage dann so:
Code: Alles auswählen
liste_1 = [0,1,2,3]
for i in range (17):
liste_1.append(liste_1[i+1]+liste_1[i+3])
if liste_1[-1] > 1000:
break
print(liste_1)
Noch ein paar kleine Anmerkungen...
Einrückungen werden mit 4 Leerzeichen gemacht, nicht mit Tabs.
Die Abfrage war falsch eingerückt.
Und dann übrigens noch das falsche Zeichen:
https://de.wikipedia.org/wiki/Vergleichszeichen
Re: For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 20:40
von __blackjack__
@/me: Du hast da jetzt einen Index um 1 verschoben. Im Original war das noch ``i + 3``. Und ich frage mich, ob man überhaupt ein ``i`` benötigt, denn man könnte hier auch konstant -3 und -1 als Indexwerte in jedem Schritt verwenden, falls `data` am Anfang garantiert vier Elemente hat.
Re: For Schleife Stoppen
Verfasst: Mittwoch 16. Dezember 2020, 21:05
von Sirius3
Um es kurz zu machen:
Code: Alles auswählen
numbers = [0, 1, 2, 3]
while numbers[-1] < 1000:
numbers.append(numbers[-3] + numbers[-1])
Re: For Schleife Stoppen
Verfasst: Donnerstag 17. Dezember 2020, 10:41
von ae123
hyle hat geschrieben: Mittwoch 16. Dezember 2020, 20:20
Anhand der Vorlage dann so:
Code: Alles auswählen
liste_1 = [0,1,2,3]
for i in range (17):
liste_1.append(liste_1[i+1]+liste_1[i+3])
if liste_1[-1] > 1000:
break
print(liste_1)
Noch ein paar kleine Anmerkungen...
Einrückungen werden mit 4 Leerzeichen gemacht, nicht mit Tabs.
Die Abfrage war falsch eingerückt.
Und dann übrigens noch das falsche Zeichen:
https://de.wikipedia.org/wiki/Vergleichszeichen
Vielen Dank für deine Hilfe und die Anmerkung mit dem einrücken
