J'ai écrit un programme tortue en python, mais il y a deux problèmes.
Voici mon code jusqu'à présent:
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()
Au fait: je suis sur la version 3.2!
turtle.speed()
sur fastest
.turtle.mainloop()
pour travailler sans rafraîchir l'écran.turtle.tracer(0, 0)
puis à la fin faire turtle.update()
La tortue Python va très lentement car des rafraîchissements d'écran sont effectués après chaque modification apportée à une tortue.
Vous pouvez désactiver le rafraîchissement de l'écran jusqu'à ce que tout le travail soit terminé, puis peindre l'écran, cela éliminera les retards en millisecondes alors que l'écran essaie furieusement de mettre à jour l'écran à chaque changement de tortue.
Par exemple:
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)
Ce code fait mille tortues à des endroits aléatoires et affiche l'image en environ 200 millisecondes.
Si vous n'aviez pas désactivé le rafraîchissement de l'écran avec la commande turtle.tracer(0, 0)
, cela aurait pris plusieurs minutes pour essayer de rafraîchir l'écran 3000 fois.
Pour référence, la tortue étant lente est un problème existant. Même avec une vitesse réglée au maximum, la tortue peut prendre assez de temps sur des choses comme les fractales. Nick ODell a réimplémenté la tortue pour la vitesse ici: 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()