2017-06-27 88 views
0

我需要一些帮助。我正在用蟒蛇编写我的首字母缩写,但无论出于何种原因,我都无法让乌龟移动。即使光标移动,乌龟仍然在屏幕中间开始。即使我使用penup()和pendown()。蟒蛇移动

我已经削减我的代码到这一点:

import turtle 

    window = turtle.Screen() 
    window.bgcolor("red") 


    def draw_art(): 
    charles = turtle.Turtle() 
    charles.shape("turtle") 
    charles.color("yellow") 
    charles.speed(2) 
    turtle.penup() 
    turtle.goto(-100,50) 
    turtle.pendown() 

    charles.back(100) 
    charles.right(90) 
    charles.forward(100) 
    charles.right(90) 
    charles.backward(100) 

    window.exitonclick() 

draw_art() 
+4

你正在“海龟”(在你的代码中)......但你应该正在移动“查尔斯” –

+0

非常感谢你。那工作。 – brescia57

回答

0

乌龟模块为程序员提供了一个功能和面向对象的界面。您已将的两个意外混淆的常见错误。当你写:

charles = turtle.Turtle() 
charles.forward(100) 

您使用在龟面向对象的接口由你创建。 (好样的!),但这:

turtle.goto(-100, 50) 

上调用它是为你创建默认龟的功能接口。有一个简单的方法来避免这个错误 - 而不是使用此声明:

import turtle 

使用:

from turtle import Turtle, Screen 

这将锁定功能接口,并且只允许面向对象之一。所以,你的示例代码现在看起来像:

from turtle import Turtle, Screen 

def draw_art(): 
    charles = Turtle('turtle') 
    charles.color('yellow') 
    charles.speed('slow') 

    charles.penup() 
    charles.goto(-100, 50) 
    charles.pendown() 

    charles.back(100) 
    charles.right(90) 
    charles.forward(100) 
    charles.right(90) 
    charles.backward(100) 

window = Screen() 
window.bgcolor('red') 

draw_art() 

window.exitonclick() 

turtle.goto(-100, 50)呼叫现在将产生一个错误:name 'turtle' is not defined

0

def draw_art(): charles = turtle.Turtle()

让我们来谈谈为什么移动查尔斯:

往上顶,你创建了一个实例的龟,并将其设置为变量查尔斯

查尔斯,是的,但你要移动查尔斯 - 他是这个“型”你实例称为

希望能帮助你理解!有关更多信息,请参阅Python中的OOP。

+0

你的回答不能解释为什么'turtle.goto(-100,50)'从Python的角度来说是完全有效的,即使它与OP所做的不一致。 (提示:对于新程序员而言,这是一个令人困惑的问题,因为试图使新版程序员更容易使用海龟!) – cdlane

+0

感谢您注意到这个疏忽,@cdlane! – NamoDawn