“〜”在python中是什么意思?
我前一段时间在python中找到了这个BF解释器。
import sys #c,i,r,p=0,0,[0]*255,raw_input() c=0 i=0 p=raw_input() r=[0]*255 while c<len(p): m,n,u=p[c],0,r[i] if m==">":i+=1 if m=="<":i-=1 if m=="+":r[i]+=1 if m=="-":r[i]-=1 if m==".":sys.stdout.write(chr(u)) if m=="[": if ~u: while 1: m=p[c] if m=="]":n-=1 if m=="[":n+=1 if ~n:break c+=1 if m=="]": if u: while 1: m=p[c] if m=="]":n-=1 if m=="[":n+=1 if ~n:break c-=1 c+=1
我想知道它的作用,因为我想在ti 84(和PF之一)上做一个
BF是http://en.wikipedia.org/wiki/Brainfuck,PF 是类似的东西
在这种情况下,只需将“〜”替换为“ not”即可。
PS。好吧,我想我将不得不解释-开始被-1打耳光,可能是在我不知道逻辑取反和按位取反之间的区别的前提下。
问题是,问题中的代码已 损坏 。其中有一个错误。如果您检查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