当Python到达某个点时停止它,Python

时间:2013-09-22 10:02:46

标签: python python-3.x turtle-graphics

我目前正处于初级编程课程中,而且我正在完成任务。现在,我必须用模块乌龟制作3个房子(我完成了):

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()







#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代码。所以我希望乌龟停在某个角落,红色方块的左上角。我尝试了多个积分,但暂时没有突破/停止。我的语法是否关闭?或者我是否接近整个房子的这一切都错了?如果我是模糊的,请问你不明白,我真的想弄清楚这一点,但我完全没有想法。:

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()

2 个答案:

答案 0 :(得分:1)

首先,你正在检查错误的地方,你要在这里检查一下:

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)

您的检查不成功,因为n实际上是turtle.Vec2D,坐标是浮点数,如果您执行print n[0], n[1],则可以看到它。关于比较浮点数的SO有许多链接,例如Testing floating point equality。在你的情况下,你可以这样做:

if abs(n - (-75.30, 0.00)) < 0.01:
    break

但我认为,最好的方法就是画出固定的次数:

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

答案 1 :(得分:0)

在这里你需要停止条件。

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 th 迭代中脱离循环,这很容易,因为我们有break关键字和i变量来自range跟踪迭代次数:

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 th 迭代中,所以8 th 被取消了一半,所以7½迭代,向上移动75像素。

相关问题