Ich hatte schon ein oder 2 Denkfehler die mich viel Zeit gekostet haben, bis ich endlich mal drauf gekommen bin, worauf ich nicht geachtet hab ... Aber das hier übersteigt meine Fähigkeiten oO
Die Variable i ist immer int, bis dann plötzlich mal ein TypeError auftritt, der mir sagt, dass ``i += 1`` ungütlig ist, da i vom Typ NoneType ist.
Ich poste jetzt nur mal den wichtigsten Teil:
Code: Alles auswählen
def loop_begin(self, i):
if self.array[self.pointer] == 0:
x = 1
for i in xrange(len(self.code)):
if self.code[i] == "[":
x += 1
if self.code[i] == "]":
x -= 1
if x == 0:
return i
else:
self.tmp.append(i)
return i
def loop_end(self, i):
if self.array[self.pointer] == 0:
self.tmp.pop()
return i
else:
x = self.tmp.pop()
self.tmp.append(x)
return x
def run(self):
output = ""
i = 0
while i < len(self.code):
if self.code[i] == "+":
self.increase_field()
[...]
elif self.code[i] == "[":
i = self.loop_begin(i) #HIER
elif self.code[i] == "]":
i = self.loop_end(i)
i += 1
print output
x = Brainfuck()
x.code = ",->,>+>>+<<<[>>>[<<<<+>>>>-]<<[-]<<[>>+<<-[>>>>+<<<<-]]>-]>[++++++.[-]]"
x.run()
Kann ich aber, wenn's funktioniert auch mal reinstellen, um mich anmeckern zu lassen
Wenn der Code an manchen Stellen etwas komplizierter geschrieben ist, als nötig, dann tut's mir leid
Jedenfalls hab ich durch einsetzen von ``print`` an allen möglichen Stellen herausgefunden, wo genau das Problem liegt.
Unmittelbar, nachdem in der Methode ``self.run()`` die Zeile ``i = self.loop_begin(i)`` ausgeführt wird (im Code mit einem Kommentar geschildert, damit ihr's direkt findet), scheint i = NoneType zurückgegeben zu werden.
Innerhalb der Methode passiert scheinbar nichts mehr, denn ein ``print`` vor jedem return erzielt keinen Effekt.
Direkt danach hat i den Typ NoneType ...
Woran liegt das?
Ich versteh das nicht ...
Danke schonmal für eure Hilfe