Listenwerte in while schleifen iterierend verändern

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
radioheadphone
User
Beiträge: 2
Registriert: Donnerstag 17. September 2020, 13:49

Hallo,

ich bin python Neuling und konnte mir bislang schon einige Tipps aus dem Forum holen. Vielen herzlichen Dank erstmal dafür!

Jetzt komme ich jedoch auch nach Stundenlangem ausprobieren und nach etlicher Recherche einfach nicht weiter und hoffe auf Hilfe.

Meine Aufgabe: Ich möchte eine einfache Liste mit integern 10 Mal hintereinander mit einer while Schleife ausgeben. Die einzelnen Werte der Liste sollen sich dabei jeweils verdoppeln. Mein Ansatz ist folgender:

liste = [12, 22, 44, 66, 55, 100]

i=1
p=0
n=2

print(liste)

while i<10:

while p<len(liste):
liste[p]=liste[p]*n
p+=1

print(liste)

n=n**2
i+=1

Jedoch wird n nach der ersten Iteration der Schleife nicht wie gewollt potenziert und folglich wird die Liste bei den darauffolgenden Ausgaben nicht verdoppelt.

Frage: Wieso greift das n in den Iterationen der While Schleife nicht auf die neuen n Werte zu?
Wie lässt sich die Aufgabe abbilden?

Ich bedanke mich schon jetzt für Euren Support bei der vermutlich sehr trivialen Frage. Über eine Antwort würde ich mich freuen.
LG Max
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Setz deinen Code in Code-Tags, bitte. Sonst geht die Einrückung verloren. Die Code-Tags erscheinen, wenn du in "Vollständiger Editor & Vorschau" den </> Button drückst. Dazwischen gehört dein Code.

Rücke deinen Code mit 4 Leerzeichen pro Ebene ein. Nicht mit Tabs.

Du benutzt da einige Anti-Pattern, die man so in Python nicht verwendet.
Statt einer äußeren while-Schleife benutzt du eine for-Schleife mit range. Damit sparst du dir die Variable i.
Statt über den Index, verwendest du als innere Schleife auch eine for-Schleife über die Elemente. Oder, noch besser, du verwendes eine List-Comprehension.
Man verändert in Python nicht die Liste, über die man iteriert, sondern man generiert eine neue.

Warum willst du denn mit 2 potenzieren? In deinem Text steht, dass du die Werte verdoppeln möchtest.

Code: Alles auswählen

values = [12, 22, 44, 66, 55, 100]

for _ in range(10):
    print(values)
    values = [value * 2 for value in values]
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn man die Liste nicht immer verändern will, kann man die Zahlen auch direkt ausrechnen:

Code: Alles auswählen

values = [12, 22, 44, 66, 55, 100]
for i in range(10):
    print([value * 2**i for value in values])
radioheadphone
User
Beiträge: 2
Registriert: Donnerstag 17. September 2020, 13:49

Vielen Dank für die schnelle Antwort und die Lösung. Das hilft mir auf jeden Fall weiter.
Antworten