为什么我的Python龟屏没有响应

时间:2017-10-15 12:17:50

标签: python turtle-graphics

我正在尝试在乌龟和另一只乌龟的线之间创建一个碰撞检测系统。问题是每当我运行程序时,乌龟屏幕都没有响应。我正在使用Pycharm和Python。请帮助!

NameVirtualHost *:80

<VirtualHost *:80>
    ServerAdmin webmaster@domain.example
    ServerName domain.example
    ServerAlias www.domain.example
    DocumentRoot /var/www/html/domain.example/public_html/
    ErrorLog /var/www/html/domain.example/logs/error.log
    CustomLog /var/www/html/domain.example/logs/access.log combined
</VirtualHost>

2 个答案:

答案 0 :(得分:0)

您的代码中存在许多错误。

首先,

if P1.heading() is 180:

应该是

if P1.heading() == 180:

在你的循环中,你不能改变你的Num var。

您正在尝试访问未定义的索引

    x2[n] = XC
    y2[n] = YC

你的逻辑在for循环中也没有多大意义。

在这里,我做了一些修正,我加了一个计时器,这样你就可以看到你的海龟是如何移动的。这应该可以帮助您可视化您正在做的事情

import time
import turtle
Screen = turtle.Screen()
P1 = turtle.Turtle()
P2 = turtle.Turtle()
Screen.screensize(100, 100)
P1.penup()
P1.setheading(180)
P2.setheading(90)
P1.goto(100, 50)
P2.penup()
P2.goto(50, 0)
P2.pendown()
P1.pendown()
time.sleep(1)
n = 100
if P1.heading() == 180:
    for x in range(0, n):
        print(P1.position())
        print(P2.position())
        if abs(P1.position()[1] - P2.position()[1]) > 10:
            time.sleep(.3)
            P2.forward(1)
            P1.forward(.5)
        else:
            print('Found')
            break

答案 1 :(得分:0)

该代码存在一些问题。这一行很重要:

if P1.heading() is 180:

is运算符测试标识,即如果两个表达式求值为同一对象,则为True。您不应该使用它来测试两个表达式是否具有相同的值。在这种情况下,P1.heading()返回值为180.0的float对象,因此它不能与值为180的整数对象相同。因此,您的{{1永远不会输入块。由于移动海龟的主要命令位于if区块的末尾,因此一旦您进入if循环,海龟就不会移动。

此外,您使用while索引列表,但您永远不会从零更新n,因此您要保存的所有坐标都会被写入第一项名单。

但是,如果您 更新n,则会遇到另一个问题:您正试图索引不存在的列表项,由于nx1的长度为1,y1x2的长度为零。

无论如何,这里是您的代码的简化版本,可以正确更新列表,并进行简单的碰撞检测。它只能检测到精确碰撞,而不是近似碰撞,但它应该让你朝着正确的方向前进。

y2