在上节课中,我们都是在 Python 的命令行交互环境中学习 Python。但在实际的开发工作中,我们要把代码写进一个文件里,这样不管拿到哪里都可以执行,而且方便修改和调试。
所以在开始之前,我们先学习一下怎么创建 Python 文件并执行。
知识点
- Python 文件的创建和执行
- 流程控制
- 条件判断
- 循环
Python 文件的创建和执行
在开发过程中经常被使用到的 Python 程序,是一个或多个的脚本文件,通常会以 .py
作为文件后缀。当完成脚本的编写后,可以用 Python 解释器来运行 Python 脚本。
在实验环境中,你可以使用 vim、sublime 或 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 代码,买西瓜的程序还是一样的,只不过把 如果
、否则
换成了 if
、else
。
挺容易理解的吧?其实就是用代码告诉计算机:什么条件下该做什么。
很多编程语言都会使用 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 之间,所有满足条件的数字。
目标
- 请在
/home/shiyanlou
目录下创建jump7.py
文件(请确保目录正确,否则无法通过挑战) - 在文件中写入代码,打印 1 到 100 之间(包含 1 和 100),不是 7 的倍数、且不含 7 的数字,每行打印一个数字。
- 完成挑战后,请把文件复制到
/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:还记得我们在第一节实验中,体验过的那个对战小游戏吗?其实你现在已经可以把那个游戏编写出来了!完成挑战后,不妨尝试一下~如果有什么问题,记得在群里和小伙伴们讨论一下。