Python: Bestimmte Stellen im Array ändern HOW ???


#1
Hallo Community,

ich habe ein kleines Problem, und zwar soll ich ein Programm schreiben was Zustände darstellt.
Erster Schritt: Es gibt 150 Kerzen, alle sind am Anfang an spricht (1)
Zweiter Schritt: Danach geht jede zweite Kerze aus.
Dritter Schritt: Danach soll jede dritte Kerze angehen.
Vierter Schritt: Danach soll jede vierte Kerze ausgehen.


Problem bei der Sache ist, als ich es versucht habe den Zweiten Schritt zu demonstrieren, hatte ich auf einmal 300 Zeichen statt 150.

Python:
türen = []

for z in range (150):
    türen.append(1)
    if z+1 % 2 != 0:
        türen.append(0)
        #if z+2 %2 != 0:
           #türen.append(1)
           #if z+3 %2 != 0:
               #türen.append(0)
        
print(türen)
 

Technipion

Erfahrenes Mitglied
#2
Hallo DerTrojaner,
wenn man den Python-Code mal schnell als Pseudocode hinschreibt, wird der Fehler denke ich ersichtlich:
Code:
türen = leere_liste

für z im bereich von 0 bis 149:
    hänge 1 an türen an
    wenn z + 1 nicht gleich 0 ist: (= immer)
        hänge 0 an türen an
Der Modulo-Operator hat eine höhere Priorität als das Pluszeichen, deswegen wird if z+1 % 2 != 0 zu if z + 1 != 0 ausgewertet, was wegen z >= 0 immer wahr ist. Also hängst du quasi 150 mal abwechselnd eine 1 und dann eine 0 an die Liste an (macht 300 Einträge).

Mein Vorschlag:
Lege dir zunächst einfach mal eine Liste mit 150 Elementen an:
Python:
kerzen = [1 for i in range(150)]
# kerzen enthält jetzt 150 Einsen
Jetzt kannst du die Operationen durchführen. Z.B. jede zweite Kerze ausgehen lassen:
Python:
# Variante 1:
for i in range(150):
    if i % 2 == 0: # i ist gerade
        kerzen[i] = 0 # setze i-te Kerze auf aus

# Variante 2:
counter = 1 # zähler sei 1
for i in range(len(kerzen)):
    counter += 1 # zähle ein element hoch
    if counter == 2: # wir haben 2 elemente gezählt
        kerzen[i] = 0 # also lass die kerze ausgehen
        counter = 0 # und setze den zähler zurück
Schaffst du es damit auch den dritten und vierten Schritt zu implementieren?

Gruß Technipion