首页 > 解决方案 > for 循环不能正常工作?

问题描述

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

该程序根据名为 的列表创建一个字母网格all_object_info,其中存储更多列表,告诉名为make_line()“做什么”的函数。这些子列表包含 3 个条目:第一个索引用于 x 值,第二个用于 y,第三个用于放置什么字母make_line()

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

我遇到的问题是,无论for出于何种原因,函数中的函数都会跳过并最终放置一个empty应该是一个对象的地方,这似乎只发生在两个对象并排在一起时右边的那个没有“渲染”。

因此:

empty = "░"
num_of_yrows = 10
num_of_xrows = 10

all_object_info = [[2,2,"B"],[1,2,"B"]]


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]
                x += 1
        if x <= num_of_xrows:
            line += empty
            x += 1
    return line


def make_grid():
    grid = ""
    num = 0
    while  num <= num_of_yrows:
        grid += make_line(num)+"\n"
        num += 1
    print(grid)

make_grid()

会产生:

░░░░░░░░░░░
░░░░░░░░░░░
░B░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░
░░░░░░░░░░░

当它打算产生时:

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

奇怪的是,将值切换all_object_info为: [[1,2,"B"],[2,2,"B"]]from[[2,2,"B"],[1,2,"B"]] 会产生预期的结果:

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

我很确定程序唯一的问题是make_line()函数,因为我已经用 python 可视化器无数次查看它,看到for循环在不应该跳过时跳过

标签: pythonpython-3.xfor-loop

解决方案


当您在 for 循环中x执行两次时,您将跳过。x += 1也许你可以试试这个:

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

推荐阅读