如何在Python中移动通过其他函数创建的乌龟?

时间:2019-03-02 04:51:59

标签: python turtle-graphics

我刚开始使用python和进行编码非常陌生,但是在过去的几天里我一直在与turtle一起工作。我正在尝试创建几个函数,其中其他函数将在另一个函数内创建的乌龟移动。例如:

import turtle as t

def setUp():
    t.setup(900,600)
    t.colormode(255)
    win = t.Screen()

def turtles():
    t1 = t.Turtle()
    t1.shapesize(1.5,1.5,0)
    t1.color('red')
    t1.pensize(3)
    t1.shape('turtle')

def moveTurtle():
    t1.forward(50)

setUp()
turtles()
moveTurtle()

在我的示例中,当python降到moveTurtles()时,t1无法识别,因为它是在先前的函数中创建的。如果有人可以给我一些我该如何做的见解,我将非常感激。谢谢!

2 个答案:

答案 0 :(得分:0)

您有2个选择:

选项1:

从第一种方法返回变量并将其发送给第二种方法:

import turtle as t

def setUp():
    t.setup(900,600)
    t.colormode(255)
    win = t.Screen()

def turtles():
    t1 = t.Turtle()
    t1.shapesize(1.5,1.5,0)
    t1.color('red')
    t1.pensize(3)
    t1.shape('turtle')
    return t1

def moveTurtle(t1):
    t1.forward(50)

setUp()
moveTurtle(turtles())

选项2:

使用不建议使用但可以使用的全局变量:

import turtle as t

t1 = None

def setUp():
    t.setup(900,600)
    t.colormode(255)
    win = t.Screen()

def turtles():
    global t1
    t1 = t.Turtle()
    t1.shapesize(1.5,1.5,0)
    t1.color('red')
    t1.pensize(3)
    t1.shape('turtle')

def moveTurtle():
    t1.forward(50)

setUp()
turtles()
moveTurtle()

答案 1 :(得分:0)

选项3:

根据turtle软件包的设计,turtle和屏幕对象是全局实体。 (函数返回时,不会回收位于函数本地的乌龟。)只需将它们全局化,然后全局访问它们或将它们传递到需要的地方:

from turtle import Screen, Turtle

def setUp(w):
    w.setup(900, 600)
    w.colormode(255)

def turtles(t):
    t.shapesize(1.5, 1.5, 0)
    t.color('red')
    t.pensize(3)
    t.shape('turtle')

def moveTurtle(t):
    t.forward(50)

win = Screen()
t1 = Turtle()

setUp(win)
turtles(t1)
moveTurtle(t1)