与功能参数作斗争

Struggling with function parameter

所以我有这个任务让乌龟使用函数绘制多边形:draw_poly(t, n, sz) 其中 t = 海龟名称,n = 角度数量,sz = 每边的大小。我提出了以下解决方案:

import turtle

def draw_poly(t, n, sz):
    t = turtle.Turtle()
    angle = 360/n
    for _ in range(n):
        t.forward(sz)
        t.left(angle)

window = turtle.Screen()

draw_poly(tess, 8, 50)

window.mainloop() 

当我 运行 时,我收到一个名称错误:“名称 'tess' 未定义”。我认为因为在函数中 tess 位于参数 t 的位置,它将在函数中使用 t = turtle.Turtle() 但这似乎不起作用。

您必须创建 turtle.Turtle() 的实例并将该实例传递给 draw_poly。例如:

import turtle

def draw_poly(t, n, sz):
    angle = 360/n
    for _ in range(n):
        t.forward(sz)
        t.left(angle)

window = turtle.Screen()
tess = turtle.Turtle()
draw_poly(tess, 8, 50)

window.mainloop()

就您的函数而言,作为第一个参数传递的内容完全无关紧要,因为使用 t = turtle.Turtle() 您会立即覆盖传递给 t 的任何内容。如果你想传递一个你可以在函数中使用的任意名称,你可以通过将它作为字符串传递(在它周围加上引号)来实现。但是这个还是要和turtle实例区分开来的,比如:

import turtle

def draw_poly(t, n, sz):
    turtle.title('This window is for ' + t + '.')
    t_instance = turtle.Turtle()
    angle = 360/n
    for _ in range(n):
        t_instance.forward(sz)
        t_instance.left(angle)

window = turtle.Screen()

draw_poly('tess', 8, 50)

window.mainloop() 

或者你可以让海龟生活在函数之外:

import turtle

def draw_poly(t, n, sz):
    angle = 360/n
    for _ in range(n):
        t.forward(sz)
        t.left(angle)

window = turtle.Screen()

tess = turtle.Turtle()
draw_poly(tess, 8, 50)

window.mainloop()