使用空格键启动和停止 Python 海龟

2024-03-30

我正在尝试编写一个程序,通过按空格键来启动和停止乌龟。我得到了启动乌龟移动的代码,但当我再次按下它时它并没有停止。看来只是提高速度而已。这是我的编码要求和我输入的代码。

创建一个包含三个函数的乌龟程序来控制乌龟。创建一个名为“turnLeft”的函数,当按下键盘上的右箭头时,该函数将乌龟向左转 90 度。创建一个名为“turnRight”的函数,当按下右箭头时,该函数将海龟向右旋转 90 度。创建第三个名为 move() 的函数,该函数在按下空格键时使海龟向前移动,然后在第二次按下空格键时停止海龟。

import turtle

turtle.setup(400,500)
wn = turtle.Screen()
wn.title("Tess moves in space")
wn.bgcolor("lightgreen")
tess = turtle.Turtle()

def leftTurtle():
    tess.left(90)

def rightTurtle():
    tess.right(90)

state_num = 0

def advance_state_machine():
    global state_num
    if state_num == 0:       
        tess.penup()
        state_num = 1
    else:     
        tess.pendown()
        tess.forward(2)
        state_num = 0
    wn.ontimer(advance_state_machine, 25)

def exitWindow():
    wn.bye()

wn.onkey(advance_state_machine, "space")
wn.onkey(exitWindow, "q")
wn.onkey(leftTurtle, "Left")
wn.onkey(rightTurtle, "Right")

wn.listen()                      
wn.mainloop()

除了一些小细节需要改变之外,你几乎是对的。全局变量state_num决定在advance_state_machine()如果乌龟应该移动或不移动,则函数。您已经获得了正确的转弯逻辑,那么为什么不对移动/暂停应用相同的逻辑呢?

在您的原始代码中,您只是将每个显示的帧的全局变量值从一种状态切换到另一种状态,并使用 SPACE 键启动另一个实例advance_state_machine()是什么让乌龟跑得更快。海龟变得更快,因为每个 SPACE 都会执行进一步的循环advance_state_machine()开始与现有的并行运行。

在函数下面的代码中movementControl()改变布尔值should_move到空间上的相反的一个advance_state_machine()评估should_move让乌龟移动或停止:

import turtle

turtle.setup(400,500)
wn = turtle.Screen()
wn.title("Tess moves in space")
wn.bgcolor("lightgreen")
tess = turtle.Turtle()

def leftTurtle():
    tess.left(90)

def rightTurtle():
    tess.right(90)

should_move = False

def movementControl():
    global should_move
    should_move = not should_move

def advance_state_machine():
    global should_move
    if should_move:       
        tess.pendown()
        tess.forward(2)
    else:     
        tess.penup()
    wn.ontimer(advance_state_machine, 25)

def exitWindow():
    wn.bye()

wn.onkey(movementControl, "space")
wn.onkey(exitWindow, "q")
wn.onkey(leftTurtle, "Left")
wn.onkey(rightTurtle, "Right")

wn.listen()                      
advance_state_machine()

wn.mainloop()

哇!!!和cdlane's帮助我们将一个非常好的基本海龟示例放在一起。

现在我已经将 HIS 代码修改为简约版本,并且也摆脱了 movingControl() 函数。

我个人不喜欢使用from turtle import *一种 import 语句,因为它们提供了大量可用的方法和变量,这些方法和变量是“不可见的”,因为您无法直接看到它们来自哪里,但是......将所有代码放在如此短的块中并不值得它?

from turtle import *
setup(400, 500); title('Turtle moves in space')
bgcolor('lightgreen'); up()
def advance_state_machine():
    if isdown(): fd(2) 
    ontimer(advance_state_machine, 25)
onkey(lambda: (pd, pu)[isdown()](), 'space')
onkey(bye, 'q')
onkey(lambda: lt(90), 'Left')
onkey(lambda: rt(90), 'Right')
listen(); advance_state_machine(); done()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用空格键启动和停止 Python 海龟 的相关文章

