For Schleife Stoppen

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
ae123
User
Beiträge: 7
Registriert: Mittwoch 16. Dezember 2020, 14:57

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 :D
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Warum steht da [1000] und nicht einfach 1000?
In specifications, Murphy's Law supersedes Ohm's.
ae123
User
Beiträge: 7
Registriert: Mittwoch 16. Dezember 2020, 14:57

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 :(
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

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
ae123
User
Beiträge: 7
Registriert: Mittwoch 16. Dezember 2020, 14:57

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?
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
ae123
User
Beiträge: 7
Registriert: Mittwoch 16. Dezember 2020, 14:57

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 :)
Zizibee
User
Beiträge: 229
Registriert: Donnerstag 12. April 2007, 08:36

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?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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?
ae123
User
Beiträge: 7
Registriert: Mittwoch 16. Dezember 2020, 14:57

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.
ae123
User
Beiträge: 7
Registriert: Mittwoch 16. Dezember 2020, 14:57

/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?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@ae123: weißt Du, wie man auf das letzte Element einer Liste zugreift? Da hilft ein negativer Index -1.
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

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
Alles was wir sind ist Sand im Wind Hoschi.
Benutzeravatar
__blackjack__
User
Beiträge: 13067
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@/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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Um es kurz zu machen:

Code: Alles auswählen

numbers = [0, 1, 2, 3]
while numbers[-1] < 1000:
    numbers.append(numbers[-3] + numbers[-1])
ae123
User
Beiträge: 7
Registriert: Mittwoch 16. Dezember 2020, 14:57

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 ;)
Antworten