我對 python 很陌生,我試圖在 main 中呼叫這些函式,但是每當我運行程式時,它都會說“wn”沒有定義。任何原因這不起作用?
我也嘗試在 main 之外呼叫該函式,但仍然出現相同的錯誤。
import turtle #1. import modules
import random
#Part A
def setupWindow(wn):
wn = turtle.Screen() # 2. Create a screen
wn.bgcolor('lightblue')
def setupTurtles():
michelangelo = turtle.Turtle() # 3. Create two turtles
leonardo = turtle.Turtle()
michelangelo.color('orange')
leonardo.color('blue')
michelangelo.shape('turtle')
leonardo.shape('turtle')
michelangelo.up() # 4. Pick up the pen so we don\u2019t get lines
leonardo.up()
michelangelo.goto(-100,20)
leonardo.goto(-100,-20)
## 5. your code goes here
#Slowing Turtles Down
michelangelo.speed(1)
leonardo.speed(1)
#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))
setupTurtles()
# Part B - complete part B here
def drawShapes(myturtle):
myturtle.down()
for sides in [3, 4, 6, 9, 12]:
for i in range(sides):
leonardo.forward(50)
leonardo.right(360/sides)
leonardo.clear()
return sides
def main():
setupWindow(wn)
setupTurtles()
raceOne(michelangelo, leonardo)
raceTwo(michelangel, leonardo)
drawShapes(leonardo)
main()
wn.exitonclick()
uj5u.com熱心網友回復:
你可以在這里看到這個問題,你傳遞了一個wn,但你也在之后定義了一個wn。
def setupWindow(wn):
wn = turtle.Screen()
您可以在開始時定義它,然后將其傳遞
def setupWindow(wn):
wn.bgcolor('lightblue')
def main(wn):
setupWindow(wn)
setupTurtles()
raceOne(michelangelo, leonardo)
raceTwo(michelangel, leonardo)
drawShapes(leonardo)
wn = turtle.Screen() # 2. Create a screen
main(wn)
wn.exitonclick()
uj5u.com熱心網友回復:
正如錯誤訊息所述,您永遠不會定義wn.
您有一個wn在此處呼叫的引數:
def setupWindow(wn):
wn = turtle.Screen() # 2. Create a screen
wn.bgcolor('lightblue')
在這里,您將wn作為引數傳遞給setupWindow:
def main():
setupWindow(wn)
setupTurtles()
raceOne(michelangelo, leonardo)
raceTwo(michelangel, leonardo)
drawShapes(leonardo)
main()
但是之前沒有任何地方main()被稱為你定義什么wn是。第一個執行的函式 ismain()并且它傳遞wn到setupWindow()但wn 在執行中的此時從未在此范圍中定義。
您需要wn在執行之前定義某處setupWindow()。它需要的價值取決于你的實作邏輯,但像下面這樣簡單的東西可以做到這一點,這取決于你要完成什么:
wn = None
main()
uj5u.com熱心網友回復:
您不能wn在 setup 函式中傳遞引數,因為wn變數是在函式宣告之后宣告的。
uj5u.com熱心網友回復:
感謝您提出問題。這個問題是由于沒有正確參考我修改了您的代碼以使其運行的函式。請檢查并進一步修改它。
import turtle # 1. import modules
import random
# Part A
def setupWindow(wn):
wn = turtle.Screen() # 2. Create a screen
wn.bgcolor('lightblue')
def setupTurtles():
michelangelo = turtle.Turtle() # 3. Create two turtles
leonardo = turtle.Turtle()
michelangelo.color('orange')
leonardo.color('blue')
michelangelo.shape('turtle')
leonardo.shape('turtle')
michelangelo.up() # 4. Pick up the pen so we don\u2019t get lines
leonardo.up()
michelangelo.goto(-100, 20)
leonardo.goto(-100, -20)
michelangelo.speed(1)
leonardo.speed(1)
raceOne(michelangelo, leonardo)
raceTwo(michelangelo, leonardo)
leonardo.down()
for sides in [3, 4, 6, 9, 12]:
for i in range(sides):
leonardo.forward(50)
leonardo.right(360 / sides)
leonardo.clear()
return sides
## 5. your code goes here
# Slowing Turtles Down
# 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))
setupTurtles()
# Part B - complete part B here
def drawShapes(myturtle):
pass
def main():
wn = ""
setupWindow(wn)
setupTurtles()
main()
turtle.exitonclick()
uj5u.com熱心網友回復:
您需要了解有關傳遞引數和回傳結果的更多資訊。
我認為您的代碼應該更像這樣:
def setupWindow():
wn = turtle.Screen() # 2. Create a screen
wn.bgcolor('lightblue')
return wn
# ... elided rest of code until
def main():
wn = setupWindow()
setupTurtles()
raceOne(michelangelo, leonardo)
raceTwo(michelangel, leonardo)
drawShapes(leonardo)
return wn
wn = main()
wn.exitonclick()
另請注意,您對michelangelo, leonardo變數有類似的問題。你需要從你的setupTurtles()函式中回傳這些。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/340109.html
上一篇:將資訊從AJAX傳遞到控制器類
下一篇:如何從其他班級的串列中洗掉專案?
