簡體   English   中英

轉入 Python 海龜模塊

[英]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()處弄錯了邏輯。 看看當switchvalue1時會發生什么

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語句都已執行。 您應該改用elifelse ,這樣如果一個成功,“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM