使函数每次都带一个后续参数?

时间:2018-04-04 01:00:18

标签: python list for-loop turtle-graphics

我正在尝试绘制3个矩形堆栈,其中每个堆栈由每个子列表中第二个值表示的块数组成( 6 2 9

from turtle import *

myList = [[1, 6], [2, 2],[3, 9]]

def rectangles(num_layers):
    for x in myList:
        num_layers = x[1]

        pendown()
        color('Black', 'Aquamarine')
        begin_fill()
        setheading(180)
        forward(220)
        setheading(90)
        forward(50)
        setheading(0)
        forward(220)
        setheading(270)
        forward(50)
        end_fill()
        penup()
        setheading(90)
        forward(50)

for y in myList:
    if y[0] == 1:
        goto(0,0)
        rectangles(myList)

    elif y[0] == 2:
        goto(300, 0)
        rectangles(myList)

    elif y[0] == 3:
        goto(600, 0)
        rectangles(myList)
然而,而不是3个堆栈分别为6,2和9,我得到3个堆栈3.我的问题来自对列表和循环的理解缺乏理解。我需要我的函数从每个列表中获取第二个数字,然后构造一堆那么多矩形然后移动到下一个位置,读取下一个堆栈中的数量并重复。

1 个答案:

答案 0 :(得分:0)

这是我根据您的乌龟似乎正在做的事情重新编写代码:

from turtle import *

myList = [(1, 6), (2, 2), (3, 9)]

def rectangles(num_layers):
    for _ in range(num_layers):
        pendown()

        begin_fill()

        for _ in range(2):
            backward(220)
            right(90)
            backward(50)
            right(90)

        end_fill()

        penup()

        right(90)
        backward(50)
        left(90)

setup(950, 550)
color('black', 'aquamarine')
penup()

for y, x in myList:
    goto(300 * (y - 1) - 225, -200)
    rectangles(x)

mainloop()

你可以尝试使用像left(90)这样的相对转弯,而不是像heading(90)这样的绝对转弯,因为它会使你的程序更灵活(想想旋转。)

  

缺乏对理解列表的理解

您的代码中没有列表推导,因此您可能想重读这些内容。

enter image description here