当海龟到达某个点时阻止它,Python
我目前正在上初级编程课,正在完成作业。现在,我必须用海龟模块建造3座房子(我完成了): 这是while代码。所以我想让乌龟停在某个点上,红场的左上角。我尝试了多个要点,但都没有中断/停止。我的语法错了吗?还是我把这整件事都搞错了?如果我含糊不清,请问你不明白的地方,我真的很想弄明白,但我完全没有主意了当海龟到达某个点时阻止它,Python,python,python-3.x,turtle-graphics,Python,Python 3.x,Turtle Graphics,我目前正在上初级编程课,正在完成作业。现在,我必须用海龟模块建造3座房子(我完成了): 这是while代码。所以我想让乌龟停在某个点上,红场的左上角。我尝试了多个要点,但都没有中断/停止。我的语法错了吗?还是我把这整件事都搞错了?如果我含糊不清,请问你不明白的地方,我真的很想弄明白,但我完全没有主意了 def drawBody(mover): #Rectangle part mover.fillcolor("blue") mover.begin_fill() fo
def drawBody(mover):
#Rectangle part
mover.fillcolor("blue")
mover.begin_fill()
for i in range(2):
mover.forward(100)
mover.right(90)
mover.forward(75)
mover.right(90)
mover.end_fill()
#Triangle part
mover.fillcolor("red")
mover.begin_fill()
mover.left(45)
for i in range(2):
mover.forward(70.5)
mover.right(90)
mover.right(45)
mover.forward(100)
mover.end_fill()
mover.left(90)
mover.forward(75)
mover.left(90)
n = mover.position()
print(n)
while True:
mover.forward(100)
n = mover.position()
print(n)
mover.left(90)
mover.forward(5)
mover.left(90)
n = mover.position()
print(n)
mover.forward(100)
mover.right(90)
mover.forward(5)
mover.right(90)
if n == (-75.30,0.00):
break
#Create preproduction turtle
import turtle
wn = turtle.Screen()
josh = turtle.Turtle()
pointGoTo = -175
for houses in range(3):
josh.penup()
josh.goto(pointGoTo,0)
josh.pendown()
drawBody(josh)
josh.right(180)
pointGoTo = pointGoTo + 125
wn.exitonclick()
在这里,你需要一个停止条件
while True:
mover.forward(100)
n = mover.position()
print(n)
mover.left(90)
mover.forward(5)
mover.left(90)
n = mover.position()
print(n)
mover.forward(100)
mover.right(90)
mover.forward(5)
mover.right(90)
您可以尝试使用移动器的位置,也可以计算它必须移动的次数
如果使用移动器的位置,则必须进行计算,以偏移正方形的起始位置和移动方向(特别是在30°角的情况下!),因此我不建议这样做
相反,你可以说正方形(蓝色,顺便说一句,不是红色)是75px高,每次迭代向上移动10次,所以你需要7½次迭代。如果你有一个完整的迭代次数,比如说8次,你就可以完成
for i in range(8):
mover.forward(100)
n = mover.position()
...
它计算迭代次数0..7(从0到7有8个数字),并每次执行一次迭代。我们希望在最后的第8次迭代中打破循环,这很容易,因为我们有break
关键字,并且范围中的i
变量跟踪迭代次数:
for i in range(8):
mover.forward(100)
n = mover.position()
print(n)
mover.left(90)
mover.forward(5)
mover.left(90)
n = mover.position()
print(n)
if i == 7:
break
mover.forward(100)
mover.right(90)
mover.forward(5)
mover.right(90)
请注意,i==7
发生在第8次迭代上,因此第8次迭代中途取消,因此完成了7½次迭代,向上移动了75个像素。首先,您在错误的位置进行检查,您必须在此处进行检查:
while True:
mover.forward(100)
mover.left(90)
mover.forward(5)
mover.left(90)
n = mover.position()
if abs(n - (-75.30, 0.00)) < 0.01:
break
mover.forward(100)
mover.right(90)
mover.forward(5)
mover.right(90)
但我认为,对你来说,最好的方法是只画固定的次数:
mover.left(90)
mover.forward(70)
mover.left(90)
for i in xrange(7):
mover.forward(100)
mover.left(90)
mover.forward(5)
mover.left(90)
mover.forward(100)
mover.right(90)
mover.forward(5)
mover.right(90)
此外,您还必须更改代码,如下所示:
for houses in range(3):
josh.penup()
josh.goto(pointGoTo,0)
josh.pendown()
drawBody(josh)
pointGoTo = pointGoTo + 125
你认为乌龟会达到这一点有什么特别的原因吗?你能计算出需要多少次迭代吗?为什么不只是循环那么长时间?你能不能把笔往上拉,把海龟移到那里?你到底想做什么?是的,它在while循环中达到了那个点。但while循环仍在继续。所以它一直在写这些句子:。我想让这条线停在蓝色的顶端。提示:你知道你想让它画多少条线吗?也许你可以写一个方程式,告诉你需要多少行。
mover.left(90)
mover.forward(70)
mover.left(90)
for i in xrange(7):
mover.forward(100)
mover.left(90)
mover.forward(5)
mover.left(90)
mover.forward(100)
mover.right(90)
mover.forward(5)
mover.right(90)
for houses in range(3):
josh.penup()
josh.goto(pointGoTo,0)
josh.pendown()
drawBody(josh)
pointGoTo = pointGoTo + 125