为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Repl.it python turtle.tracer(n) 限制为 150?

为什么 Repl.it python turtle.tracer(n) 限制为 150?

小怪兽爱吃肉 2022-10-06 19:31:04
我正在使用 repl.it py 龟递归绘制一棵树。这是我的代码import turtleimport randomdef about(x): return x * random.uniform(0.95,1.05)# recursively draw a treedef tree(t,a,s):    if s<2: return    t.left(a)    t.fd(s)    tree(t.clone(),about(30), s * about(.7))    tree(t,about(-30), s * about(.7))t = turtle.getpen()t.ht(); t.speed(0); t.tracer(0)tree(t,90,40)t.update()也在这里。但它只绘制了树的一部分。如果我将其更改为t.tracer(150)那么它的工作原理!也tracer(10)有效,但tracer(200)不起作用。示踪剂的高度有限制吗?
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

首先,让我们讨论一下您的绘图代码。你的树由 500 只不同的海龟绘制的大约 500 条线组成!这似乎太过分了,所以让我们重写您的代码以使用单个海龟撤消它的动作而不是克隆自身:


from turtle import Screen, Turtle

from random import uniform


def about(x):

    return x * uniform(0.95, 1.05)


# recursively draw a tree

def tree(t, a, s):

    if s < 2:

        return


    t.forward(s)

    t.left(a)

    tree(t, about(30), s * about(0.7))

    t.right(2 * a)

    tree(t, about(-30), s * about(0.7))

    t.left(a)

    t.backward(s)


screen = Screen()

screen.tracer(0)


turtle = Turtle()

turtle.hideturtle()

turtle.setheading(90)


tree(turtle, 15, 50)


screen.tracer(1)

screen.mainloop()

就tracer()我而言,我无法重现您的结果,但图像也从未完成。参数tracer()指定您只想在每个nth图形操作上更新图像。这是非常专业的,我只推荐 0 和 1 的值。首先,很难根据算法计算每第 n 次更新应该是什么,以及什么对用户来说在视觉上是有意义的。其次,在标准的 Python turtle 中,有一些操作会导致更新,无论tracer()设置如何都会引发此计算,除非您知道这些额外更新何时发生。


在您的情况下,出于速度目的,tracer(0)请在激烈的绘图开始时设置,并tracer(1)在您完成绘图时设置。然后一切都应该正常工作。


查看完整回答
反对 回复 2022-10-06
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信