python3xiaobaike_2020/chapter4/4-1 python3小白课:if分支结构.md
2025-04-20 23:22:14 +08:00

209 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# python3小白课if分支结构
### 顺序结构
当我们没有指定代码运行结构的时候python是一条路走到黑的即从上往下一行行解析执行代码排在前面的先执行排在后面的后执行。
但我们的世界都是一条路走到黑的吗?
比如小白同学很不喜欢下雨,一下雨就不想出门,那么小白同学会这么想:出门前看看外面的天气,如果是大晴天,就出门,如果下雨,就不出门。
这样的需求顺序结构就无法解决。这时候我们就需要用到if分支结构了。
---
### if分支结构
if是如果的意思那么它就可以用来控制我们的判断条件让程序判断一下if语句有几种写法形式照着小白同学的例子我们可以写下如下的伪代码方便大家理解注意不是真正的python代码
```python
# coding:utf-8
# 写法1
if "外面大晴天":
"出门咯~"
# 写法2else表示否则后面不需要跟条件表达式囊括所有其他的可能性
if "外面大晴天":
"出门咯~"
else:
"坚决不出门"
# 写法3elif为else if单词的合并表示否则如果后面需要跟条件表达式。允许有多个elif
if "外面大晴天":
"出门咯~"
elif "外面大暴雨":
"坚决不出门"
else:
"看看情况再说"
```
通过上述伪代码我们可以可以清晰的看到if分支结构的多种判断条件的写法方式以及对应怎么执行分析上述代码我们可以总结出if结构有如下几个写法注意点
* if分支结构以if开头后面跟随判断的条件表达式如果表达式结果返回True则执行if区段下面的语句如果为False则不执行会往下看
* 接下来如果有elif语句会继续判断是否符合条件如果为True则执行elif下面的语句否则继续往下
* 当下面再没有elif的时候如果没有else语句则分支运行结束但如果有else语句则直接运行else语句下面定义的python语句
* 需要注意,每个结构写完条件表达式之后的冒号`:`,不要漏掉了
* 结构下的可执行语句大家应该很容易注意到我都是用了缩进的这是python编程语言相比其他编程语言的一大特色其他编程语言可能用花括号`{}`或者`end`等关键字来表示流程控制区段范围python强制这些流程控制结构都需要采用缩进的方式来表达层级关系比如`"出门咯~"`是缩进的就表示它是if语句块下面要执行的分支代码这样定义的好处是遇到流程控制的时候通过缩进就可以很容易区分那些是流程控制语句块下的代码对于强迫症患者来说这是相当美观的。但它的不足之处也很明显那就是代码编写时需要特别注意缩进如果该缩进却没缩进解释器是会报错的缩进问题有时候搞疯很多人。
> [!question]
>
> 那么如何缩进呢?
我个人一般使用一个`Tab`键的制表符距离表示缩进一层如果层级嵌套比如if语句可以嵌套if语句那么就根据层级关系放适当数量的Tab距离。当然你也可以用四个空格键来缩进你喜欢两个空格其实也可以但不要有时候缩进两个空格有时候四个。实际编写中建议统一规范是统一空格键还是Tab键有时候混着用解释器也是可能报错的。一些不错的IDE可以实现一键自动帮你转换成其中一种很少有这样的困扰比如`pycharm`就能做到。
来一个嵌套的例子:
```python
# coding:utf-8
a = 10
if a >= 5:
if a >= 8:
print("大于8")
else:
print("大于等于5小于8")
elif a < 0:
print("小于0")
else:
print("介于0到5之间")
```
> [!danger]
>
> 不需要缩进的地方请不要随意缩进,比如一个顺序结构,顺着下来就行了,就没必要缩进了。
我们来看点没有好好遵循缩进原则所造成问题的例子我们可以存到一个py文件中来运行
```python
# coding:utf-8
a = input("你的语文考试多少分?")
if int(a) < 90:
print("成绩不过关,继续努力哦~")
print("哇你真棒呀都90分以上啦")
```
上述代码执行后如果我们输入一个90分以上的分数则输出的结果在逻辑上是没有问题的。但当我们输入一个90分以下的分数时`print("哇你真棒呀都90分以上啦")`这句代码也被执行了因为它没有缩进没有在if分支结构中是无论如何都会执行的。
---
### if结构的判断条件
if结构后面的条件一定要是条件表达式吗其实也不一定的它后面的条件还能跟字符串、列表、元组、字典等等东西这些东西也能判断出True或者False。
你需要记住的是下面这些它们在进行if判断的时候会返回False其他均返回True。这是if语句很容易判断返回的内容是否为空值的`神器`
`False、 None、 0、 ""、 ()、 []、 {}`
```python
# coding:utf-8
# 其他的类似,我们就不一一列举了,大家请自己尝试,这里拿空字符串做例子
a = ""
if a:
print("a不是空字符串")
else:
print("a为空字符串")
```
---
### if分支的逻辑错误
使用if分支时有时候虽然程序不报错但代码却犯了逻辑错误这种错误是你的代码运行逻辑跟业务逻辑有差异达不到你想要的效果但在python解释器的语法上是过关的可以运行的。逻辑错误是我们编写代码的过程中比较难以发现的一种错误因为解释器不会报错你能马上查问题而是通过查看运行结果来分析的方式来判断我们写的是否有问题它对于编程人员的逻辑思维、空间抽象思维的要求较高。但大家不要怕遇到这种情况的时候可以通过一些IDE软件的调试功能或者将逻辑抽象出来进行抽丝剥茧式的分析是可以发现并解决问题的相信你解决之后也会很有成就感也就是没有达到我们要的业务效果。
我们来举个简单的例子:
```python
# coding:utf-8
score = 85
if score > 60:
print("及格")
elif score > 80:
print("良好")
elif score > 90:
print("优秀")
```
我们来看下上面的例子乍看之下我们的判断条件都没有问题60分以上的算及格80分以上的算良好90分以上的算优秀。那么我们的成绩score为85分怎么也算良好这一档对吧
执行代码,我们发现给我们返回的结果是:`"及格"`
怎么不是良好呢其实在这里我们就犯了一个逻辑错误。85分是不是也大于60分是的所以在流程控制中我们直接就从及格那里跑出来了根本没有进行后面是否大于80分的判断。
这就是一个简单的逻辑错误,那么我们应该怎么修改呢?我们可以加上范围限制条件:
```python
# coding:utf-8
score = 85
if score > 60 and score <= 80:
print("及格")
elif score > 80 and score <= 90:
print("良好")
elif score > 90:
print("优秀")
```
通过这样的修改,我们就实现了每段判断的范围限定,就能输出`良好`啦。
有的同学思路很快,能想出下面更好的办法:
```python
# coding:utf-8
score = 85
if score > 90:
print("优秀")
elif score > 80:
print("良好")
elif score > 60:
print("及格")
```
这段代码没有添加and只是调换了一下几个判断条件的写的顺序也能实现我们的效果分析一下既然我们都是往大于的方向进行判断那么我们应该先判断最大的当90不满足的时候才能判断是否大于80这一档在判断这一档的时候已经隐含了一个条件那就是肯定`<= 90`,所以一定不可能是`优秀`,这时候我们就不会错漏了。
通过上述几个简单例子的学习,大家是不是对逻辑错误有了更加形象的认识?在编写代码时,我们需要多思考流程控制的最佳逻辑,这样有助于训练我们的编程逻辑思维,对大家是很有帮助的。
---
### if表达式
之前介绍三目运算符的时候介绍过一行的if表达式写法。这里不再赘述。
当我们只有if判断想要写在一行的时候也可以这么写
```python
# coding:utf-8
a = 10
if a > 5 : print("大于5")
```
---
### pass占位符
pass表示通过的意思在python中如果流程控制结构后面的代码执行体我们不打算执行任何代码或者打算不进行任何代码处理或者我们还没想好要执行啥那么在编写时不能够留空会报错这时候我们可以用`pass`来作为执行体的占位符,代码运行到这里就不执行任何代码往下了。
```python
# coding:utf-8
score = 85
if score > 90:
print("优秀")
elif score > 80:
# 这里不写任何可执行的语句可以写个pass如果满足条件进来了也不会执行任何东西
pass
elif score > 60:
print("及格")
```
### 单词释义
| 单词 | 释义 |
| ----- | ------------------------------------------------------------ |
| if | 如果 |
| elif | else if合在一起的写法其他语言可能是用的else if这样的python注意用elif表示否则如果 |
| else | 否则 |
| score | 成绩 |
| pass | 通过 |