我在python中编写了一个海龟程序,但有两个问题。
到目前为止,这是我的代码:
import turtle
#Takes user input to decide how many squares are needed
f=int(input("How many squares do you want?"))
c=int(input("What colour would you like? red = 1, blue = 2 and green =3"))
n=int(input("What background colour would you like? red = 1, blue = 2 and green =3"))
i=1
x=65
#Draws the desired number of squares.
while i < f:
i=i+1
x=x*1.05
print ("minimise this window ASAP")
if c==1:
turtle.pencolor("red")
elif c==2:
turtle.pencolor("blue")
elif c==3:
turtle.pencolor("green")
else:
turtle.pencolor("black")
if n==1:
turtle.fillcolor("red")
elif n==2:
turtle.fillcolor("blue")
elif n==3:
turtle.fillcolor("green")
else:
turtle.fillcolor("white")
turtle.bk(x)
turtle.rt(90)
turtle.bk(x)
turtle.rt(90)
turtle.bk(x)
turtle.rt(90)
turtle.bk(x)
turtle.rt(90)
turtle.up()
turtle.rt(9)
turtle.down()
顺便说一句:我在3.2版本上!
答案 0 :(得分:33)
turtle.speed()
设为fastest
。turtle.mainloop()
功能无需刷新屏幕即可正常工作。turtle.tracer(0, 0)
停用屏幕刷新,然后在最后执行turtle.update()
答案 1 :(得分:10)
Python龟的速度非常慢,因为在对乌龟进行每次修改后都会执行屏幕刷新。
您可以禁用屏幕刷新,直到所有工作完成,然后绘制屏幕,它将消除毫秒延迟,因为屏幕疯狂地尝试从每次更改龟更新屏幕。
例如:
import turtle
import random
import time
screen = turtle.Screen()
turtlepower = []
turtle.tracer(0, 0)
for i in range(1000):
t = turtle.Turtle()
t.goto(random.random()*500, random.random()*1000)
turtlepower.append(t)
for i in range(1000):
turtle.stamp()
turtle.update()
time.sleep(3)
此代码在随机位置生成一千只海龟,并在大约200毫秒内显示图片。
如果您没有使用turtle.tracer(0, 0)
命令禁用屏幕刷新,则尝试刷新屏幕3000次会花费几分钟时间。
答案 2 :(得分:3)
作为参考,龟慢是一个存在的问题。 即使速度设置为max,龟也可能需要很长时间才能完成分形。 Nick ODell在这里重新实现了龟的速度:Hide Turtle Window?
import math
class UndrawnTurtle():
def __init__(self):
self.x, self.y, self.angle = 0.0, 0.0, 0.0
self.pointsVisited = []
self._visit()
def position(self):
return self.x, self.y
def xcor(self):
return self.x
def ycor(self):
return self.y
def forward(self, distance):
angle_radians = math.radians(self.angle)
self.x += math.cos(angle_radians) * distance
self.y += math.sin(angle_radians) * distance
self._visit()
def backward(self, distance):
self.forward(-distance)
def right(self, angle):
self.angle -= angle
def left(self, angle):
self.angle += angle
def setpos(self, x, y = None):
"""Can be passed either a tuple or two numbers."""
if y == None:
self.x = x[0]
self.y = x[1]
else:
self.x = x
self.y = y
self._visit()
def _visit(self):
"""Add point to the list of points gone to by the turtle."""
self.pointsVisited.append(self.position())
# Now for some aliases. Everything that's implemented in this class
# should be aliased the same way as the actual api.
fd = forward
bk = backward
back = backward
rt = right
lt = left
setposition = setpos
goto = setpos
pos = position
ut = UndrawnTurtle()
答案 3 :(得分:0)
我无法真正解决速度问题,但是可以通过在文件末尾使用turtle. done()
来防止冻结,谢谢