1 ... 1 1
1 ... 1 2
1 ... 1 3
1 ... 1 4
1 ... 2 1
1 ... 2 2
.
.
.
Fuer jede "Position" beginnt das Zaehlen bei "1" und es gibt einen "Maximalwert", bis zu dem jeweils hochgezaehlt werden soll; fuer die letzte Position ist das im Beispiel "4".
Nun habe ich mir ein Programm zurechtgestrickt, was das im Prinzip auch ausgibt - nur habe ich mir da auch eine Schleife gebastelt, aus der ich nicht mehr hinauskomme.
Zum Programm: "evaluate" und "endstep" enthalten derzeit nur jeweils eine print-Anweisung, die spaeter noch durch andere Befehle ersetzt werden. Auch "anz" und "ber" sind derzeit nur aus Bequemlichkeit fest; spaeter sollen sie per "raw_input" geholt werden.
Code: Alles auswählen
def evaluate():
print "evaluate: ", calclis
def endstep():
print "endstep"
def calc(pz):
if done == "nein":
for i in range(0,grolis[pz]):
i = i+1
calclis[pz] = i
if i < grolis[pz]:
evaluate()
elif i == grolis[pz]:
evaluate()
counton(pz)
else:
print "Das darf nicht passieren!"
else:
print "Genug!"
def counton(pz):
# if done == "nein":
pz = pz - 1
if calclis[pz] < grolis[pz]:
calclis[pz] = calclis[pz] + 1
else:
if pz >= 0:
counton(pz)
else:
done = "ja"
endstep()
ipz = anz + 1 - pz
while ipz < anz:
calclis[ipz] = 1
ipz = ipz + 1
calc(ipz-1)
# else:
# print "Das wars..."
#
#
#
# Hier beginnt das eigentliche Programm:
anz= 4
ber = 4
done = "nein"
grolis=[]
a = 0
while a < anz:
grolis.append(ber)
a = a + 1
calclis = [1] * anz
pz = len(grolis) - 1
if done == "nein":
calc(pz)
elif done == "ja":
print "Programm beendet"
else:
print "Wie konnte das passieren?"
Code: Alles auswählen
>>>
evaluate: [1, 1, 1, 1]
evaluate: [1, 1, 1, 2]
evaluate: [1, 1, 1, 3]
evaluate: [1, 1, 1, 4]
evaluate: [1, 1, 2, 1]
evaluate: [1, 1, 2, 2]
evaluate: [1, 1, 2, 3]
evaluate: [1, 1, 2, 4]
evaluate: [1, 1, 3, 1]
evaluate: [1, 1, 3, 2]
evaluate: [1, 1, 3, 3]
evaluate: [1, 1, 3, 4]
evaluate: [1, 1, 4, 1]
evaluate: [1, 1, 4, 2]
evaluate: [1, 1, 4, 3]
evaluate: [1, 1, 4, 4]
evaluate: [1, 2, 4, 1]
evaluate: [1, 2, 4, 2]
evaluate: [1, 2, 4, 3]
evaluate: [1, 2, 4, 4]
evaluate: [1, 3, 4, 1]
evaluate: [1, 3, 4, 2]
evaluate: [1, 3, 4, 3]
evaluate: [1, 3, 4, 4]
evaluate: [1, 4, 4, 1]
evaluate: [1, 4, 4, 2]
evaluate: [1, 4, 4, 3]
evaluate: [1, 4, 4, 4]
evaluate: [2, 4, 4, 1]
evaluate: [2, 4, 4, 2]
evaluate: [2, 4, 4, 3]
evaluate: [2, 4, 4, 4]
evaluate: [3, 4, 4, 1]
evaluate: [3, 4, 4, 2]
evaluate: [3, 4, 4, 3]
evaluate: [3, 4, 4, 4]
evaluate: [4, 4, 4, 1]
evaluate: [4, 4, 4, 2]
evaluate: [4, 4, 4, 3]
evaluate: [4, 4, 4, 4]
endstep
evaluate: [4, 4, 4, 1]
evaluate: [4, 4, 4, 2]
evaluate: [4, 4, 4, 3]
evaluate: [4, 4, 4, 4]
endstep
evaluate: [4, 4, 4, 1]...
Erstens stimmt da nochwas nicht, weil in dem Moment, wo die erste Position auf "2" umspringt, Position 2 und 3 nicht auf "1" zurueckgesetzt werden. Aber was mir im Moment mehr Kummer macht, ist, dass nach dem "endstep" das Programm weiter in der Berechnung feststeckt.
Ich habe versucht, das durch die "done"-Variable zu beenden, aber wenn ich die "#" in Zeile 24, 39 und 40 wegnehme, bekomme ich die Fehlermeldung:
Insofern zwei Fragen:File "C:/Program Files/Python24/Lib/Programmversuche/Trockentest06d2.py", line 24, in counton
if done == "nein":
UnboundLocalError: local variable 'done' referenced before assignment
1.) Geht das alles auch viel einfacher, und ich habe nur nicht herausbekommen, wie?
2.) Wenn nein: Wie komme ich aus meiner selbstgebauten Falle wieder heraus?
Mit bestem Dank fuer alle Hilfe schon im Voraus,
Merlin Emrys