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
For Schleife Stoppen
- 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.
Die kann man auch weglassen und es funktioniert trotzdem nichtpillmuncher hat geschrieben: ↑Mittwoch 16. Dezember 2020, 15:45 Warum steht da [1000] und nicht einfach 1000?
- noisefloor
- User
- Beiträge: 3858
- 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
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
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
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
Ich versteh nicht ganz was du damit meinst.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
Was kann kann ich denn ändern damit es funktioniert?
- noisefloor
- User
- Beiträge: 3858
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
der Vergleich gibt einen TypeError, d.h. dein Programm läuft gar nicht.
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
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'
>>>
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
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
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./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?
Kannst du mir helfen wie man das macht?
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:
Anmerkung: ja, ich weiß dass man auch `for i in itertools.count(1)` verwenden könnte.
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.
Anhand der Vorlage dann so:
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
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)
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.
- __blackjack__
- User
- Beiträge: 13124
- 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
Um es kurz zu machen:
Code: Alles auswählen
numbers = [0, 1, 2, 3]
while numbers[-1] < 1000:
numbers.append(numbers[-3] + numbers[-1])
Vielen Dank für deine Hilfe und die Anmerkung mit dem einrückenhyle hat geschrieben: ↑Mittwoch 16. Dezember 2020, 20:20 Anhand der Vorlage dann so:Noch ein paar kleine Anmerkungen...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)
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