当前课程知识点:Python 交互式程序设计导论 > 第1周 > B 课程视频(逻辑及表达式) > 条件
返回《Python 交互式程序设计导论》慕课在线视频课程列表
欢迎回到Python交互式程序设计课程中
今天我会带领大家学习一个非常有意思的问题
造句
可能有的同学会问
我们在很小的时候就造过很多句子
今天还要再学么
是的 我们跟小时候学的造句不同的是
今天学的造句是在计算机程序设计中
按照计算机语言的语法规则来进行造句
让计算机能够理解你的思想
好 下面开始今天的内容
今天我们要学的造句的规则在Python程序设计中
我们称之为条件判断
那么下面我们来看一个例子
我请大家用如果 那么 否则 来造一个句子
同学们肯定会造出很多的句子
我在左边呢 给大家列出了一个简单的例子
如果考试成绩大于等于60分
那么就算你及格了
否则就是不及格
这是非常简单的一个逻辑
那么人们理解它是非常容易的
计算机去理解这个逻辑结构通常会采用右边这个结构
if成绩>=60 及格 else 不及格
这里的if else我用红色标注出来的
实际上是计算机理解这样逻辑结构的一个关键字
if翻译成汉语就是如果的意思
else就是否则的意思
那么注意
我在右边列出的这个语句表达呢并不是Python的标准语法
它只是计算机去理解类似逻辑关系的一种结构
那么在这呢我列出了Python中条件判断的语法结构
那么大家请看左边这张表
if条件成立 冒号
执行的是语句1和语句2
注意语句1和语句2前面我写了一个下划线
这个下划线呢实际上不应该存在
它代表前面有四个空格
也就是我们经常说的缩进格式
那么else后面也有一个冒号
它紧跟着语句2和语句3
语句2和语句3前面也会有一个缩进结构
那么我们把这个结构详细讲解一下
同学们请看
if和else是Python的条件判断的关键字
分别表示如果 否则的意思
那么这个所谓的条件成立是什么意思呢
条件通常是一个布尔表达式
换句话说就是会通过逻辑运算返回一个true or false
就是真或者假 或者说成立或者不成立
这样一个结果的表达式
我们把它称之为布尔表达式
在前面的课程当中同学们应该已经学过
那么这个表达式的后面有一个冒号
注意这个冒号很多初学的同学容易丢掉
这个冒号必须要有
它表示的是 从下一行开始语句1 语句2都隶属于这个条件
什么意思呢
就是说这个冒号之后的语句如果保持一定的缩进结构
那么下面的这些语句都隶属于我这个条件
当我这个条件成立 下面的语句被依次执行 是这个含义
好 再来看这个所谓的缩进结构
这个缩进呢通常是四个空格
当然我们在编程当中为了提高效率
通常在键盘上敲Tab键
设置好一个Tab是四个空格
它表示的代码的逻辑关系 这个缩进是必须要有的
有些同学可能喜欢敲空格
敲两个 三个不确定
这种混乱的缩进格式是非常不好的
可能会造成语法混乱
为了说明这个问题
我下面又举了个例子 大家请看
在这张幻灯片的左右两侧我分别列出了很多的单位
大家看一下 左边 右边 这两种结构
哪一种结构看起来会更加让人容易明白
我相信绝大多数同学会认为右边的结构更容易让人明白
为什么呢 因为右边的结构
新疆农业大学 冒号
并且在下面两个学院的前边有一定数目的空格表示缩进
这个时候呢它的隶属关系表达的就非常清楚
我们可以很直观的感觉到
新疆农业大学下面的计算机学院和管理学院
而新疆大学下面的是软件学院和人文学院
如果把这些单位全部顶格写像左边一样
那么大家可以想象
这种结构同学们很难识别出它们的隶属和层级关系
好 那么在Python当中啊
我们为了表达这种条件判断
通常呀采用四种的结构
这四种结构呢实际上大家学会一种
其它几种是触类旁通的
我们首先来看左边上面这个
如果x>0:(冒号) 缩进四个空格
print(‘x为正数’)
在这个语法结构中我们并没有出现else
换句话说我们只有如果怎么样怎么样
那么怎么样怎么样 并没有否则
这个逻辑也是成立的
比如说我举个例子
如果你今天认真听课
那么你会取得一个不错的成绩
我并没有说否则
那么下面这个
这个结构里面就包含否则了
我们来看一下
如果x>0:(冒号) 缩进四个空格
print(‘x为正数’)
else:否则 冒号不可丢 再有四个空格缩进
print(‘x不是正数’) 也就是负数
那么这结构呢 就是如果 那么 否则 这样一个完整的结构
我举个例子
如果你现在认真听课
那么你会取得好成绩
否则可能就会不及格
这是一个完整的如果 那么 否则的结构
那么中间这个结构呢同学们看起来可能比较复杂一些
实际上呢也非常容易理解
它实际上是把条件分成多个分支
前面两种结构呢
就是一个条件
要么是正 要么是反
而中间这个结构呢
实际上呢 把条件分成多个分支
比如说
如果x>0:那我判断的是 x为正数
否则又如果判断一下x<0:我认为x是负数
再否则x是零
从逻辑上来讲我们用这个中文去表达它好像不是太容易
但是大家可以想一想
我判断x这个数是正数 是负数 还是零
显然是三种情况
所以我要对这三种情况进行分别的判断
于是就有了这种结果
大家看
第一个条件判断的是x是正数么
如果它不是正数就有两种可能
是负数或者是零
那么这两种情况我还要分别判断
所以又写了一句叫elif
这个的含义是else if
简写else只取了前两个字母
所以是elif
那么这个分支呢 是来判断x是否为负数
如果它是小于零的 那显然它是负数
如果这个条件再不成立呢
它会进入下一个分支
最后一个分支那显然只有一种情况
x一定是0
所以我输出x是0
这种结构实际上在我们的现实问题当中是非常常见的
我后面会给大家举具体的例子来描述
好 最后一种结构呢 我们把它称之为if语句的嵌套结构
大家请看 在整个if语句里面 我们首先看红色部分
是完整的if else 有冒号 有缩进 很清楚
那么在这个else下面呢
我又画了一个虚线框
这个虚线框里面本身又是一个
if else 一个完整的if语句
那么大家看 这是不是两个if语句完成了嵌套呢
实际上大家看 从最外层这个if
跟左下角这个结构是完全一样的
只不过我们把else后面的这一条语句
换成了这样一个虚线框里面的这样一个if的完整语句
所以就相当于
把这个作为一条语句嵌入到了这个if 的else下面的这个分支
这种结构呢 不推荐同学们作为初学者常用
因为用的嵌套层次比较多的时候
容易发生理解上的困难
在这我想提醒一下大家
实际上我们对程序的理解和阅读啊
我们要通过这种自上而下的
或者从宏观到局部的这样阅读方式
那么这个例子我们就可以初步的感受到
首先我们看最顶层的if else
我们知道x>0是正数 否则
否则后面还要继续判断啊
所以我嵌入了另外一个if
这是一个局部
而整个的if是在这个大框里
这是整体和局部的关系
随着我们的程序越写越复杂 代码行数越来越多
大家会逐渐感觉到我们阅读程序会有困难
为什么会有困难呢
是因为同学们可能还不熟练阅读方法
一个基本的技巧是
从整体 从宏观 到局部 到微观
好 那么有两点需要提示大家的
尤其是作为初学的同学
从严格意义上来讲
Python中这个条件判断语句的条件
应该是一个布尔表达式
比如说x>0 5>2 7-2>0类似于这样的表达式
但Python的要求呢没那么严格
任何非0的数我们都解析为true
就是对的 真的 成立的
任何非0的
那么0自然被解析成false
换句话说如果你写一个if 0:怎么样怎么样
那这些语句是永远不会被执行的
因为0就是假 就是false
第二个需要注意的是
代码缩进的时候不要制表符 就是Tab键
和空格键混用
每一层次的缩进必须严格一致
那么有些同学习惯敲空格
你敲空格的时候就必须要保证空格数是一致的
所以我建议大家养成用Tab键来实现缩进这样一个习惯
我们在pycharm的实际开发环境中
给大家逐一演示课件中提到的Python的条件判断的语法结构
首先呢 我们需要定义一个变量x
给它赋值为90 代表某一同学的成绩
以此作为判断条件 来演示下面这种结构
首先我们演示最简单的一种if结构
如果x>=60:(冒号) 回车
大家请看pycharm的开发环境呢
它会自动保持这种缩进结构
同学们不需要去敲
但无意当中如果你删除了这个缩进
请大家按Tab键 它会自动保持缩进结构
那么x>=60 显然你的成绩是及格的
于是我在这输入及格
好 最简单的if语句的写法呢就是这样
运行一下 大家看 及格
那么改一下这个成绩
我把它改成50 运行
没有任何输出
当然了 同学们请看
50>=60么 显然不是 应该是小于的
于是这个条件不成立
不成立它没有后续的语句
所以它就不管了 不执行
所以这种if语句呢实际上是一个分支
就一个分支 就判断一种情况
好 我们还是把它写成90
在这为了让大家能够避免犯初学者容易犯的错误
我给大家人为的制造两个错误 大家看一下
有些同学呢可能会有这样的问题 少了冒号
那么少了冒号呢 pycharm实际上已经用红色波浪线提示你了
你这可能会少东西
假设你忽略了 你直接运行
看看会发生什么事情呢 大家请看
在控制端 大家看一下
有这样一个提示
首先告诉你错误的位置是第四行
然后告诉你是这条语句
应该在60的附近发生了语法错误
当你看到这样一个提示呢
同学们不要觉得无法解决
实际上是非常容易解决的
你只要仔细看一下 它会提示你波浪线的位置
显然我们少了个冒号
好 为什么我补了个冒号还会报错呢
再运行一下 看一下
它还会告诉你这个地方有错
并且指的很精确 冒号
实际上呢同学们留意一下
我在这输的冒号是中文状态的冒号 所以它会报错
我们把它切换为英文状态 再输一个冒号
各位同学比较一下
这个是英文的冒号 这个是中文状态下的冒号
那么在程序当中我们当然要用英文的冒号
所以呢 我们把中文的冒号删掉
我们再来看一下 ok 程序跑起来了
那么第二个容易犯的错误呢 是缩进方面的
假设有些同学把这个缩进结构呢不小心破坏了
我们再运行一下
它告诉你第五行发生错误 什么错误呢
是这个print函数好像发生了缩进方面的错误
(indented)这个单词是缩进的意思
有了这个提示 同学们可以很容易的看到
在这有个红色的波浪线
那么我们保持缩进
缩进呢我建议大家用Tab键来维持它的缩进结构
好 关于第一种的if的这种结构呢
我们就演示到这 非常简单
下面我们来演示第二种if else的
把第一个例子做一个扩展
我们直接把第一个例子复制一下
把第一个例子呢我们删掉
我们用if else来完成
如果x>=60分表示你及格了
那么再加一个else否则
敲完回车以后它会保持缩进
那我们else要顶头写因为它跟if是同一个层次的
好 else:(冒号) 不要丢 回车
输出 输出不及格
好 运行一下
及格 因为我们成绩的初值是90分 当然是及格的
现在我再把它改成50分 运行一下
这显示的是不及格
这很好理解
我们再来把它翻译一下 翻译成自然语言
如果x的值大于等于60 显示及格
否则 那就是小于60啦 显示不及格 非常简单
好 下面呢我们来介绍第三种相对复杂一点的语法结构
我们除了把成绩可以分为及格和不及格两个档次以外
我们还经常把程序分为优 良 中 及格 不及格 分得更细了
这个时候显然判断的条件已经不是一个了
它可能会涉及到若干个分支
怎么来实现呢
就用到我们前面讲过的if elif else这样的一个结构
需要注意的是
这个elif不仅仅是只能为一个 它可以取多个
好 通过这个例子我们来讲解一下
如果x的成绩是大于等于90分的 冒号 回车
那么我告诉你 你的成绩是优秀的
否则我们要判断的是良好
这个否则是elif 判断的是良好
你的成绩如果大于等于80分 冒号
返回的结果是良好
下面该判断中等了
所以我是elif 你的成绩如果大于等于70分 冒号
(输出)中等
如果你的成绩大于等于60分 冒号
显示的结果是及格
好 停到这里
我们看一下 一个成绩
如果你大于90 我判断你是优秀
如果这个条件不成立 那就意味着成绩是小于90的
那么判断一下你小于90但你大于80么
如果在这个分数段就是良好
如果这个条件也不成立 在这个分数段就是中等
最后大于等于60是及格
那么除了这些条件以外 最后一个条件就只能是不及格
也就意味着x小于60
所以最后一个条件呢 我们就不写elif了
而直接写else
它表示上述条件都不成立那就只能执行我了
else那么一定是什么 不及格
好 我们运行一下 大家先看一下x的初值为50
那么判断它应该显示的是不及格 运行的结果是不及格
好 看一下是不及格
我们把上面的这个注释一下 删掉
我们就看这个语法结构
好 运行一下 显示的是不及格
它的判断过程是怎么样的呢
首先 拿来一个x的成绩是50
好 进入这个判断
50大于等于90么 显然不成立 进入下一分支
50大于等于80么 也不成立 进入下一分支
50大于等于70么 也不成立
大于等于60么 也不成立
那也就只能最后一个条件 不及格
好 我们把它改一下 改成95分 再运行一下
好 大家看 是优秀
那么它的判断过程是
x等于95 95大于等于90么
成立 直接输出优秀 后面的判断都不进行
那假设我们输入85分 再来运行一下
好 是良好
那么这时候呢它的判断过程是
85大于90么 显然不成立 进入下一分支
85大于等于80么 成立 于是输出良好
后续的这些判断条件都不去判断了
这样一个结构呢看起来是比较复杂的
实际上呢 在我们实际问题的解决中是非常常用的
同学们刚开始(运用起来)可能有些困难
通过你不断的模仿 练习 你会逐渐熟悉它
好 下面呢 我们来讲最后一个结构
叫条件判断的嵌套结构
好 这个条件判断的嵌套结构呢 我们不推荐初学者用
因为这里面呢
可能多层嵌套会带来一个结构上的混乱 不易阅读
我在这只举一个简单的例子 大家感觉一下
我们判断它是正数 负数 还是零
if x>0:(冒号) 那我们一定判断它是正数
好 否则 同学们想一想
如果x大于0是正数 那么不大于0有几种情况呢
两种情况 一个是0 一个小于0
于是在else底下 我们还需要嵌套另一个if结构
if x<0: 输出负数
好 判断完负数以后 只有一种情况了 那自然是零
所以else 零
好 运行一下 正数
它的判断过程是 x=85
85大于0么 成立 所以直接输出这个
而else后面的判断 这一块都不进行了
好 我们改一下 我们把它改成0
运行一下 判断的结果是0
它的判断过程是这样
x是0 来判断一下0>0么
不成立 就进入了这个else的分支
else分支呢 是一个嵌套的if语句
于是这个x呢 要进行判断下一个条件
x<0么 不小于 因为x本身是0
所以这个分支也不执行
它又进入了这个else 于是显示的是0
也就是说
这个if语句是作为一个子if语句嵌套于这个else底下的
当你这个x>0的条件不成立
它会进行else这个分支
然后进入这个if语句进行进一步的判断
好 那么大家可以想一想
刚才我们举得那个把成绩分为优 良 中 及格 不及格这个例子
用嵌套的if语句也是可以实现的
但是呢 大家可以想一想 那个嵌套的层次可能会比较多
作为初学者来讲理解起来或者书写起来都不是太容易
所以建议大家呢 前三种的语法结构要熟练掌握
那么第四种的这种嵌套结构呢 大家能够阅读
作为初学者 就暂时够用
好 今天的课程就讲到这里
-课程简介
--课程简介
-A 课程视频(算数操作符及表达式)
--绪论
-B 课程视频(变量及赋值)
--变量
--项目提交
-C 辅助视频(计算机结构、Python开发环境安装)
-D 辅助视频(如何提交项目)
--项目提交
-第0周--小测验
-本周项目:"我喜欢Python"
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
--项目提交
-A 课程视频(函数)
--函数
--其它操作符
--随机函数
-B 课程视频(逻辑及表达式)
--逻辑值和比较
--条件
--编程技巧
-第1周--小测验
-本周项目:“老虎杠子鸡虫”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(Python交互式应用)
--事件驱动编程
--按钮
-B 课程视频(输入框、全局变量)
--输入框
--编程技巧
-第2周--小测验A
-第2周--小测验B
-本周项目:猫咪藏在哪个房间
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(画布绘图)
--画布和图形绘制
--字符串处理
--图片和音效
-B 课程视频(计时器)
--计时器
--交互式绘图
--“神奇时钟”游戏
--编程技巧
-第3周--小测验A
-第3周--小测验B
-本周项目:“神奇时钟”
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(列表)
--列表
--键盘输入
--碰撞和反射
-B 课程视频(键盘控制)
--速度控制
--运动
--编程技巧
--“桌上冰球”游戏
-第4周--小测验A
-第4周--小测验B
-本周项目:“桌上冰球”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(鼠标输入、列表进阶)
--鼠标输入
--Video
--Video
--Video
-B 课程视频(字典和图片)
--Video
--Video
--Video
--Video
-第5周--小测验A
-第5周--小测验B
-本周项目:“世界杯八强连连看”
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(类)
--华容道中的类
-B 课程视频(平铺图片)
--平铺图片
--理解对象
--编程技巧
--“华容道”游戏
-第6周--小测验A
-第6周--小测验B
-本周项目:“华容道”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(类进阶及文件操作)
--集合
--文件操作
--文字块类
--处理停止的文字块
-B 课程视频(游戏状态控制)
--游戏记分规则
--编程技巧
-第7周--小测验A
-第7周--小测验B
-本周项目:决战三字经
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板
-A、课程视屏(精灵集合)
--Video
--精灵类
--战士类
--编程技巧
-B、课程视屏(动画)
--精灵碰撞
--精灵动画
--编程技巧
--保卫家园游戏
-第8周--小测验
-本周项目:守卫家园
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板