Итак, я пытаюсь сделать интерпретатор Brainfuck, однако в цикле while, который я использую для выполнения цикла Brainfuck, он вырывается, хотя только одно условие правда.Петля останавливается, хотя истинно только одна из двух переменных
Пример:
+++[>+<-]
должно привести к:
[0, 3]
Однако, когда цикл начинается в [
, она будет создавать новую ячейку, так что структура идет от [3]
к [3, 0]
. Таким образом, текущая рабочая ячейка составляет 0
, и цикл выходит из строя. Тем не менее, у меня есть только разрыв, если он равен 0
, а текущий символ - ]
.
cells = [0] # Array of data cells in use
brainfuck = str(input("Input Brainfuck Code: ")) # Brainfuck code
workingCell = 0 # Data pointer position
count = 0 # Current position in code
def commands(command):
global cells
global workingCell
if command == ">":
workingCell += 1
if workingCell > len(cells) - 1:
cells.append(0)
elif command == "<":
workingCell -= 1
elif command == "+":
cells[workingCell] += 1
elif command == "-":
cells[workingCell] -= 1
elif command == ".":
print(chr(cells[workingCell]))
elif command == ",":
cells[workingCell] = int(input("Input: "))
def looper(count):
global cells
global workingCell
print("START LOOP", count)
count += 1
looper = loopStart = count
while brainfuck[looper] != "]" and cells[workingCell] != 0: # This line is causing trouble
if brainfuck[looper] == "]":
looper = loopStart
commands(brainfuck[looper])
count += 1
looper += 1
return count
while count < len(brainfuck):
if brainfuck[count] == "[":
count = looper(count)
print("END LOOP", count)
else:
commands(brainfuck[count])
count += 1
Заранее спасибо.
Какова логика '+++ [> + <-]' ->' [0, 3] '? –
* «Извините за все утверждения печати» * - нет, это часть вашей работы, чтобы уменьшить код до [mcve], а не просто сбрасывать его на нас как есть. – jonrsharpe
Вы используете одно и то же имя для функции и переменной?!? –