В этом конкретном контексте просто замените '~' на «нет».
PS. ок, я думаю, мне придется объяснять, - начал получать шлепанье с -1, возможно, в помещении я не знаю разницы между логическим и побитовым отрицанием.
Дело в том, что код в вопросе broken. В нем есть ошибка. Если вы проверите, как Brainfuck должен работать, он будет находиться в пределах [] скобки, в то время как текущая ячейка памяти равна! = 0 (это отмечено как предварительное условие при вводе [ и как оптимизация перед возвратом с ]).
Но вместо того, чтобы спорить, возможно, проще показать примеры того, что код не работает. Возьмем простую программу '[+]'
. Попытка настроить это должна просто выйти (потому что текущая ячейка равна 0, она даже попадает в цикл). Вместо этого, если вы запустите его в этом интерпретаторе, он переходит в бесконечный цикл.
Так я буду прошу Вас вернуть ваш -1 голоса, если мое разъяснение имеет смысл сейчас ;-)
Вот интерпретатор немного украсил с фиксированной ~
ошибки и я также добавил недостающую ,
входа:
from sys import stdin, stdout
bfHelloWorld = '++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.'
# http://esoteric.sange.fi/brainfuck/bf-source/prog/yapi.b
bfPiDigits = '''> +++++ (5 digits)
[<+>>>>>>>>++++++++++<<<<<<<-]>+++++[<+++++++++>-]+>>>>>>+[<<+++[>>[-<]<[>]<-]>>
[>+>]<[<]>]>[[->>>>+<<<<]>>>+++>-]<[<<<<]<<<<<<<<+[->>>>>>>>>>>>[<+[->>>>+<<<<]>
>>>>]<<<<[>>>>>[<<<<+>>>>-]<<<<<-[<<++++++++++>>-]>>>[<<[<+<<+>>>-]<[>+<-]<++<<+
>>>>>>-]<<[-]<<-<[->>+<-[>>>]>[[<+>-]>+>>]<<<<<]>[-]>+<<<-[>>+<<-]<]<<<<+>>>>>>>
>[-]>[<<<+>>>-]<<++++++++++<[->>+<-[>>>]>[[<+>-]>+>>]<<<<<]>[-]>+>[<<+<+>>>-]<<<
<+<+>>[-[-[-[-[-[-[-[-[-<->[-<+<->>]]]]]]]]]]<[+++++[<<<++++++++<++++++++>>>>-]<
<<<+<->>>>[>+<<<+++++++++<->>>-]<<<<<[>>+<<-]+<[->-<]>[>>.<<<<[+.[-]]>>-]>[>>.<<
-]>[-]>[-]>>>[>>[<<<<<<<<+>>>>>>>>-]<<-]]>>[-]<<<[-]<<<<<<<<]++++++++++.
'''
code = bfPiDigits # the code
data = [0] * 255 # data memory
cp = 0 # code pointer
dp = 0 # data pointer
while cp < len(code):
cmd = code[cp]
if cmd == '>': dp += 1
elif cmd == '<': dp -= 1
elif cmd == '+': data[dp] += 1
elif cmd == '-': data[dp] -= 1
elif cmd == '.': stdout.write(chr(data[dp]))
elif cmd == ',': data[dp] = ord(stdin.read(1))
elif cmd == '[' and not data[dp]: # skip loop if ==0
n = 0
while True:
cmd = code[cp]
if cmd == '[': n += 1
elif cmd == ']': n -= 1
if not n: break
cp += 1
elif cmd == ']' and data[dp]: # loop back if !=0
n = 0
while True:
cmd = code[cp]
if cmd == '[': n+=1
elif cmd == ']': n-=1
if not n: break
cp -= 1
cp += 1
Мне смешно, что интерпретатор Python BF имеет такие имена загадочных переменных и записывается с использованием таких нестандартных конструкций Python. Очень в духе BF, но очень не в духе Python. – Omnifarious
i второй - странный стиль кодирования (как если бы он переведен с низкоуровневого языка на python?), Но он работает - проверял его с помощью программы hello-world.btw, не выполняет команду ',' (input) –
@Omnifarious - Если вы пишете в духе Python, вы не будете писать BF-интерпретатор. –