这可能是一个非常基本的问题,但是我有一种更简单的方法可以在方形内创建旋转的方形吗?事实上,我只是用一只乌龟制作一个正常的方形,然后慢慢地将第二只乌龟移动到位以绘制旋转的部分。例如:
import turtle
alex = turtle.Turtle()
tess = turtle.Turtle()
for i in range(4):
alex.fd(50)
alex.lt(90)
tess.pu()
tess.fd(25)
tess.rt(90)
tess.fd(10)
tess.rt(225)
tess.pd()
for i in range(4):
tess.fd(50)
tess.lt(90)
对我来说,最好是笨重的,如果我改变边长(我打算这样做),它就不起作用。
非常感谢!
答案 0 :(得分:3)
这是开始使用功能的好时机!使用函数可以创建可重复使用的代码块,可以重复某个任务 - 例如,绘制正方形或方形正方形。
让我们使用您的代码并添加一个square
函数,该函数绘制一定大小的正方形。为此,我们将告诉函数使用哪个乌龟,以及方块的大小:
def square(this_turtle, side_length):
for i in range(4):
this_turtle.fd(side_length)
this_turtle.lt(90)
现在让我们在你的代码中使用新方法:
square(alex, 50)
tess.pu()
tess.fd(25)
tess.rt(90)
tess.fd(10)
tess.rt(225)
tess.pd()
square(tess, 50)
然后,您可以考虑如何制作star
函数,该函数可以生成任何给定大小的“方形正方形”形状。祝你好运!
以下是有关如何使用函数的更详细说明:http://openbookproject.net/thinkcs/python/english3e/functions.html(我怀疑这是您已经关注的教程!)
答案 1 :(得分:3)
我会向你提出一个相反的方法和其他过于关注绘制方块的答案,这些方法需要花费太多的工作才能完成。由于这是一个重复模式,我认为 stamping 是可行的方式,就像现实生活中的重复模式一样。具体做法是:
from turtle import Turtle, Screen
BASE_UNIT = 20
def tessellate(turtle, start, stop, step):
for x in range(start, stop + 1, step):
for y in range(start, stop + 1, step):
turtle.goto(x * BASE_UNIT, y * BASE_UNIT)
turtle.stamp()
turtle.left(45)
turtle.stamp()
alex = Turtle(shape="square")
alex.shapesize(8)
alex.color("red")
alex.penup()
tessellate(alex, -12, 12, 12)
tess = Turtle(shape="square")
tess.shapesize(4)
tess.color("gold")
tess.penup()
tessellate(tess, -6, 6, 12)
screen = Screen()
screen.exitonclick()
输出
海龟邮票自然地旋转和缩放哪些龟图没有!
你会注意到的一点是我的模式并不完全相同。在原版中,组成星的两个红色(或黄色)正方形的大小不同!它们稍微不同,使模式有效 - 我把它作为OP的练习来纠正这个。
答案 2 :(得分:1)
学习如何编写函数;这是一个很好的起点。编写一个函数来绘制给定大小的正方形,假设乌龟目前处于起始点并面向正确的方向。然后将方形绘制循环放在函数中:
def draw_square(tortuga, size):
for i in range(4):
tortuga.fd(size)
tortuga.lt(90)
这将从主代码中删除图纸详细信息。
接下来你要做的就是编写更多通用代码,让Tess跟随Alex到正确的位置 - 或者让Alex在完成第一个方格后移动,自己做第二个方格。