这是为我最最最爱的女朋友写的一份简明Python教程。
第五章:条件控制
在这之前需要补充一个全新的变量类型:Bool类型
bool类型只有两种状态,“对”和“错”,在Python中对应的就是“True” 和 “False”,用二进制表示就是“1” 和 “0”
那么什么情况下可以得到bool值呢?
变量之间的比较,一般就是bool值,如果两个变量相同,就是返回的True,不相同则返回False
还有类型转换时会产生bool值,例如 if 123
这里的123是int型,转化为bool则是True,除了int型可以转化为bool,还有其他一些类型也可以转化为bool类型,包括:
- 为0的数字,包括0,0.0
- 空字符串,包括”,””
- 表示空值的None
- 空集合,包括(),[],{}
bool值在Python中的条件控制语句有大用,需要牢记用法
if-else与if-elif-else
有如下的一段“代码”
如果 对:
输出 Hello World
否则:
输出 Hello Python
将“代码”里面的一些关键字进行替换,就得到
if True:
print("Hello World")
else:
print("Hello Python")
这就是一段正确的Python代码,其中的if-else语句就是条件控制语句
除了if-else语句意外,还有if-elif- else语句,其中的elif表达的意思就是else if
表达的是否则如果。
写出如下的“代码”
如果 错:
输出 1
否则 如果 错:
输出 2
否则:
输出 3
替换得到
if False:
print(1)
elif False:
print(2)
else:
print(3)
现在有一段代码,你能猜测出他的执行结果吗?
# 图书馆借书自动化审批系统
import time # 导入时间库
personName = "小慧" # 借书人姓名
personPermissions = 1 # 借书人是否有权限借书
personNoReturn = 0 # 借书人是否还有未归还书
personLastBook = "狼王梦" # 借书人上次借的书
bookName = "钢铁是怎样炼成的" # 被借书书名
bookPermissions = 1 # 被借书是否有被借权限
if personPermissions: # 判断借书人是否有权限借书
if not personNoReturn: # 判断借书人是否有书还未归还
if bookPermissions: # 判断被借书是否有权限被外借
if personLastBook != bookName: # 判断借书人是否重复借书
print(personName + "于" + time.ctime() + "借走了" + "《" + bookName + "》")
else:
print(personName + "已经借过" + "《" + bookName + "》")
else:
print("《" + bookName + "》" + "不允许外借")
else:
print(personName + "还有书未归还,不准外借其他书籍")
else:
print(personName + "没有权限借书籍")
match-case
Python3.10之后的版本引入了match-case的语法,此语法与其他语言的switch-case语法一样。
match 后的对象会依次与 case 后的内容进行匹配,如果匹配成功,则执行匹配到的表达式,否则直接跳过,_ 可以匹配一切。
示例
# 判断一个人的重量是否超标
personWeight = 60 # 一个人的体重,单位是kg
personHeight = 170 # 一个人的身高,单位是cm
bmi = float('%.1f' % (personWeight/(personHeight/100)**2))
# 进行bmi的运算,公式是 体重/身高^2,身高单位需要转化为米
# float()函数负责四舍五入到一位小数,其中的 '%.1f' 是一个浮点数的占位符
# 该占位符是%.1f,.1f表示的是保留一位小数,后面的 % 表示将后面的值传递给前面的占位符
# 整体就是输出一个只有一位小数的bmi值
level = 0 # 定义bmi等级,0级表示出错,1级表示过低,2级表示正常,3级表示超重,4级表示肥胖
if bmi < 18.5: # 判断bmi是否是1级
level = 1
elif bmi < 24: # 判断bmi是否是2级
level = 2
elif bmi < 28: # 判断bmi是否是3级
level = 3
else: # 如果前面都不是,则bmi是4级
level = 4
info = '' # 用于定义输出的信息
match level: # match 判断,判断的变量是level
case 0: # 当bmi等级是0时,info赋值为“程序出错”
info = '程序出错'
case 1: # 当bmi等级是1时,info赋值为“过低”
info = '过低'
case 2: # 当bmi等级是2时,info赋值为“正常”
info = '正常'
case 3: # 当bmi等级是3时,info赋值为“超重”
info = '超重'
case 4: # 当bmi等级是4时,info赋值为“肥胖”
info = '肥胖'
if info == '程序出错': # 如果信息info是“程序出错”,则输出“程序出错”
print(info)
else: # 否则输出bmi值和bmi等级
print("您的bmi值是" + str(bmi) + ",体重" + info)