「蓝桥」Python 的流程控制

在上节课中,我们都是在 Python 的命令行交互环境中学习 Python。但在实际的开发工作中,我们要把代码写进一个文件里,这样不管拿到哪里都可以执行,而且方便修改和调试。

所以在开始之前,我们先学习一下怎么创建 Python 文件并执行。

知识点

  • Python 文件的创建和执行
  • 流程控制
  • 条件判断
  • 循环

Python 文件的创建和执行

在开发过程中经常被使用到的 Python 程序,是一个或多个的脚本文件,通常会以 .py 作为文件后缀。当完成脚本的编写后,可以用 Python 解释器来运行 Python 脚本。

在实验环境中,你可以使用 vimsublime 或 gedit 来编写 Python 程序,这里以 gedit 举例:

💡 创建和打开文件

你可以通过两种方式,创建和打开 Python 文件:

1. 命令行方式创建

在 Xfce 终端中输入:

gedit test.py

这行命令的作用是:用 gedit 打开 test.py 文件;如果该文件不存在,则 创建 它并打开。

执行命令后,我们看到 gedit 弹了出来,而且文件名是 test.py

2. 在 gedit 中创建

还可以先打开 gedit 程序,再点击菜单栏的 文件新建,即可创建一个新的空白文件。

💡 保存文件

在 test.py 文件中输入以下的代码内容:

print('hello shiyanlou')

输入完成后,按下 ctrl + s 或点击 保存 按钮,即可保存。

(如果你是在 gedit 中新建的文件,保存时请输入文件名 test.py,并注意存放路径是否在 home 目录)

💡 执行 Python 文件

保存文件后,先关闭 gedit ,然后打开 Xfce 终端,直接使用 Python3 解释器执行 test.py :

python3 test.py

可以看到 hello shiyanlou 输出到了屏幕上。

流程控制

下面,我们来学习计算机系统中的一大核心知识——流程控制。

「 流程控制 」是一个程序的关键所在。简单的说,「流程控制」就是告诉计算机什么时候该干什么事。比如一个游戏中,你要让计算机清晰地知道 —— 什么情况下会掉血,按下什么键代表攻击,过多久能复活……

学会流程控制后,你就可以用程序做很多事,比如:

写一个扣税计算器:

写一个抽卡游戏:

接下来,我们先来学习流程控制中的条件判断。

条件判断

其实我们每天都生活在条件判断中:早上如果闹钟 ⏰ 响了,执行起床/赖床程序;如果到了 12 点,执行吃饭程序;如果到了 6 点,执行下班或放学……

如果有一天,你的女朋友对你说,“下班买 2 个西瓜回来”,你会这样执行:

换成 Python 代码,买西瓜的程序还是一样的,只不过把 如果否则 换成了 ifelse 。

挺容易理解的吧?其实就是用代码告诉计算机:什么条件下该做什么

很多编程语言都会使用 if 、else 作为流程控制的关键字。 if 语句最简单的构成是这样的:

if SomethingHappen:
    DoThisCode

⚠️ 注意第 1 行末尾的冒号 : 和第 2 行的 4 个空格缩进,原因会在后面详解。

除此之外,Python 还加入了 elif,即 else if,方便执行更复杂的判断。

如:买 2 个西瓜,4 个苹果,5 根香蕉

代码如下(示例,非标准代码) :

if 看到卖西瓜的:    #当满足条件时,执行内部的代码;如不满足,则跳到下一个语句块
    买 2 个
elif 看到卖苹果的:
    买 4 个
elif 看到卖香蕉的:
    买 5 根
else:   # 如果上面的条件都不满足,则执行 else 内部的代码
    不买

比较大小游戏

让我们写一个比大小的游戏,进一步熟悉条件判断的语法:

在终端中输入 gedit compare.py,然后在打开的 gedit 中输入:

a = int(input("Please enter a number: "))
## 让用户输入一个数字,用变量 a 接受
if a > 10:   ##如果 a > 10,则执行内部的代码,反之跳过
    print('a > 10')
    ## 请特别注意语句块内的空格缩进,请使用 4 个空格缩进。
    ## 请特别注意语句块内的空格缩进,请使用 4 个空格缩进。
    ## 请特别注意语句块内的空格缩进,请使用 4 个空格缩进。
elif a == 10:
    print('a == 10')
else:
    print('a < 10')

