我有一项作业是我无法掌握的。这对我来说没有任何意义,我甚至不知道我在这一点上是否走对了方向。
到目前为止,我的代码如下:
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()这是代码的输出:走出http://puu.sh/5j491.png上面的代码
下面是它应该是什么样子:
赋值http://puu.sh/5j4ds.png
从递归的角度来看,我是不是朝正确的方向前进了?
发布于 2013-11-15 15:49:06
你走在正确的轨道上。
从这个角度来看,我认为您应该去掉您的2个smallerRec方法(尽管smallerRec中的代码仍将被使用)。应该只有一个调用draw_rectangle()的方法--您的rectangle_art方法。
此方法应采用与使用(center_x, center_y, width, height, level, myTurtle)相同的参数。
它应该在x,y of width,height绘制一个矩形。然后,如果level大于0,它应该调用自己4次,在其每个角落绘制一个矩形,其宽度和高度减小,水平降低1(就像您正在做的那样)。
这样,如果您从使用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)不过,这两种方法都会奏效。
https://stackoverflow.com/questions/20004671
复制相似问题