我只举一个简单的例子,但我想了解它的逻辑。 例如,我要如何同时开始这两件事?。在
谢谢你的回答。。在
import turtle
wn=turtle.Screen()
nah=turtle.Turtle() #first turtle
nah1=turtle.Turtle() #secondturtle
n=1
nah.speed(0)
nah.penup()
nah.goto(-300,200)
nah.pendown()
nah1.penup()
nah1.goto(-300,180)
nah1.pendown()
def func1():
for i in range (4):
nah.right(45)
nah.forward(40)
nah.left(45)
nah.forward(30)
nah.left(45)
nah.forward(40)
nah.right(45)
nah.forward(30)
def func2():
for e in range(4):
nah1.left(45)
nah1.forward(40)
nah1.right(45)
nah1.forward(30)
nah1.right(45)
nah1.forward(40)
nah1.left(45)
nah1.forward(30)
func1()
func2()
wn.exitonclick()
你不介意我的剧本我只想要逻辑。在
因为我已经给出了一个bad answer,我现在觉得一定要给一个更好的;)
由于线程不是一个选项,您必须暂停一个函数的执行以运行另一个函数,然后从一个函数切换到另一个函数。在
暂停一个函数然后再继续它的一个简单方法是通过生成,其中暂停的地方生成生成器。在
首先,定义用于暂停的位置:
然后交替调用这两个函数,直到两个函数都完成:
^{pr2}$*在Python2中,使用
izip_longest
代替zip_longest
。解释
那么,它是如何工作的呢?在
func1()
anfdfunc2()
现在返回生成器对象。这将是一种低技术的使用方式:生成器对象可以迭代,它将生成值。在这种情况下,它只会一直产生
None
,但我们对它产生的结果不感兴趣——我们只想让它停下来。在因此,这将执行整个
func1
:为了互换地执行func1和func2,它们被压缩。
zip_longest
确保迭代不会在其中一个函数完成时停止,而是继续,直到两个函数都完成为止。在有几种方法可以解决这个问题。一种使用屏幕.ontimer()事件(请参阅turtle文档)。这种方法允许您调整海龟的实际时钟时间。在
我在下面使用的方法是将海龟的运动分解为一个发电机内的小步骤,发电机在每一次运动后都会产生收益。这类似于@zvone所做的,但程度更精细(运动更流畅),对原始代码的影响更小。我还设置了它来利用现有的
turtle.speed()
来控制两个海龟的绝对和相对速度——如果你说turtle1.speed(“fast”),它将比turtle2.speed(“slow”)移动得更快。在我在一个
screen.ontimer()
事件中启动了比赛,这样整个比赛在exitonclick()
调用之后进行。这样,即使在比赛进行中,您也可以单击窗口将其关闭。如果我们直接调用race_turtles()
,那么在比赛结束之前,点击屏幕什么也做不了。在从伊索的《乌龟和稍快的乌龟》中:
若要与其他代码并行启动某些代码,请创建一个thread。在
最简单的例子是:
编辑:不起作用
我在贴出答案后尝试了这个方法,不幸的是它对海龟不起作用。我得到:
另一种方法?
见my other answer。在
相关问题 更多 >
编程相关推荐