⚠️ 注意:以下五点,都很重要

  • if、elif、else 后要加冒号 :,告诉计算机这是一个判断语句,如满足条件,就执行语句块内部的代码。
  • Python 使用严格的缩进,来区分代码块的执行级别。比如 if 下面的代码要缩进四个空格,代表的是 if 内部的功能;else 下面的代码同样要缩进四个空格,代表是 else 内部的功能。
  • 推荐使用 4 个空格缩进;也可以在编辑器内,把 Tab 键改为四个空格,用 Tab 键缩进。
  • 用 input() 接受到的用户输入,类型为字符串 string,但字符串不能和整数比较大小,所以要用 int() 函数将数据转换为 int 整数类型。
  • 使用 int() 函数,可以把括号里的内容转换为整数,但要注意:只有数字或纯数字的字符串才能转换,如’a’、’abc’这样的内容就不行;float 类型的数字会只保留整数部分。

保存文件,关闭 gedit 后,在终端中输入 python3 compare.py ,运行刚刚的程序。

输入数字后,屏幕上打印出了比较结果,第一个条件控制程序成功!

更多判断

💡 在一个判断中,还可以嵌套另一套判断,比如当男人喜欢上一个人时:

if 那个人是女人:
    if 单身:
        你可以追求她
    else:
        放弃
else:
    成为基友

💡 还可以使用 and 和 or 进行综合控制

if 那个人是女人 and 单身:   # A 和 B必须同时满足才能执行
    你可以追求她
else:
    成为基友

又比如:你今天不想吃饭,除非吃火锅或者烧烤:

if 火锅 or 烧烤:   # A 或 B 满足一个即可执行
    吃饭
else:
    不吃饭

在程序开发过程中,当遇到一些代码暂时不写(等到后面写),又不想程序在执行时报错的情况,可以使用 pass 关键字,程序执行遇到 pass 就会跳过这里的代码块继续执行后面的代码:

>>> a = 3
>>> if a<1:
...     print("a<1")
... else:
...     pass
...
>>> #程序没有报错

循环控制

对人类来说,「循环」糟糕透了,它往往意味着重复和枯燥。但大多数人都在循环中工作和生活,比如收集用户信息、下载 500 张图片、上 12306 抢春运的火车票、给 20 个亲戚解释你不是修电脑的……想想就如噩梦一般,相信没有人想过这种流水线的生活。

但有了计算机,一切都大不一样了:它任劳任怨、不会抱怨,而且工作速度比人快成千上万倍。你只需要制订好一些规则,然后在旁边泡杯茶,看云展云舒即可。

Python 中包含两种循环方式,一种是 for 循环,一种是 while 循环

💡 for 循环

for循环主要用于对一个范围内的每个元素进行指定操作。

语法如下:

比如在一个班级里,点名册就是一份列表,每个姓名都是一个元素。现在你是班长,每天上课前的点名太费劲了,你需要一个点名程序。

用 for 循环,2 行代码即可实现该功能:

namelist = ['Sophia','Emma','Olivia','Ava','Mia','Isabella','Zoe','Lily','Emily','Madison','Jackson','Aiden','Liam','Lucas','Noah','Mason','Ethan','Caden','Logan','Jacob']
# 点名册
for i in namelist:
    print(i)

在环境中练习一下:

💡 提示: namelist 可以通过右侧工具栏中的「剪切板」粘贴进去;print() 前同样要注意 4 个空格的缩进。

💡 range() 函数

如果需要处理一组数字列表,并且数字列表满足一定的规律,可以使用 Python 的内置函数 range()(范围)。

使用 range(x) 函数,可以生成一个从 0 到 x-1 的整数序列,比如我们想打印 0 到 9 的数,可以这样写:

for a in range(10):
    print(a)

还可以用 range(a,b) 取某个区间的数,比如要打印 1 到 10 ,你可以写:

for a in range(1,11):
    print(a)

⚠️ 注意: range(a,b) 包头不包尾,尾数要 + 1 。

🔥 小练习:帮依萍写日记

书桓走后,可怜的依萍每天只能对着日记,遥寄思念。现在,请你用 for 循环帮依萍写出“书桓走的第 n 天,想他”,一直写到第 10 天。

💡 提示:

  • range(a,b)
  • for … in …
  • print(‘书桓走的第 {} 天,想他’.format(i))
  • 如果忘了 .format() 的用法,可以在上节实验文档中查阅一下

💡 while 循环

另外一种循环是 while 循环,它的语法和用途都和 for 循环 有些不同。

for 循环 适用于 已知循环次数 的循环,所以后面跟的是次数或区间,到达指定次数就停止。

