使用Python turtle库实现海龟移动运行报错问题求助
第一份代码运行说明
你提供的第一份未封装的turtle代码本身无语法错误,可直接正常运行,执行后会绘制带刻度的圆形以及顶部装饰线条。
代码如下:
import turtle as trtl t = trtl.Turtle() t.speed(100) t.penup() t.goto(0, -20) t.pendown() t.circle(100) t.left(90) t.forward(40) t.penup() t.forward(40) t.pendown() t.forward(40) t.penup() t.forward(40) t.pendown() t.forward(40) t.right(180) t.forward(40) t.right(45) t.right(45) t.penup() t.right(45) t.goto(0, 140) t.pendown() t.left(203) t.forward(46) t.right(45) t.forward(46) t.right(45) t.forward(46) t.right(45) t.forward(46) t.right(45) t.forward(46) t.right(45) t.forward(46) t.right(45) t.forward(46) t.right(45) t.forward(46) t.right(45) t.forward(46) t.left(45) t.forward(40) t.penup() t.goto(0, 140) t.pendown() t.left(180) t.forward(46) t.right(45) t.forward(40) t.penup() t.right(180) t.forward(40) t.right(90) t.forward(46) t.right(45) t.pendown() t.forward(40) wn = trtl.Screen() wn.mainloop()
第二份封装版代码问题修复
你第二份用def封装的代码存在多个问题,是触发语法错误的原因:
- Python函数定义关键字是小写
def,你写的Def首字母大写直接触发语法错误 - 导包逻辑混乱,函数内部重复导入turtle库,外部已经完成导包无需重复操作
- 调用Screen对象拼写错误,你导包用了
trtl别名,正确写法是trtl.Screen(),首字母大写且需要加执行括号 - tracer是Screen的方法,需要加括号传参,比如
tracer(0)表示关闭动画直接出图 - 函数定义完成后没有手动调用,也没有加窗口保持的
mainloop()逻辑,即使语法正确也无法正常显示效果
修正后可正常运行的封装版代码:
import turtle as trtl t = trtl.Turtle() def moving_name(): # 关闭绘制动画,可按需调整参数,改为1则恢复默认动画 screen = trtl.Screen() screen.tracer(0) t.speed(100) t.penup() t.goto(0, -20) t.pendown() t.circle(100) t.left(90) t.forward(40) t.penup() t.forward(40) t.pendown() t.forward(40) t.penup() t.forward(40) t.pendown() t.forward(40) t.right(180) t.forward(40) t.right(45) t.right(45) t.penup() t.right(45) t.goto(0, 140) t.pendown() t.left(203) t.forward(46) t.right(45) t.forward(46) t.right(45) t.forward(46) t.right(45) t.forward(46) t.right(45) t.forward(46) t.right(45) t.forward(46) t.right(45) t.forward(46) t.right(45) t.forward(46) t.right(45) t.forward(46) t.left(45) t.forward(40) t.penup() t.goto(0, 140) t.pendown() t.left(180) t.forward(46) t.right(45) t.forward(40) t.penup() t.right(180) t.forward(40) t.right(90) t.forward(46) t.right(45) t.pendown() t.forward(40) # 刷新画布,tracer设为0时需要手动刷新 screen.update() # 调用封装好的函数 moving_name() # 保持窗口不关闭 wn = trtl.Screen() wn.mainloop()
内容的提问来源于stack exchange,提问作者Dzenan kadic
相关产品推荐
相关产品推荐

