前面的教程中,我们已经可以让小海龟绘制出各种图形了。但是,所有绘图的代码都是预先编好的,程序一旦运行起来,运行结果(绘制的图形)就是固定不变的。这一节中,咪博士将教大家如何让海龟响应用户的输入。

 import turtle

 def move():
direction = turtle.textinput('Input direction', 'Go left or right?') if direction == 'left':
turtle.left(60)
turtle.forward(100) if direction == 'right':
turtle.right(60)
turtle.forward(100) move() turtle.exitonclick()

程序运行起来之后,会先弹出一个输入框,询问你海龟的运动方向。你可以输入 left 或者 right。

当你按下 ok 按钮之后,海龟就会根据你的输入(left 或 right),相应地向左或向右运动。

这个例子中,程序的运行结果不完全取决于事先编写的代码,它还和你的输入有关。

第 5 行 direction = turtle.textinput('Input direction', 'Go left or right?') 弹出一个输入框。输入框(窗口)的标题是 Input direction,输入框的提示文字为 Go left or right?。

  • 当用户完成输入点击 ok 按钮时,变量 direction 将获得用户输入的值。
  • 当用户点击 cancel 按钮时,变量 direction 的值为 None (None 为Python 中的关键字,表示什么也没有的意思)。

第 7, 8, 9 行称为条件语句。每个 if 语句(第 7 行)表示一个条件,它只有 2 种情况:要么成立(为真,值为 True),要么不成立(为假,值为 False)。

第 7 行 if direction == 'left': 对应的条件是判断变量 direction 与字符串 ‘left’ 是否相等。如果相等则执行第 8, 9 行的代码,否则就不执行第 8, 9 行的代码。

翻译成大白话就像下面这样

 如果变量 direction 等于 left,则执行下面的语句
turtle.left(60)
turtle.forward(100)

所以,当用户输入 left,并点击 ok 按钮时,direction 接收到用户的输入 left,它的值等于 left,海龟就先向左转 60 度(执行第 8 行代码),再前进 100 个单位(执行第 9 行代码)。

要注意的是 Python 中比较 2 个东西是否相等,要用 == (即 2 个连续的等号),因为单独的 = (等号)在 Python 中表达的是将某个值赋值给某个变量的意思,因此,比较是否相等就得用另外的符号(即 ==)了。

另外,还要注意缩进,第 8, 9 行的代码要比 if 语句所在的行(第 7 行),向右缩进一些。这样 Python 才知道,当 if 语句为真时(即条件成立时),需要执行哪些代码。和咪博士在前面的教程中谈到的一样,我们一般用连续的 4 个空格符号来表示一级的缩进。

第 11, 12, 13 行也是条件语句,它们和第 7, 8, 9 行代码类似,只不过条件成立的条件改成了变量 direction 的值等于 right。

if 语句还有其他一些语法。下面,咪博士给大家展示的是 if … else 的语法。

 import turtle

 def move():
direction = turtle.textinput('Input direction', 'Go left or right?') if direction == 'left':
turtle.left(60)
turtle.forward(100)
else:
turtle.right(60)
turtle.forward(100) move() turtle.exitonclick()

将 7-12 行的代码翻译成大白话就像下面这样,

 如果变量 direction 等于 left,则执行下面的语句
turtle.left(60)
turtle.forward(100)
否则,执行下面的语句
turtle.right(60)
turtle.forward(100)

注意体会前后 2 个版本细微的差别。考虑用户输入一个既不是 left 也不是 right 的字符串(或者直接点击 cancel 按钮)。

  • 前一个版本中,海龟不会发生运动。因为此时, if direction == 'left': 不成立, if direction == 'right': 也不成立,所有的绘图代码都没有机会执行。
  • 后一个版本中,海龟会往右下方向运动。因为,后一个版本只检查 if direction == 'left': 是否成立。当该条件不成立时,不论变量 direction 的值是多少,它都会执行 else 对应的语句。

要实现和第 1  个版本一样的效果,我们可以用 if … elif 这样的语法。

 import turtle

 def move():
direction = turtle.textinput('Input direction', 'Go left or right?') if direction == 'left':
turtle.left(60)
turtle.forward(100)
elif direction == 'right':
turtle.right(60)
turtle.forward(100) move() turtle.exitonclick()

这个版本中,程序会依次,

  • 先检查 if direction == 'left': (第 7 行)的条件,如果成立则执行相应的代码(第 8, 9 行),并忽略剩余的其他条件。如果不成立,则顺次检查下一个条件  if direction == 'right': (第 10 行)。
  • 类似地,如果该条件成立,则执行相应的代码(第 11, 12 行),并忽略剩余的其他条件,否则再顺次检查下一个条件。
  • 这样一直重复下去,直至没有可检查的条件为止。

虽然,第 3 个版本和第 1 个版本,最终呈现的效果是一模一样的,但它们的内部的执行过程,仍然有细微的差别。

  • 第 1 个版本中,程序一定会检查条件 if direction == 'right': 是否成立,无论前一个条件  if direction == 'left': 是否成立。
  • 最后一个版本中,程序只有在前一个条件 if direction == 'left': 不成立的时候,才会检查条件  if direction == 'right': 是否成立。

