python - 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
循环在不应该跳过时跳过
解决方案
当您在 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
推荐阅读
- python - Python/Numpy/布尔索引:在具有 N 个连续真值的位置修改布尔数组
- twilio - 使用从 Call 收集的数字作为 Twilio 函数的参数或环境变量的值
- arrays - Swift,如何反转数组中的特定元素?
- nuxt.js - Sentry.io:需要 Cookie 通知?
- html - 为什么我的 Bootstrap 下拉菜单不显示?
- mysql - 如何从 SQL 表中列出 3 个最大的数字?
- ms-access - 如何将击键发送到访问表中的开放字段?
- visual-studio - Visual Studio 可以对源代码中的 XML 字符串执行静态分析吗?
- java - mapstruct 将方法应用于列表中的所有对象
- javascript - 使用 CSP 从 analytics.js 迁移到 gtag.js