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

Mittwoch 16. Dezember 2020, 15:07

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: 1268
Registriert: Samstag 21. März 2009, 22:59
Wohnort: München

Mittwoch 16. Dezember 2020, 15:45

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

Mittwoch 16. Dezember 2020, 15:52

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: 3198
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

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

Mittwoch 16. Dezember 2020, 15:55

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

Mittwoch 16. Dezember 2020, 15:56

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: 3198
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Mittwoch 16. Dezember 2020, 16:03

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

Mittwoch 16. Dezember 2020, 16:09

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: 214
Registriert: Donnerstag 12. April 2007, 08:36

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

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

Mittwoch 16. Dezember 2020, 19:19

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

Mittwoch 16. Dezember 2020, 19:20

/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: 3436
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Mittwoch 16. Dezember 2020, 20:10

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: 14826
Registriert: Sonntag 21. Oktober 2012, 17:20

Mittwoch 16. Dezember 2020, 20:18

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

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
Alles was wir sind ist Sand im Wind Hoschi.
Antworten