为什么Python运行代码时提示变量wn未定义?
问题根因及修复方案
1. 变量作用域问题(wn未定义的直接原因)
所有在函数内部创建的变量默认是函数私有的局部变量,仅在函数内部生效,外部和其他函数无法访问:
setupWindow函数里创建的wn没有返回给外部,main函数无法获取这个变量setupTurtles函数里创建的michelangelo、leonardo也是局部变量,main函数调用赛跑相关函数时同样会提示未定义
2. 其他隐含错误
raceTwo调用时乌龟名称拼写错误:michelangelo少写了末尾的o,写成了michelangeldrawShapes函数写死了使用leonardo,传入的myturtle参数完全失效- 全局作用域提前调用了一次
setupTurtles(),创建的乌龟对象是局部变量,没有实际作用
修正后可正常运行的代码
import turtle import random #Part A def setupWindow(): wn = turtle.Screen() wn.bgcolor('lightblue') # 返回创建好的窗口对象给外部使用 return wn def setupTurtles(): michelangelo = turtle.Turtle() leonardo = turtle.Turtle() michelangelo.color('orange') leonardo.color('blue') michelangelo.shape('turtle') leonardo.shape('turtle') michelangelo.up() leonardo.up() michelangelo.goto(-100,20) leonardo.goto(-100,-20) michelangelo.speed(1) leonardo.speed(1) # 返回两个乌龟对象给外部使用 return michelangelo, leonardo #Race 1 def raceOne(myturtle, myturtle2): myturtle.forward(random.randrange(1,101)) myturtle2.forward(random.randrange(1,101)) #Race 2 def raceTwo(myturtle, myturtle2): for x in range(10): myturtle.forward(random.randrange(0,11)) myturtle2.forward(random.randrange(0,11)) # Part B def drawShapes(myturtle): myturtle.down() for sides in [3, 4, 6, 9, 12]: for i in range(sides): # 改用传入的myturtle参数,不写死固定乌龟 myturtle.forward(50) myturtle.right(360/sides) myturtle.clear() return sides def main(): # 接收各个函数返回的对象,即可在main中正常调用 wn = setupWindow() michelangelo, leonardo = setupTurtles() raceOne(michelangelo, leonardo) # 修正拼写错误 raceTwo(michelangelo, leonardo) drawShapes(leonardo) wn.exitonclick() main()
内容的提问来源于stack exchange,提问作者brisaniashley
相关产品推荐
相关产品推荐

