Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python for循环运行不正常?_Python_Python 3.x_For Loop - Fatal编程技术网

Python for循环运行不正常?

Python for循环运行不正常?,python,python-3.x,for-loop,Python,Python 3.x,For Loop,我最近开始接触python,在我自己编写的一个程序中遇到了这个奇怪的错误 该程序根据名为all\u object\u info的列表生成字母网格,其中存储了更多的列表,告诉名为make\u line()的函数如何操作。这些子列表包含3个条目:第一个索引用于x值,第二个索引用于y值,第三个索引用于输入字母make\u line() “make_line()”函数接受一个参数来表示它代表的y值,然后它循环通过由num_of_xrows定义的x值的数量,如果没有具有当前启用的相同x和y值的对象,则向l

我最近开始接触python,在我自己编写的一个程序中遇到了这个奇怪的错误

该程序根据名为
all\u object\u info
的列表生成字母网格,其中存储了更多的列表,告诉名为
make\u line()
的函数如何操作。这些子列表包含3个条目:第一个索引用于x值,第二个索引用于y值,第三个索引用于输入字母
make\u line()

“make_line()”函数接受一个参数来表示它代表的y值,然后它循环通过由
num_of_xrows
定义的x值的数量,如果没有具有当前启用的相同x和y值的对象,则向
line
变量添加一个
empty
(也由变量定义)字母,如果值匹配,则添加对象的第三个索引

我遇到的问题是,函数中的
for
出于任何原因跳过,并最终将
空的
放置在应该有对象的位置,这似乎只发生在两个对象并排放置时,而右侧的对象没有“渲染”时

因此:

当它打算生产:

░░░░░░░░░░░
░░░░░░░░░░░
░BB░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
奇怪的是,将
all\u object\u info
中的值切换为:
[[1,2,“B”],[2,2,“B”]
来自
[[2,2,“B”],[1,2,“B”]
使其产生预期的结果:

░░░░░░░░░░░
░░░░░░░░░░░
░BB░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░

我非常确定该程序唯一的错误是
make_line()
函数,因为我已经用python可视化工具对它进行了无数次的检查,以发现
for
循环在没有意义的情况下跳过了
x
,当在for循环中执行
x+=1
两次时,您将跳过
x
。 也许你可以试试这个:

def make_line(row):
    x=0
    line=""
    while x <= num_of_xrows:
        is_found =False
        for obj in all_object_info:
            if x == obj[0] and row == obj[1]:
                line += obj[2]
                is_found = True
        if not is_found:
            line += empty
        x += 1
    return line
def make_line(row):
    x=0
    y=row
    line=""

    while x <= num_of_xrows:
        for obj in all_object_info:
            if x == obj[0] and row == obj[1]:
                line += obj[2]
                break
        else: # That is, if we didn't hit a break.
            if x <= num_of_xrows:
                line += empty
        x += 1
    return line
def make_行(行):
x=0
line=“”

当x在
make_line
中时,您可以在
while
循环的单个迭代中将
x
增加2

也就是说,看看当
x
为1时会发生什么。您将在
行中添加一个
'B'
,然后将
x
增加到2。由于
all\u object\u info
的元素顺序不正确,因此在本次迭代中,您不会再次检查其他对象

然后,将
x
num\u of xrows
进行比较,后者为10。由于
x
是2,如果执行
块,则
空的
将添加到
,并且
x
增加到3

因此,您可以跳过
'B'
,当
x
为2时,应该添加该属性

相反,请尝试以下方法:

def make_line(row):
    x=0
    line=""
    while x <= num_of_xrows:
        is_found =False
        for obj in all_object_info:
            if x == obj[0] and row == obj[1]:
                line += obj[2]
                is_found = True
        if not is_found:
            line += empty
        x += 1
    return line
def make_line(row):
    x=0
    y=row
    line=""

    while x <= num_of_xrows:
        for obj in all_object_info:
            if x == obj[0] and row == obj[1]:
                line += obj[2]
                break
        else: # That is, if we didn't hit a break.
            if x <= num_of_xrows:
                line += empty
        x += 1
    return line
def make_行(行):
x=0
y=行
line=“”
而x