随机推荐

  • 什么是“ChromeWebToolbarDiv”?

    我使用 AJAX 发送请求 响应以 JSON 形式返回 我们的一些用户一直抱怨他们收到错误 这表明收到了无效的 JSON 我们在服务器上检查是否发送了有效的 JSON 进一步调试时 发现以下代码被附加到 JSON 中 导致 JSON 解析失
  • 在 Selenium 中设置用户数据/配置文件不起作用。硒蟒蛇

    由于某种原因 当我尝试设置用户数据 配置文件时 它不起作用 该代码运行良好 但一旦浏览器启动 我就无法登录到我的个人资料 我该如何解决这个问题 chrome options add argument user data dir Users
  • 如何忽略缩放设置

    IE忽略缩放设置不起作用 我的代码如下 为什么它不起作用 我收到错误消息 selenium common exceptions SessionNotCreatedException 消息 启动 Internet Explorer 时出现意外
  • 带有内部 select 子句和 group by 汇总的 sql order by

    我的查询如下所示 输出 电流输出 Role Cases prepped Completed State Member 1 10 5 50 State Member 2 10 7 70 State President 10 2 20 Summ
  • header/impl 关键字在 kotlin 中的含义是什么?

    就在不久前 当我探索 Kotlin github 存储库时 我发现了一些有趣的事情 Kotlin 现在似乎有一个 header 关键字 收藏H kt https github com JetBrains kotlin blob be95f6
  • string.Empty 与 "" - 这有变化吗?

    根据这个答案 https stackoverflow com a 2905422 386869 and string Empty略有不同 因为 创建一个对象 而string Empty才不是 该答案在该问题上得票最多 然而 这个答案 htt
  • 在实体框架的 where 子句中使用列表

    我正在尝试通过一对多表检索文档 ID 我想在 where 子句中使用列表来查找与列表中每个元素相关的所有 id List
  • Magento group by 日期字段上的子句

    我需要获取指定月份一天内 grand total 的订单总数 SUM MIN MAX 和 AVG 这就是我正在做的事情 collection gt getSelect gt columns SUM base grand total AS t
  • Kotlin - StateFlow 不向其收集器发出更新

    我的应用程序中有一个 UserStateModel 数据类 类型的 StateFlow private val userStateFlow MutableStateFlow
  • TextView 作为带有文本颜色操作的进度条?

    我正在努力改进我的应用程序的用户界面 在我使用的设计中 我有一个 TextView 它将在特定时间充当进度条 ruslt 应该看起来像这样 问题是 随着进度的变化 部分文本的颜色也会改变 我研究了android中的spannablestri
  • ASP.NET Web API 中是否有等效的@JsonView

    我在 Spring 和 Java 方面有更多的经验 但现在我正在从事 ASP NET Web API 项目 因此 在 Spring 中 我可以使用 JsonView 注释来注释我的 DTO 这样我就可以选择通过 REST 显示哪些数据 我发
  • 如何在 web.config 文件中存储字典对象?

    我想在我的网络配置文件中存储一个简单的键 值字符串字典 Visual Studio 可以轻松存储字符串集合 请参阅下面的示例 但我不确定如何使用字典集合来存储字符串集合
  • Cocoa-Touch:如何查看两个 NSDate 是否在同一天?

    我需要知道两个 NSDate 实例是否都来自同一天 有没有比获取 NSDateComponents 并比较日 月 年更简单 更好的方法 如果您的目标是iOS 8 和 OS X 10 9 或更高版本 then 乔的回答 https stack
  • libQt5XcbQpa.so.5:未定义的符号:FT_Property_Set

    当我尝试从 python 脚本运行 wkhtmltopdf 命令时出现此错误 usr bin wkhtmltopdf symbol lookup error usr lib x86 64 linux gnu libQt5XcbQpa so
  • 嵌套视图中的拥抱和压缩阻力

    我试图了解拥抱和抗压阻力是如何真正发挥作用的 我有这样的场景 我需要左侧两个标签 绿色容器内 和右侧两个标签 蓝色容器内 如图所示 我希望绿色容器能够容纳内容 Android 的wrap content 和蓝色容器来填充剩余空间 Andro
  • PostgreSQL 中的跨数据库查询[重复]

    这个问题在这里已经有答案了 我正在尝试在 Postgres 中构建查询 我的背景是 SQL Server 因此我遇到了一些语法挑战 我的查询需要访问两个独立服务器上的两个独立数据库 我需要在数据集之间进行连接 本质上 我在 db1 中有一个
  • pySerial 与 python 2.7 和 3.4 的差异

    我正在开发一个项目 需要通过串口将一些数字从 Windows 10 中的 python 发送到 arduino uno 作为一个简单的测试 我只想通过发送 2 来打开 LED 并通过从命令提示符发送 4 来关闭 LED 尽管我希望最终能够将
  • ScrollView 只能承载一个直接子异常

    我想将图像添加到滚动视图 我尝试使用以下代码 ScrollView sv ScrollView findViewById R id scrollView2 ImageView iv new ImageView this iv setImag
  • Android Studio - Flutter 插件未安装;这增加了 Flutter 特定的功能

    考虑到我已经遵循了所有这些步骤https flutter dev docs get started install linux https flutter dev docs get started install linux在我的 Ubun
  • 使用空格键启动和停止 Python 海龟

    我正在尝试编写一个程序 通过按空格键来启动和停止乌龟 我得到了启动乌龟移动的代码 但当我再次按下它时它并没有停止 看来只是提高速度而已 这是我的编码要求和我输入的代码 创建一个包含三个函数的乌龟程序来控制乌龟 创建一个名为 turnLeft