当海龟到达某个点时阻止它,Python

当海龟到达某个点时阻止它,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

我目前正在上初级编程课,正在完成作业。现在,我必须用海龟模块建造3座房子(我完成了):

这是while代码。所以我想让乌龟停在某个点上,红场的左上角。我尝试了多个要点,但都没有中断/停止。我的语法错了吗?还是我把这整件事都搞错了?如果我含糊不清,请问你不明白的地方,我真的很想弄明白,但我完全没有主意了

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