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

 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. Random.nextInt()替换Math.random()

    在项目中使用哪个随机数 文章参考 http://liukai.iteye.com/blog/433718 今天用了find bugs后查出来了个问题 Google了下 发现 Random.nextin ...

  2. leetcode 124. Binary Tree Maximum Path Sum 、543. Diameter of Binary Tree(直径)

    124. Binary Tree Maximum Path Sum https://www.cnblogs.com/grandyang/p/4280120.html 如果你要计算加上当前节点的最大pa ...

  3. Spring配置跨域请求

    本文主要是Spring+SpringMVC+MyBatis/MyBatis Plus框架环境,包括SpringBoot同样适用. 1.编写拦截器 package com.interceptor; im ...

  4. MATLAB——神经网络init初始化函数和adapt函数

  5. 对 String 字符串的理解

    1.通过构造方法创建的字符串对象和直接赋值方式创建的字符串对象区别? 通过构造方法创建字符串对象是在堆内存. 直接赋值方式创建对象是在方法区的常量池. ==: 基本数据类型,比较的是基本数据类型的值是 ...

  6. BLDC

    BLDC working principle: https://www.bilibili.com/video/av31423350?from=search&seid=1569792618769 ...

  7. http协议进阶(四)报文首部

    之前写的关于报文首部的传送门: 报文首部:http://www.cnblogs.com/imyalost/p/5708445.html 通用首部字段:http://www.cnblogs.com/im ...

  8. GZIP压缩提高网络传输效率

    [spring]通过GZIP压缩提高网络传输效率(可以实现任何资源的gzip压缩.包括AJAX) gzip是http协议中使用的一种加密算法,客户端向web服务器端发出了请求后,通常情况下服务器端会将 ...

  9. 洛谷 P2256 一中校运会之百米跑

    题目链接 https://www.luogu.org/problemnew/show/P2256 题目背景 在一大堆秀恩爱的**之中,来不及秀恩爱的苏大学神踏着坚定(?)的步伐走向了100米跑的起点. ...

  10. Luogu3209 HNOI2010 平面图判定 平面图、并查集

    传送门 题意:$T$组数据,每组数据给出一个$N$个点,$M$条边,并存在一个$N$元环的图,试判断其是否为一个可平面图(如果存在一种画法,使得该图与给出的图同构且边除了在顶点处以外互相不相交,则称其 ...