Python for循环运行不正常?
我最近开始接触python,在我自己编写的一个程序中遇到了这个奇怪的错误 该程序根据名为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
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