首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python Brainf*- Bugs on while循环

Python Brainf*- Bugs on while循环
EN

Stack Overflow用户
提问于 2017-01-13 21:09:46
回答 1查看 181关注 0票数 5

我是python的初学者,为了加强我的技能,我正在(尝试)为Brainfu**语言编写一个编译器。除了括号[]循环之外,一切都很好。我用来测试代码的程序是>++[>++<-]>+,它应该将单元格2设置为5。但是,当我运行它时,它会这样做:

代码语言:javascript
复制
0 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 0 >
1 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 1 +
2 [0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 2 +
3 [0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 2 [
4 [0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 0 >
5 [0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 1 +
6 [0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 2 +
7 [0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 2 <
8 [0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 1 -
3 [0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 1 [
10 [0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 2 >
11 [0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 3 +
[0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

(在迭代中格式化各行,然后是此时的列表,然后是它所关注的值,然后是它运行的字符。)

我当前的代码是

代码语言:javascript
复制
def generateArray(code):
    array = []
    for i in range(0,20):
        array.append(0);
    return array

def run(code):
    print code
    data = generateArray(code)
    chars = list(code)
    pointer = 0

    for i in range(0, len(chars)):
        current = chars[i]
        if(current == "+"):
            data[pointer] += 1

        if(current == ">"):
            pointer += 1

        if(current == "-"):
            data[pointer] -= 1

        if(current == "<"):
            pointer -= 1

        if(current == "."):
            print str(chr(data[pointer]))

        if(current == ","):
            given = raw_input()
            data[pointer] = ord( given )

        if(current == "["):
            posOfEnd = chars[i:len(chars)].index("]")
            if(data[pointer] == 0):
                i += posOfEnd+1

        if(current == "]"):
            posOfBegin = len(chars) - 1 - chars[::-1].index('[')
            i = posOfBegin



        print i, data, data[pointer], chars[i]

    return data

print run(">++[>++<-]>+")

posOfEnd正在试图找出下一个括号在哪里,而posOfBegin正在试图找出前一个括号在哪里。

EN

回答 1

Stack Overflow用户

发布于 2017-01-13 21:24:34

我认为问题出在您的循环变量i,您在循环期间修改了该变量:

代码语言:javascript
复制
i += posOfEnd+1

代码语言:javascript
复制
i = posOfBegin

然而,python for循环不同于它们的C/C++对应物。在python中,变量i将被设置为您提供的迭代器的每个元素,在本例中为rangerange(n)的计算结果是一个包含从0n-1的所有数字的列表。如果您在迭代期间修改了循环变量,则此修改仅适用于该迭代,但对于下一次迭代,将为循环变量分配可迭代的下一个元素(不保留您的修改)。

您可能希望改用while循环。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41635379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档