我有一份我无法掌握的家庭作业。这对我来说毫无意义,我甚至不知道我现在是否朝着正确的方向前进。
到目前为止,这是我的代码:
import turtle
def draw_rectangle(center_x, center_y, width, height, myTurtle):
myTurtle.penup()
myTurtle.goto(center_x - width/2, center_y - height/2)
myTurtle.pendown()
myTurtle.goto(center_x - width/2, center_y + height/2)
myTurtle.goto(center_x + width/2, center_y + height/2)
myTurtle.goto(center_x + width/2, center_y - height/2)
myTurtle.goto(center_x - width/2, center_y - height/2)
def smallerRec(width, height, level, myTurtle):
rectangle_art( width/2, -height/2, width/2 , height/2, level-2, myTurtle)
rectangle_art(-width/2, height/2, width/2 , height/2, level-2, myTurtle)
rectangle_art(-width/2, -height/2, width/2 , height/2, level-2, myTurtle)
rectangle_art( width/2, height/2, width/2 , height/2, level-2, myTurtle)
def smallerRec3(width, height, level, myTurtle):
bottom_y = 25
top_y = 75
left_x = 50
right_x = 150
rectangle_art( right_x, top_y, width/level , height/level, level-3, myTurtle)
rectangle_art( right_x, bottom_y, width/level , height/level, level-3, myTurtle)
rectangle_art( left_x, top_y, width/level , height/level, level-3, myTurtle)
rectangle_art( left_x, bottom_y, width/level , height/level, level-3, myTurtle)
def rectangle_art(center_x, center_y, width, height, level, myTurtle):
if (level <= 1):
draw_rectangle(center_x, center_y, width, height, myTurtle)
elif(level == 2):
draw_rectangle(center_x, center_y, width, height, myTurtle)
smallerRec(width, height, level, myTurtle)
elif(level == 3):
draw_rectangle(center_x, center_y, width, height, myTurtle)
smallerRec (width, height, level, myTurtle)
smallerRec3(width, height, level, myTurtle)
def main():
myTurtle = turtle.Turtle()
myWindow = turtle.Screen()
rectangle_art(0, 0, 200, 100, 3, myTurtle)
myWindow.exitonclick()
main()
这是该代码的输出: outout of the code above http://puu.sh/5j491.png
以下是它的样子:
the assignment http://puu.sh/5j4ds.png
在递归方面,我是朝着正确的方向前进吗?
答案 0 :(得分:1)
你走在正确的轨道上。
看着它我觉得你应该摆脱你的2 smallerRec
方法(尽管仍会使用smallerRec
中的代码)。您应该只有一种方法可以调用draw_rectangle()
- 您的rectangle_art
方法。
此方法应采用与(center_x, center_y, width, height, level, myTurtle)
相同的参数。
它应该在x,y
width,height
处绘制一个矩形。然后,如果level
大于0,它应该调用自己4次,在每个角上绘制一个矩形,宽度和高度减小,水平减少1(就像你正在做的那样)。 p>
这种情况下,如果您首先使用rectangle_art
致电level=2
,则会:
Draw rectangle, level > 0? yes its 2, draw rectangle at each of my corners
At each level 2 corner:
Draw rectangle, level > 0? yes its 1, draw rectangle at each of my corners
At each level 1 corner:
Draw rectangle, level > 0? no its 0, youre done.
<强>提示:强>
我很想让x,y引用drawRectangle方法中矩形的中心。因为那时你可以计算角矩形的坐标,而不知道你要绘制的较小矩形的宽度和高度。
如果x,y
指的是左上角。要绘制右下角矩形,请调用
drawRectangle(x+width-(newWidth/2), y+height-(newHeight/2), newWidth, newHeight)
如果您更改了drawRectangle方法,以便x,y
引用矩形的中心,则绘制您要调用的右下角矩形
drawRectangle(x+width, y+height, newWidth, newHeight)
无论哪种方式都可行。