但现实生活中,我们往往不知道要循环多少次,才能达成目标。比如“愚公移山”,愚公不知道门前有多少座山,但只要门前有山,就要盘它,这种情况我们要怎么写?

while 循环 可以帮你解决这个问题。while 后面跟的是一个条件,只要条件满足,这个循环就会一直进行下去。

具体语法如下:

有了 while 循环 ,愚公可以这样移山:

while 山还在:
    盘它!

🔥 小练习: 下面,我们来用 while 循环,打印 1 到 10 的数字,亲手感受一下 while 循环有哪些不同:

a = 1
while a <= 10:  ##同样注意冒号和语句块缩进
    print(a)
    a = a + 1

这个程序是这样运转的:

一开始,a 的预设值为 1。

来到第二行的 while 循环,此时 a <= 10,满足条件,进入循环。

进入第三行,执行循环中的命令,打印 a 的值。

进入第四行,把 a 的值加 1 ,a 的值变成了 2,至此一轮循环结束。每轮循环结束后,程序会跳转到循环开头(即图中的第二行),再次判断是否满足循环的条件,如满足则再次执行循环。在这里,a = 2 ,2 <= 10,满足条件,则再次进入循环……

……

直到 a > 10 为止,循环条件不再满足,循环停止。

再总结一下两种循环的区别:

💡 break 和 continue

💡break

在循环中,我们可以使用 break 和 continue 这两个关键字,来进一步控制流程。

break 表示停止当前循环,如:

for a in range(10):
    if a == 5:
        break
    print(a)

程序会打印 0 到 4 之间的数字。

💡continue

continue 表示跳过当前循环轮次,去执行下一轮循环。

比如这次我们想打印 1 到 10 的数,但不想打印 5 ,代码可以这样写:

a = 0
while a < 10:
    a = a + 1
    if a == 5:
        continue
    print(a)

至此,流程控制 就暂时介绍完了。流程控制 在编程中非常重要,请下来多多练习和总结,后面还有一个挑战等待你完成。

总结

我们来回顾一下今天的知识点:

  • Python 文件的创建和执行
  • 流程控制
  • 条件判断
  • 循环

请课下把这些知识整理在你的 「脑图」 中,类似这样:

💡 不要忘了作业:

课后,我们为你准备了一个挑战 —— 用前面所学的知识完成一个小游戏。我们趁热打铁前进吧!

挑战:逢 7 就跳过

介绍

不知道你有没有玩过“逢 7 过”的游戏,游戏规则很简单:

几个人轮流报数,凡遇到 7 的倍数,或含 7 的数字就要跳过,否则就算失败。

今天我们就用 Python 来打印 1 到 100 之间,所有满足条件的数字。

“逢 7 就跳过”游戏

目标

  1. 请在 /home/shiyanlou 目录下创建 jump7.py 文件(请确保目录正确,否则无法通过挑战)
  2. 在文件中写入代码,打印 1 到 100 之间(包含 1 和 100),不是 7 的倍数、且不含 7 的数字,每行打印一个数字。
  3. 完成挑战后,请把文件复制到 /home/shiyanlou/Code 目录内,然后点击右侧工具栏的「 下载代码 」,把代码下载到本地, 我们在下个挑战中还会用到这段代码

知识点

  • Python 开发环境
  • int 类型
  • 变量
  • 运算符
  • while 循环
  • 条件判断

提示

⚠️ 前方高能,有剧透风险,喜欢挑战的同学请先独立思考,然后借着百度、谷歌来解出题目。

在实际的开发工作中,大部分工作也是靠着经验 + 思考 + 搜索引擎来完成的,你可以提前熟悉这个感觉。

💡(一)

开发中,我们经常要先构思框架,再优化功能。

所以在这个挑战中,你可以先用循环,写出打印出 1 到 100 间的数字的程序,之后再往里面加条件判断。

💡(二)

7 的倍数,可以理解为除以 7 余数为 0 的数;

a % 7 == 0

在 1 到 100 这个区间里:

  • 个位上是 7 的数,即除以 10 余 7 的数;
a % 10 == 7
  • 十位上是 7 的数,即除以 10 取整数为 7 的数。
a // 10 == 7

如果满足这些条件,就跳过;如不满足,则打印。可以用 elif 或 or 来加判定条件~

💡(三)

请保证文件名和存储路径都满足题目要求。

PS:还记得我们在第一节实验中,体验过的那个对战小游戏吗?其实你现在已经可以把那个游戏编写出来了!完成挑战后,不妨尝试一下~如果有什么问题,记得在群里和小伙伴们讨论一下。

作者: Hugh

Welcome to Wan's world~