在Python龟中绘制嵌套方块

时间:2017-11-01 03:35:17

标签: python turtle-graphics

我有一个函数cup(),它应该绘制一个类似量杯的三面正方形。虽然我认为我正确编写了该代码,但调用它的函数cups()无法正常工作,如图片所示。任何人都可以看到我的问题是什么?我试着改变它前进的长度,但那并没有做任何事情。它一直在第一个广场的顶端结束。谢谢你的帮助。

def cup(t,sideLength):
    for i in range(3):
        t.forward(sideLength)
        t.left(90)
        t.pu()
        t.forward(sideLength)
        t.left(90)
        t.pd()

def cups(t,initial,incr,reps): #needs work
    '''calls the function cup repeatedly to draw a set of measuring cups of 
    increasing size.'''
    for i in range(reps):
        cup(t,initial)
        t.pu()
        t.right(90)
        t.fd(incr)
        t.lt(90)
        t.pd()
        initial += incr

import turtle
s = turtle.Screen()
t = turtle.Turtle()
cups(t, 50, 30, 4)

https://www.raspberrypi.org/documentation/installation/installing-images/

My code

2 个答案:

答案 0 :(得分:0)

代码存在一些问题。

功能杯过于复杂 - 总是首先测试基本功能 - 有两种方法可以做到,一种有范围而另一种没有。我不是为了简单而做了那个。

然后问题在于考虑龟到底在哪里以及如何增加步数 - 你在增加但是从中心容器均匀地去,你必须考虑增加的分布 - 一半到顶部和一半到底部。

import turtle

t = turtle.Turtle()

def cup(sideLength):
    """Draws one cup and returns to origin"""
    t.pd()
    t.forward(sideLength)
    t.left(90)
    #t.pu()
    t.forward(sideLength)
    t.left(90)
    t.forward(sideLength)
    t.pu()
    t.left(90)
    t.forward(sideLength)

def cups(initial,incr,reps): #needs work
    '''calls the function cup repeatedly to draw a set of measuring cups of increasing size.'''
    start = initial
    for i in range(reps):
        cup(start)
        t.pu()  
        t.forward(incr/2)
        t.left(90)
        start += incr

#cup(50)
cups(50, 30, 4)

按照代码流程添加注释,以确保您了解每行的操作。

答案 1 :(得分:0)

您的cup()函数具有正确的步骤,但不幸的是将一些函数置于循环之后的循环中:

from turtle import Turtle, Screen

def cup(turtle, sideLength):
    for _ in range(3):
        turtle.forward(sideLength)
        turtle.left(90)
    turtle.penup()
    turtle.forward(sideLength)

def cups(turtle, initial, incr, reps):
    '''
    Calls the function cup() repeatedly to draw
    set of measuring cups of increasing size.
    '''

    for length in range(0, incr * reps, incr):
        cup(turtle, initial + length)
        turtle.forward(incr / 2)
        turtle.left(90)
        turtle.pendown()

screen = Screen()
tortoise = Turtle()

cups(tortoise, 50, 30, 4)

screen.exitonclick()

加上你在杯子之间移动多少的调整可以解决你的问题。我已经说明了在for ... in range(...)函数中使用cups()的另一种方法。我还让cup()稍微了解了cups()的内容,以避免额外的转弯,以平稳的方式绘制图形。