[英]Switch in Python Turtle Module
我正在嘗試做一個簡單的開關,當我按下一個鍵時會改變一個變量(在這種情況下是開關值)。 我的方法似乎不起作用,據我所知,關鍵檢測正在起作用。
import turtle
from turtle import Turtle, Screen
screen = Screen()
jack = Turtle("turtle")
jack.color("red", "green")
jack.pensize(10)
jack.speed(0)
switchvalue = 1
def switch():
global switchvalue
if switchvalue == 1:
switchvalue = 0
if switchvalue == 0:
switchvalue = 1
turtle.listen()
turtle.onkey(switch,"s")
screen.mainloop()
if switchvalue == 0:
jack.forward(100)
您在 function switch()
處弄錯了邏輯。 看看當switchvalue
為1
時會發生什么
def switch():
global switchvalue
if switchvalue == 1: # True
switchvalue = 0 # change it to 0
if switchvalue == 0: # Whoops, True again, because you switched it to 0 before
switchvalue = 1
如您所見,您將switchvalue
更改為0
然后檢查它是否為0
,然后將其更改回1
,換句話說,兩個if
語句都已執行。 您應該改用elif
或else
,這樣如果一個成功,“ if
循環”(比喻地說)將打破另一個if
s 不會被檢查。
def switch():
global switchvalue
# IF one if succeds all the others will not be accounted
if switchvalue == 1:
switchvalue = 0
elif switchvalue == 0:
switchvalue = 1
即使您解決了@Countour-Integral 指出的elif
問題,此代碼也無法正常工作。 mainloop()
調用之后的代碼直到 turtle 關閉后才會執行,此時forward()
是沒有意義的:
screen.mainloop()
if switchvalue == 0:
jack.forward(100)
您正在將turtle 的功能API 與其面向對象的API 混合,這就是您需要雙重import
turtle 的原因:
import turtle
from turtle import Turtle, Screen
這只會帶來麻煩。 讓我們重寫程序以僅使用面向對象的 API 並實際工作:
from turtle import Turtle, Screen
switchvalue = True
def switch():
global switchvalue
switchvalue = not switchvalue
def move():
delay = 100 # if not moving, slow for human intervention
if switchvalue:
jack.forward(1)
delay = 0 # moving, check back right away
screen.ontimer(move, delay) # delay in milliseconds
screen = Screen()
jack = Turtle('turtle')
jack.color('red', 'green')
jack.speed('fastest')
jack.pensize(10)
screen.onkey(switch, 's')
screen.listen()
move()
screen.mainloop()
當程序啟動時,烏龜會向右游盪。 通過按“s”,您可以停止和重新開始該動作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.