You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python turtle绘图调用封装的配置函数报NameError如何解决

错误原因

  • 变量作用域问题:tonysetup、torysetup函数中定义的tony、tory属于函数局部变量,仅能在函数内部访问,外部的绘图函数无法直接调用,因此触发NameError
  • 实例化错误:torysetup中tory = turtle.Turtle漏写了括号,没有完成海龟对象的实例化,即便解决作用域问题也会运行报错
  • 调用遗漏:torystarburst函数中没有调用torysetup初始化海龟,逻辑不完整

修复方案

将配置函数中完成初始化的海龟对象作为返回值抛出,绘图函数中接收该返回值后再执行绘图逻辑即可,修改后的完整代码如下:

import turtle
def tonysetup():
    tony = turtle.Turtle()
    tony.shape("turtle")
    tony.pensize(1.05)
    tony.speed(20)
    # 返回配置好的海龟对象
    return tony

def torysetup():
    # 补全括号完成实例化
    tory = turtle.Turtle()
    tory.shape("turtle")
    tory.pensize(1.05)
    tory.speed(20)
    tory.penup()
    tory.backward(75)
    tory.left(90)
    tory.forward(25)
    tory.right(90)
    tory.pendown()
    # 返回配置好的海龟对象
    return tory

def tonyspirograph():
    # 接收配置好的海龟对象
    tony = tonysetup()
    tony.speed(100)
    for i in range(12):
        for color in ("red", "white", "blue"):
            tony.color(color)
            tony.circle(62.5)
            tony.circle(87.5)
            tony.left(10)
    tony.hideturtle()

def torystarburst():
    # 先调用配置函数接收海龟对象
    tory = torysetup()
    for i in range(24):
        for color in ("red", "white", "blue"):
            tory.color(color)
            tory.forward(150)
            tory.right(145)
    tory.hideturtle()

def main():
    tonyspirograph()
    torystarburst()
    # 保持绘图窗口不自动关闭,不需要可删除
    turtle.done()
    print("Star Spangled Spirograph: by *** *******")
    print("Thank you veterans!")

main()

内容的提问来源于stack exchange,提问作者oofalladeez343

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:45:02