因此,虽然最终的效果是一样的,但从执行效率上来看,最后一个版本要略微高效一些。

原文链接:http://www.ipaomi.com/2017/11/23/python-零基础-快速入门-趣味教程-咪博士-海龟绘图-turtle-6-条/

Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 6. 条件的更多相关文章

  1. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 7. 条件循环

    条件循环能够让程序在条件成立时(即为真时)重复执行循环体中的语句.如果条件一直成立(即永远不会为假),则循环会一直进行下去,不会停止.如果初始时,条件不成立,则循环 1 次也不会执行.Python 中 ...

  2. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 4. 函数

    什么样的程序员才是优秀的程序员?咪博士认为“慵懒”的程序员才是真正优秀的程序员.听起来不合逻辑?真正优秀的程序员知道如何高效地工作,而不是用不止境的加班来完成工作任务.函数便是程序员高效工作的利器之一 ...

  3. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 3. 循环

    在前面的教程中,咪博士留了一道练习题给大家—-画正方形,相信聪明的你应该已经画出来了. 下面是咪博士实现的代码. 是不是跟你的代码很像呢? import turtle turtle.forward(2 ...

  4. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 2. 变量

    大家在中学就已经学过变量的概念了.例如:我们令 x = 100,则可以推出 x*2 = 200 试试下面这段 Python 代码 import turtle turtle.shape("tu ...

  5. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 1. 神秘朋友

    Python (Windows 下) 自带了一个非常有趣的 海龟绘图程序 (turtle),它是本系列课程的主角. 在 PyCharm 中,新建一个项目,然后在代码编辑器中输入 import turt ...

  6. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 0. 准备工作

    一.关于 Python Python 是全球使用人数增长最快的编程语言!它易于入门.功能强大,从 Web 后端 到 数据分析.人工智能,到处都能看到 Python 的身影. Python 有两个主要的 ...

  7. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 5. 参数

    上一个教程中,咪博士带大家学习了函数的使用.例如,line_without_moving 函数,可以让海龟先画出一条线段,然后再回来起点. def line_without_moving(): tur ...

  8. Python 零基础快速入门!

    “人生苦短,我学python”是编程届的名言.用python写小脚本的便捷性,让很多其他语言的学习者把python当作辅助语言.拥有了某一个语言的功底,再来学习另外一种语言应该是十分快速的.编程理念都 ...

  9. 序言 - PHP零基础快速入门

    我为什么要写<PHP零基础快速入门>? 原因: PHP 真心简单,适合零基础的人快速入门掌握,身边的人学习一两周上手开发的比比皆是: 市面上的文章或书籍对初学者并不友好,多半枯燥乏味,我相 ...

随机推荐

  1. Kubernetes1.91(K8s)安装部署过程(八)-- kubernetes-dashboard安装

    kubernets-dashboard顾名思义是操作面板安装,也就是可视化管理机器,同意我们用镜像结合配置文件部署. 1.下载镜像: docker pull registry.docker-cn.co ...

  2. ESP32 电容式触摸按键设计

    手指和电容器接触时,相当于增加了电容,电容增加量与总电容的商就是电容的变化幅值,如果这个幅值超过门限,就认为触摸按键被激发了:

  3. TerraGate SFS 4.5 版本 发布矢量数据使用的Cache数据如何再返回成shapefile文件

    TerraGate SFS 4.5 版本 发布矢量数据使用的Cache数据如何再返回成shapefile文件? 两年前帮一个朋友解决过这个问题: 如果原来用4.5版本的时候,在网络环境下,为了提升调用 ...

  4. 微软被传证实收购 GitHub

    GitHub 是一个庞大的代码库,已经有越来越多的公司使用这个网站来共享和查看代码,其中不乏苹果.亚马逊.谷歌等大型科技公司.微软则是该网站的最大贡献者,并有超过 1000 名员工长期地将代码推送到 ...

  5. java中使用jxl读取excel中的数据

    package bboss; import java.io.File; import java.io.FileInputStream; import java.io.IOException; impo ...

  6. SQL Server CTE 递归查询全解(转载)

    在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例 ...

  7. BZOJ3926 ZJOI2015 诸神眷顾的幻想乡 Trie、广义SAM

    传送门 树上的任意一条路径一定会在以某一个叶子节点为根的树上成为一条直上直下的链,而总共只有\(20\)个叶子节点. 于是每一次选所有叶子节点中的一个作为根,形成一个\(Trie\),把\(20\)个 ...

  8. LiveCharts文档-3开始-7标签

    原文:LiveCharts文档-3开始-7标签 LiveCharts文档-3开始-7标签 Label就是Chart中表示数值的字符串,通常被放置在轴的位置和提示当中. 下图中的这些字符串显示的都是标签 ...

  9. Spring Aop: 关于继承和execution target this @annotation

    1.多态 target指通过这个对象调用的方法   (匹配标识对象的所有方法)  getMethod() this指调用这个对象的方法 (匹配标识对象实现的方法) getDeclaredMethod( ...

  10. [Spark][Python]对HDFS 上的文件,采用绝对路径,来读取获得 RDD

    对HDFS 上的文件,采用绝对路径,来读取获得 RDD: In [102]: mydata=sc.textFile("file:/home/training/test.txt")1 ...