我是一个完整的Python新手,我的任务是创建一个函数,将图标绘制成龟中的网格(900x600网格,5列和4行,每个正方形为150x150像素)。图标的类型,位置和方向必须基于数据集中的4个给定变量。该函数必须能够解释以下形式的数据集:
data_set = [icon_style, bottom_left_column, bottom_left_row, orientation]
一个完整数据集的示例,它绘制了4个图标,如下所示:
data_set_03 = [['A', 1, 0, 'N'], ['C', 2, 1, 'E'], ['A', 3, 2, 'S'], ['A', 4, 3, 'W']]
意味着第一个图标是A类型,在第1列,第0行,朝北。第二个图标是C类型,在第2列第1行绘制,面向东方。等等,用于该列表中的所有4个图标。
为了解决这个挑战,首先我定义了一个函数来解释列表并创建4个变量,这些变量稍后将被绘制图标的函数使用
def read_icons(w,x,y,z):
if w == 'A':
icon = icon_01
elif w == 'B':
icon = icon_02
elif w == 'C':
icon = icon_03
elif w == 'D':
icon = icon_04
if x == 0:
x_coord = -450
elif x == 1:
x_coord = -300
elif x == 2:
x_coord = -150
elif x == 3:
x_coord = 0
elif x == 4:
x_coord = 150
elif x == 5:
x_coord = 300
if y == 0:
y_coord = -300
elif y == 1:
y_coord = -150
elif y == 2:
y_coord = 0
elif y == 3:
y_coord = 150
if z == 'N':
heading = 90
elif z == 'E':
heading = 0
elif z == 'S':
heading = 270
elif z == 'W':
heading = 180
最后,我在函数末尾添加了这个以测试绘图 - 我计划稍后将其移动到我的draw_icons函数中
icon()
read_icons(*data_set_01)
icon()告诉函数绘制图标,所以我可以看到它是否正确绘制,read_icons(* data_set_01)执行基于data_set_01的整个函数
这在绘制任何SINGLE图标时效果很好,正确的图标以正确的方向绘制在正确的位置。这适用于任何数据集,例如
data_set_01 = ['B', 1, 2, 'N']
仅绘制1个图标。
但是,我的问题是当我尝试使用包含多个图标信息的数据集时,例如
data_set_03 = [['A', 1, 0, 'N'], ['C', 2, 1, 'E'], ['A', 3, 2, 'S'], ['A', 4, 3, 'W']]
我遇到了一大堆错误。
以下是我创建draw_icons函数的最佳尝试,使用for循环为每个子列表运行read_icons()函数一次:
def draw_icons(data_set):
for sublist in data_set:
read_icons(*data_set)
penup()
goto(x_coord, y_coord)
setheading(heading)
pendown()
icon()
draw_icons(data_set_03)
但是,此代码会导致错误:
goto(x_coord, y_coord)
NameError: global name 'x_coord' is not defined
当使用仅有1个图标的变量时,我的x_coord没有被定义的问题。
我的第二次尝试是尝试删除for循环并在每个子列表1上明确地运行read_icons:
def draw_icons(data_set):
read_icons(*data_set[0])
penup()
goto(x_coord, y_coord)
setheading(heading)
pendown()
icon()
read_icons(*data_set[1])
penup()
goto(x_coord, y_coord)
setheading(heading)
pendown()
icon()
read_icons(*data_set[2])
penup()
goto(x_coord, y_coord)
setheading(heading)
pendown()
icon()
read_icons(*data_set[3])
penup()
goto(x_coord, y_coord)
setheading(heading)
pendown()
icon()
然而遇到同样的错误。
我希望draw_icons(data_set_03)的工作原理如下:
对于data_set_03的第一个子列表,即:[' A',1,0,' N'],根据规则定义w,x,y和z read_icons(),然后根据这些变量绘制图标。
接下来,转到data_set_03的第二个子列表,即:[' C',2,1,' E'],重新定义w,x,y和z根据read_icons()的规则,根据这些变量绘制下一个图标。
冲洗并重复下列清单3和4,直到正确绘制所有4个图标。
我认为data_set_03分为以下子列表是否正确?
sublist 0 = ['A', 1, 0, 'N']
sublist 1 = ['C', 2, 1, 'E']
sublist 2 = ['A', 3, 2, 'S']
sublist 3 = ['A', 4, 3, 'W']
如果是这样,为什么我的for循环不从第一个子列表生成4个变量,绘制图标,然后用第二个子列表中的新值覆盖4个变量,然后绘制第二个图标等等。
我接近这个完全错了吗?这是一个初学者的任务,因此产生正常运行的代码是唯一的要求,无论它多么丑陋。我还不需要优雅或简洁。这是我完成挑战的诚实尝试,但此时遇到了障碍。
对此有任何帮助或见解将不胜感激!