条件判断
在实际生活中,我们经常面临着选择,在程序中也一样。实际上计算机的运行原理就是选择,计算机实际上只认两种状态,0和1。分支就是用来做判断做选择的,分支让程序拥有了“灵魂”。比如现在有个人工智能服务,在办理业务时,它会提示用户:尊敬的xxx
先生
或者尊敬的xxx女士
,那么程序是如何判断你是男还是女呢?就是通过分支来判断的,下面我们就一起来学习一下分支结构。
分支有多种结构现在我们就来学习一下用程序怎么实现。
if语句
if
后面接判断条件,如果条件成立时执行特定的内容,的逻辑如下图:
![99d8b12490555aa8c877437d84b4ff87.png](https://i-blog.csdnimg.cn/blog_migrate/397e177150f8cfc476447343a5833016.png)
程序实现
# 创建一个变量sex,赋值为:男
sex = "男"
# 判断是否满足条件
if sex == "男":
print("这是一个男人")
print("程序结束!")
我们用if
来表示做判断,判断sex的值是不是“男”,中间用两个连续的等于号
来判断他们是否相等
![d3e533dc1c67dd8a60bfa12d0820b674.png](https://i-blog.csdnimg.cn/blog_migrate/67cf7a638f3d4c0e08f8d7a277fc11ac.png)
上面的代码执行会看到输出两行语句,因为判断是成立的,sex的值是等于男的,所以if下面的语句被执行了,如果将sex的值修改为女,那么if下面的语句就不会执行了
Python用缩进来表示层级,相同缩进的代码被认为是同一级的,一般深一层的代码块比上一级要多4个空格,或者是一个Tab键,Python里面的缩进是非常严格的,如果缩进不对是直接会报错的,因此一定要注意。
在Pycharm里面,默认的按下Tab键实际上是Pycharm帮我们转换成了4个空格,所以如果使用别的文本编辑器修改代码,一定要注意,不能直接按Tab键,要按4个空格出来
if ... else ...语句
如果上面的判断条件不成立的时候我们也希望输出一句话来提示用户,而不是什么都不做,那么这个时候就可以用 if ... else ..
语句了。它的结构如下:
![4cc1e3ab286bc318a938615aac543b79.png](https://i-blog.csdnimg.cn/blog_migrate/bfba3eedff228e5a1e1b34fda967dd33.png)
程序实现
还是以上面的例子为例,不过添加了一点不满足条件的处理内容
# 创建一个变量sex,赋值为:男
sex = "男"
# 判断是否满足条件
if sex == "男":
print("这是一个男人")
else:
print("这不是一个男人,应该是女人")
print("程序结束!")
现在不论sex的值是男还是女,都会输出两行文字,而且第一行的内容是不一样的
现在我们已经能判断男女了,但是这种判断比较简单,只有2种结果,要么男,要么女,那如果判断条件有多个呢?比如:现在有3个手机品牌的品牌:Apple
, Xiaomi
, Huawei
,都是英文的,但是我们要输出对应的中文,从功能上我们可以这么做:
phone = "Huawei"
# 判断是否满足条件
if phone == "Apple":
print("苹果手机")
if phone == "Xiaomi":
print("小米")
if phone == "Huawei":
print("华为")
但是这样的话,如果第一个就找到了,那么其实没有必要再去执行下面的了,后面的判断浪费时间和性能。为了不让程序做多余的判断,我们还可以这么做:
# 判断是否满足条件
if phone == "Apple":
print("苹果手机")
else:
if phone == "Xiaomi":
print("小米")
else:
print("华为")
这样话,可以避免时间和性能的浪费,但是不太好看,如果判断条件再多一点,if... else...
的嵌套会特别多,不太合理。这个时候我们就可以用另一种结构
if ... elif ... else 语句
if ... elif ... else
中间的elif
相当于else if
的缩写,用它来实现多个选择
# 创建一个变量sex,赋值为:男
phone = "Huawei"
# 判断是否满足条件
if phone == "Apple":
print("苹果手机")
elif phone == "Xiaomi":
print("小米")
else:
print("华为")
elif
可以连续使用多个,这样有再多的判断条件也不怕了,只需要把判断条件写在elif
后面,比如这样
# 判断是否满足条件
if phone == "Apple":
print("苹果手机")
elif phone == "Huawei":
print("华为手机")
elif phone == "Xiaomi":
print("小米")
elif phone == "Samsung":
print("三星")
elif phone == "Oneplus":
print("一加")
else:
print("其他品牌")
这种方法也只能是解决三五个判断条件,如果条件再多几个,这种方法就不适用了,后面我们要学习的字典
类型可以完美解决这种问题。
嵌套
其实上面已经有提到了,判断语句是可以嵌套的,有时候要实现比较复杂的功能,需要做很多层的判断,以简单的用户登录为例:
username = "管理员" # 用户名
password = "123456" # 密码
remember = "是" # 记住登录状态
if username == "管理员":
if password == "123456":
if remember == "是":
print("登录成功!已经记住登录状态,一周内免登录")
else:
print("登录成功,临时登录,关闭浏览器后需要重新登录")
else:
print("密码错误,是否需要找回密码?")
else:
print("用户不存在,是否进行注册?")
if ... else 可以无限嵌套,但是嵌套层级太多也会给代码理解带来很大的困扰,所以也不建议嵌套太多,上面的代码只是演示嵌套功能,实际写代码千万不要这么写,层级太多的代码可维护性差,易出错。
用于判断的运算符
判断除了使用==
判断相等外,还有其他判断的符号:
符号 | 描述 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
!= | 不等于 |
简单的例子:
score = 89 # 分数
if score 60:
print("不及格")
elif 60 <= score 80:
print("普通")
elif 80 <= score <= 95:
print("优秀")
elif score != 100:
print("距离100分就差一点点")
else:
print("恭喜你,100分")
python里面允许进行连续的大小比较,这样可以很方便划分分数段
结语
通过判断语句,现在程序可以开始思考了,能够根据不同内容作出不同的响应,看起来有点“智能”了,虽然这个比不上真正的人工智能,但是这是一个智能的开始。判断语句相对数据类型要简单,也更容易理解,而且更有趣。下面尝试用这个有趣的知识点把我们之前学习的内容串起来吧。
练习
编写一个类似机器人的程序,让用户通过控制台输入姓名和性别,然后程序通过屏幕输出问候信息,要包含合适的称呼,比如:先生或者女士。
完整的操作流程记录:
请输入姓名:张三 请输入性别:男早安,张三先生
提示:让用户在控制台输入使用
input()
函数,如果不记得的话可以参考上一章里面的输入提示用户通过控制台输入3门功课(语数英)的成绩,最后根据总分对其进行评价,分数等级可自定义
完整的操作流程记录:
请输入语文成绩:90 请输入数学成绩:80 请输入英语成绩:80 ,您的总分是:250, 给您的评价是:优秀
提示:注意数据间的类型转换
每日小技巧
在写判断条件的时候,有时候某一个条件的逻辑没有想好,想先看看另一个条件的执行结果,这个时候程序执行就会报错,编辑器也会有提示。这种情况我们可以使用Python提供的一个关键字pass
,在还没有具体实现的地方,写上pass占位即可,例如:
if core > 60:
pass
else:
print("不及格")
这里pass
不做任何事情,它仅仅是表示占个位置,代表那里有代码了,不会出现语法错误,程序执行到那的时候就接着执行后面的代码。
pass可以在程序很多地方使用,包括后面要学习的函数和类,还有异常捕捉。在循环里面发现异常,但是不想做任何事情的时候就可以放个pass让程序接着下一次循环。