当前课程知识点:Python 交互式程序设计导论 >  第1周 >  B 课程视频(逻辑及表达式) >  条件

返回《Python 交互式程序设计导论》慕课在线视频课程列表

条件在线视频

条件

下一节:编程技巧

返回《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语句也是可以实现的

但是呢 大家可以想一想 那个嵌套的层次可能会比较多

作为初学者来讲理解起来或者书写起来都不是太容易

所以建议大家呢 前三种的语法结构要熟练掌握

那么第四种的这种嵌套结构呢 大家能够阅读

作为初学者 就暂时够用

好 今天的课程就讲到这里

Python 交互式程序设计导论课程列表:

第0周

-课程简介

--课程简介

-A 课程视频(算数操作符及表达式)

--绪论

--Python交互式解释器使用方法

--PyCharm集成开发环境介绍

--算数操作符及表达式

-B 课程视频(变量及赋值)

--变量

--项目提交

--“我喜欢Python”热身小项目

-C 辅助视频(计算机结构、Python开发环境安装)

--Windows平台安装Python开发环境

--Mac平台安装Python开发环境

-D 辅助视频(如何提交项目)

--项目提交

-第0周--小测验

-本周项目:"我喜欢Python"

--项目发布、完成、提交及评分流程

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

--项目提交

第1周

-A 课程视频(函数)

--函数

--其它操作符

--随机函数

-B 课程视频(逻辑及表达式)

--逻辑值和比较

--条件

--编程技巧

--“老虎杠子鸡虫”游戏

-第1周--小测验

-本周项目:“老虎杠子鸡虫”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第2周

-A 课程视频(Python交互式应用)

--事件驱动编程

--事件可视化跟踪执行

--SimpleGUITk

--按钮

-B 课程视频(输入框、全局变量)

--输入框

--局部变量和全局变量

--编程技巧

--“猫咪藏在哪个房间”游戏

-第2周--小测验A

-第2周--小测验B

-本周项目:猫咪藏在哪个房间

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第3周

-A 课程视频(画布绘图)

--画布和图形绘制

--字符串处理

--绘图和计时器可视化跟踪执行

--图片和音效

-B 课程视频(计时器)

--计时器

--交互式绘图

--“神奇时钟”游戏

--编程技巧

-第3周--小测验A

-第3周--小测验B

-本周项目:“神奇时钟”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第4周

-A 课程视频(列表)

--列表

--键盘输入

--列表及变化可视化跟踪执行

--碰撞和反射

-B 课程视频(键盘控制)

--速度控制

--运动

--编程技巧

--“桌上冰球”游戏

-第4周--小测验A

-第4周--小测验B

-本周项目:“桌上冰球”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第5周

-A 课程视频(鼠标输入、列表进阶)

--鼠标输入

--Video

--Video

--Video

-B 课程视频(字典和图片)

--Video

--Video

--Video

--Video

-第5周--小测验A

-第5周--小测验B

-本周项目:“世界杯八强连连看”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第6周

-A 课程视频(类)

--面向对象编程(类和对象入门)

--面向对象编程(类和对象进阶)

--对象可视化跟踪执行

--华容道中的类

-B 课程视频(平铺图片)

--平铺图片

--理解对象

--编程技巧

--“华容道”游戏

-第6周--小测验A

-第6周--小测验B

-本周项目:“华容道”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第7周

-A 课程视频(类进阶及文件操作)

--集合

--文件操作

--文字块类

--处理停止的文字块

-B 课程视频(游戏状态控制)

--游戏记分规则

--游戏结束的条件及处理

--编程技巧

--“决战三字经”游戏

-第7周--小测验A

-第7周--小测验B

-本周项目:决战三字经

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

第8周

-A、课程视屏(精灵集合)

--Video

--精灵类

--战士类

--编程技巧

-B、课程视屏(动画)

--精灵碰撞

--精灵动画

--编程技巧

--保卫家园游戏

-第8周--小测验

-本周项目:守卫家园

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

条件笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。