zoukankan      html  css  js  c++  java
  • Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 6. 条件

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

     1 import turtle
     2  
     3  
     4 def move():
     5     direction = turtle.textinput('Input direction', 'Go left or right?')
     6  
     7     if direction == 'left':
     8         turtle.left(60)
     9         turtle.forward(100)
    10  
    11     if direction == 'right':
    12         turtle.right(60)
    13         turtle.forward(100)
    14  
    15  
    16 move()
    17  
    18  
    19 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 行的代码。

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

    1 如果变量 direction 等于 left,则执行下面的语句
    2     turtle.left(60)
    3     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 的语法。

     1 import turtle
     2  
     3  
     4 def move():
     5     direction = turtle.textinput('Input direction', 'Go left or right?')
     6  
     7     if direction == 'left':
     8         turtle.left(60)
     9         turtle.forward(100)
    10     else:
    11         turtle.right(60)
    12         turtle.forward(100)
    13  
    14  
    15 move()
    16  
    17  
    18 turtle.exitonclick()

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

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

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

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

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

     1 import turtle
     2  
     3  
     4 def move():
     5     direction = turtle.textinput('Input direction', 'Go left or right?')
     6  
     7     if direction == 'left':
     8         turtle.left(60)
     9         turtle.forward(100)
    10     elif direction == 'right':
    11         turtle.right(60)
    12         turtle.forward(100)
    13  
    14  
    15 move()
    16  
    17  
    18 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-条/

  • 相关阅读:
    二叉查找树
    Hash算法原理理解
    算法的时间复杂度
    解决Ubuntu14.04下Clementine音乐播放器不能播放wma文件的问题
    Ubuntu 14.04 开启启动器图标最小化功能
    Ubuntu14.04建立WiFi热点
    C语言运算符优先级
    老鸟的Python入门教程
    MD5算法步骤详解
    MD5算法
  • 原文地址:https://www.cnblogs.com/ipaomi/p/7985786.html
Copyright © 2011-2022 走看看