Борьба с параметром функции - PullRequest
3 голосов
/ 17 апреля 2020

Итак, у меня есть это задание, чтобы заставить черепаху рисовать многоугольник с помощью функции: 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() в функции, но это не работает.

Ответы [ 2 ]

3 голосов
/ 17 апреля 2020

Вы должны создать экземпляр 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()
1 голос
/ 17 апреля 2020

Поскольку ваша функция в настоящий момент не работает, совершенно не имеет значения, что вы передаете в качестве первого аргумента, потому что с t = turtle.Turtle() вы сразу перезаписываете то, что было передано t. Если вы хотите передать произвольное имя, которое вы можете использовать внутри функции, вы можете сделать это, передав его в виде строки (поместите в кавычки). Но это все равно следует отличать от экземпляра черепахи, например:

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