命令没有在翻译工作我疯了

2024-06-16 10:52:19 发布

您现在位置:Python中文网/ 问答频道 /正文

(请容忍我,我的代码太草率了,可能有点难以理解,主要是因为所有的变量,global和if语句…)

我创建了一个解释性的、深奥的、基于磁带的编程语言,它是为代号为Tellurium(仅供参考)的高尔夫而设计的。到目前为止,除了条件语句外,它一直运行得很好。你知道吗

以下是条件语句的语法:

(integer[code]

下面是Python的等价物:

if tape[selectedCell] == integer: code

所以,我的问题是,在一段代码中只能使用一次语句。多用一次就不行了。它甚至不会抛出错误。它什么也不做。你知道吗


下面是一些不起作用的命令示例,以及它们应该输出的内容。你知道吗

(0[^](1[^]+(1[^]应该输出0后跟1。相反,只输出0。我认为这与first(1[^]有关,解释器应该跳过它,因为所选单元格的值不是1。你知道吗

下面是另一个例子:+++++(0[^](5[^]。单元格的值增加到5。然后,(0[^]检查单元格的值是否等于零。其实不是,所以应该跳过。接下来,(5[^]检查单元格的值是否等于5。是的,它应该输出5。相反,它输出5\n5。你知道吗

还有一个例子:(0[^](1[^](0[^]。解释程序应该完全忽略(1[^]指令,因为单元格的值不是1。还是零。因此,所需的输出应该是0\n0,因为有两个0[^]命令。你知道吗

(0[^]工作正常。它输出单元格的值,即0。你知道吗

我认为问题与应该跳过的语句有关,比如例2中的(1[^]


我不知道为什么这样不行,我试过了,我知道。我很感激你的帮助,我真的很想让这门语言重新流行起来!你知道吗


所以,这里的解释器没有所有额外的命令。你知道吗

tape = [0] * 25500
readingNum = False
readingIf = False
num = []
code = []
selectedCell = 0

def prompt():
    userInput = input("> ")
    return userInput

def read(cmd):
    length = len(cmd)
    commands = list(cmd)
    for i in range(0, length):
        parse(commands[i])

def parse(cmd):
    global tape
    global readingNum
    global readingIf
    global num
    global code
    global selectedCell

    if readingNum == True:
        if cmd == "[":
            readingNum = False
            readingIf = True

        else:               
            num.append(cmd)

    elif readingIf == True:
        if cmd == "]":
            readingIf = False
            if tape[selectedCell] == int(''.join(num)):
                read(code)
                code = []
                num = []

            else:
                return

        else:
            code.append(cmd)

    elif cmd == "^":
        print(tape[selectedCell])

    elif cmd == "+":
        tape[selectedCell] += 1

    elif cmd == "(":
        readingNum = True

    else:
        print("Error")

while 1:
    read(prompt())

Tags: 命令cmdfalsetrueifcode语句global
1条回答
网友
1楼 · 发布于 2024-06-16 10:52:19

这不起作用,因为你使用的是globals。当您为第三个if语句点击if tape[selectedCell] == int(''.join(num)):时,nums包含['1', '1'],因为两个if语句都向num添加了一个1,所以当您点击int(''.join(num))时,最终得到的11不等于1。你知道吗

您需要重构此代码以停止使用全局变量。有关如何不使用globals表示堆栈的工作示例,请查看esolang I wrote a couple months back。它没有我想要的那么完美,但是它有一个没有globals的工作堆栈。你知道吗

相关问题 更多 >