目录
1 条件表达式
所谓条件表达式,就是能作为判断(选择或循环)条件的式子。
- 条件不成立
(1) False、0、None
(2) 空字符串(‘’、“”)
(3) 空序列( [ ]、( )、{ }等)
- 条件成立
以上不成立值之外,皆成立
- Python不支持 赋值语句“=”作为条件,使用“==”表示等于。
1.1 关系运算符的连写
- >、<、<=、>=、==、!=
- 以上关系运算符可以像数学中那样连写
1.2 逻辑运算符
- not、and、or
- 运算顺序 not > and > or
2 分支结构
-
python 通过if、elif、else等保留字提供单分支、二分支和多分支结构;
(1)单行 if 语句:
当if后跟随的子句只有一条语句时
语法格式:
【实例1】PM2.5空气质量提醒(1)
目前空气质量等级以PM2.5数值划分为6级。PM2.5数值在0-35空气质量为优,35~75为良,75~115为轻度污染,115~150为中度污染150~250为重度污染,250~500为严重污染。
一个简化版的空气质量标准采用三级模式:0~35为优,35-75为良,75以上为污染。人们也许不关心PM2.5指数值具体为多少,而更关心空气质量到底怎样,计算机可以通过PM2.5指数分级发布空气质量提醒。
- 输入:接收外部输入的PM2.5值
- 处理:
if PM2.5值<35,打印空气质量优,建议户外运动
if 35≤PM2.5值<75,打印空气质量良,建议适度户外运动
if PM2.5值≥75,打印空气污染警告
- 输出:打印空气质量提醒
pm = eval(input("请输入PM2.5数值:"))
if 0 <= pm < 35:
print('空气优质,快去户外运动!')
if 35 <= pm < 75:
print('空气良好,适度户外运动!')
if pm >= 75:
print('空气污染,请小心!')
运行结果:
(2)if …else语句:
语法格式:
语句块1是在if条件满足(True)后执行的一个或多个语句序列,语句块2是if条件不满足(False)后执行的语句序列。二分支语句用于区分条件的两种可能,即True或者 False分别形成执行路径。
【实例2】PM2.5空气质量提醒(2)
若用户只关心空气质量是否污染两种情况,可以通过二分支语句实现。
pm = eval(input("请输入PM2.5数值:"))
if pm >= 75:
print('空气污染,请小心!')
else:
print('空气没有污染,可以开展户外活动!')
运行结果:
(3)if-elif-else 语句
语法格式:
【实例3】PM2.5空气质量提醒(3)
针对实例1改造:
pm = eval(input("请输入PM2.5数值:"))
if 0 <= pm < 35:
print('空气优质,快去户外运动!')
elif 35 <= pm < 75:
print('空气良好,适度户外运动!')
else:
print('空气污染,请小心!')
(4)嵌套if语句:
- 因采用语句缩进方式,可避免else就近配对情况,
(5)其它
二分支结构还有一种更简洁的表达方式(if-else的紧凑结构),适合通过判断返回特定值,
语法格式如下:
条件表达式: <表达式1> if <条件> else <表达式2>
- 其中,表达式1、表达式2一般是 数字或字符串类型的一个值,
- 适合特殊值处理
>>> a=0
>>> print(a) if a!=0 else print('不存在')
不存在
>>> a=5
>>> print(a) if a!=0 else print('不存在')
5
>>> print(a if a!=0 else '不存在')
5
>>> b = a if a!=0 else '不存在'
>>> b
5
【实例4】PM2.5空气质量提醒(4)
针对实例2改造:
pm = eval(input("请输入PM2.5数值:"))
print('空气{}污染!'.format('存在' if pm >= 75 else '没有'))
3 循环结构
包括:
- while语句:一般用于循环次数难以提前确定的情况,也可以用于循环次数确定的情况
- for语句:一般用于循环次数可以提前确定的情况,尤其是用于枚举序列或迭代对象中的元素。
说明:
- 一般优先考虑使用for循环;
- 相同或不同的循环结构之间都可以互相嵌套,实现更为复杂的逻辑。
(1)while语句
基本使用方法如下:
- 其中条件与if语句中的判断条件一样,结果为True和False;
- 当条件为False时,循环终止
示例:
count = 0 # 计数器初始化
while count < 9:
print('The count is:', count)
count = count + 1 # 计数器累加
print('Good bye!')
运行结果:
(2)for语句
for语句实现遍历循环,基本使用方法如下:
- 循环执行次数根据遍历结构中的元素个数确定;
- 逐一提取元素,放在循环变量中,对于所提取的每个元素执行一次语句块。
- 遍历结构可以是字符串、文件、组合数据类型或range()函数等,常用的使用方式如下:
示例:
for letter in 'Python': # 字符串
print('Current Letter:', letter)
print()
fruits = ['banana', 'apple', 'mango']
for fruit in fruits: # 列表
print('Current fruit:', fruit)
print('Good bye!')
运行结果:
嵌套语句
输出结果:
(3)range()
- 是一个内建函数,可构建迭代序列,for循环中经常用它控制循环次数
- 格式:
range([start,] stop[, step=1])
注意: “算头不算尾”原则; 省略起始位置,默认为0
>>> range(5)
range(0, 5)
>>> for i in range(5):
... print(i)
...
0
1
2
3
4
>>> for i in range(0,5,2):
... print(i)
...
0
2
4
>>>
(4)else、break和continue、pass子句
循环的 else 子句
- 当循环正常结束时会执行else字句
- 当由于break跳出循环时不执行else子句
count = 0
while count < 5:
print(count, 'is less than 5')
count = count + 1
else:
print(count, 'is not less than 5')
print('Good bye!')
运行结果:
break子句:
- break用来跳出最内层for或 while循环,脱离该循环后程序从循环代码后继续执行。
# 示例1
for letter in 'Python':
if letter == 'h':
break
print('Current Letter:', letter)
# 示例2
var = 10
while var > 0:
print('Current value:', var)
var = var - 1
if var == 5:
break
print('Good bye!')
输出结果:
countinue子句
- continue用来结束当前当次循环,即跳出循环体中下面尚未执行的语句,但不跳岀当前循环。
# 示例1
for letter in 'Python':
if letter == 'h':
continue
print('Current Letter:', letter)
# 示例2
var = 10
while var > 0:
print('Current value:', var)
var = var - 1
if var == 5:
continue
print('Good bye!')
- continue语句和 break语句的区别是, continue语句只结束本次循环,而不终止整个循环的执行:而 break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。
pass子句:
- 占一个位置,不做任何操作
for letter in 'Python':
if letter == 'h':
pass
print('This is pass block')
print('Current Letter:', letter)
print('Good bye!')
输出结果
4 异常处理
4.1 什么是异常
异常可能使程序中断,不能正常结束
- eval()
input将接收的结果存为字符串,可以使用eval实现表达式的还原,并且实现表达式的计算
num = eval(input('请输入一个整数:'))
print(num**2)
当输入数字时,程序正常执行
如果输入的不是数字呢?
4.2 try…except语句
异常处理机制可以在发生异常的情况下,能够有效处置,不会立即中断运行
- 语句块1是正常执行的程序内容,当发生异常时执行 except保留字后面的语句块,为上述小程序增加异常处理,代码如下:
try:
num = eval(input('请输入一个整数:'))
print(num**2)
except NameError:
print('输入错误,请输入一个整数!')
运行结果:
4.3 异常的高级用法
try:
alp = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
idx = eval(input("请输入一个整数: "))
print(alp[idx])
except NameError:
print("输入错误,请输入一个整数!")
except:
print("其他错误")
运行结果:
try:
alp = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
idx = eval(input("请输入一个整数: "))
print(alp[idx])
except NameError:
print("输入错误,请输入一个整数!")
else:
print("没有发生异常")
finally:
print("程序执行完毕,不知道是否发生了异常")
5 练习
(1)身体质量指数BMI:编写一个根据体重和身高计算BMI值的程序,对BMI数值按照不同区间范围进行分类,同时输出国际和国内的BMI指标分类建议值。
height, weight = eval(input("请输入身高(米)和体重(公斤)[逗号隔开]: "))
bmi = weight / pow(height, 2)
print("BMI 数值为:{:.2f}".format(bmi))
wto, dom = "", ""
if bmi < 18.5: # WTO 标准
wto = "偏瘦"
elif bmi < 25: # 18.5 <= bmi < 25
wto = "正常"
elif bmi < 30: # 25 <= bmi < 30
wto = "偏胖"
else:
wto = "肥胖"
if bmi < 18.5: # 我国卫生部标准
dom = "偏瘦"
elif bmi < 24: # 18.5 <= bmi < 24
dom = "正常"
elif bmi < 28: # 24 <= bmi < 28
dom = "偏胖"
else:
dom = "肥胖"
print("BMI 指标为:国际'{0}', 国内'{1}'".format(wto, dom))
height, weight = eval(input("请输入身高(米)和体重\(公斤)[逗号隔开]: "))
bmi = weight / pow(height, 2)
print("BMI 数值为:{:.2f}".format(bmi))
wto, dom = "", ""
if bmi < 18.5:
wto, dom = "偏瘦", "偏瘦"
elif 18.5 <= bmi < 24:
wto, dom = "正常", "正常"
elif 24 <= bmi < 25:
wto, dom = "正常", "偏胖"
elif 25 <= bmi < 28:
wto, dom = "偏胖", "偏胖"
elif 28 <= bmi < 30:
wto, dom = "偏胖", "肥胖"
else:
wto, dom = "肥胖", "肥胖"
print("BMI 指标为:国际'{0}', 国内'{1}'".format(wto, dom))
(2)输入一行字符,输出其中包含英文字母、数字、空格及其它字符的个数;
m=input("请输入一行字符:")
lett_count,num_count,spa_count,other_count=0,0,0,0
for i in m:
if i.isalpha():
lett_count+=1
elif i.isdigit():
num_count+=1
elif i==' ':
spa_count+=1
else:
other_count+=1
print("其中英文字符个数为:{}\t数字个数为:{}\t空格个数为:{}\t其它字符个数为:{}".format(lett_count,num_count,spa_count,other_count))