前面的教程中,我们已经可以让小海龟绘制出各种图形了。但是,所有绘图的代码都是预先编好的,程序一旦运行起来,运行结果(绘制的图形)就是固定不变的。这一节中,咪博士将教大家如何让海龟响应用户的输入。
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?。
第 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 按钮)。
要实现和第 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()
这个版本中,程序会依次,
虽然,第 3 个版本和第 1 个版本,最终呈现的效果是一模一样的,但它们的内部的执行过程,仍然有细微的差别。
因此,虽然最终的效果是一样的,但从执行效率上来看,最后一个版本要略微高效一些。
原文链接: http://www.ipaomi.com/2017/11/23/python-零基础-快速入门-趣味教程-咪博士-海龟绘图-turtle-6-条/