第三章 Python的逻辑判断和循环
1、if elif else条件判断
计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。
elif是else if的缩写,完全可以有多个elif,所以if语句的完整形式就是:
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现:
age = 20
if age >= 18:
print('your age is', age)
print('adult')
根据Python的缩进规则,如果if语句判断是True,就把缩进的两行print语句执行了,否则,什么也不做。
也可以给if添加一个else语句,意思是,如果if判断是False,不要执行if的内容,去把else执行了:
age = 3
if age >= 18:
print('your age is', age)
print('adult')
else:
print('your age is', age)
print('teenager')
注意不要少写了冒号:
当然上面的判断是很粗略的,完全可以用elif做更细致的判断:
age = 3
if age >= 18:
print('adult')
elif age >= 6:
print('teenager')
else:
print('kid')
if判断条件还可以简写,比如写:
if x:
print('True')
只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False。
2、input陷阱
最后看一个有问题的条件判断。很多同学会用input()读取用户的输入,这样可以自己输入,程序运行得更有意思:
birth = input('birth: ')
if birth < 2000:
print('00前')
else:
print('00后')
输入1982,结果报错:
**这是因为input()返回的数据类型是str,str不能直接和整数比较,必须先把str转换成整数。**Python提供了int()函数来完成这件事情:
s = input('birth: ')
birth = int(s)
if birth < 2000:
print('00前')
else:
print('00后')
再次运行,就可以得到正确地结果。但是,如果输入abc呢?又会得到一个错误信息:
Traceback (most recent calllast):
File "<stdin>", line 1, in <module>
ValueError: invalid literal forint() with base 10: 'abc'
原来int()函数发现一个字符串并不是合法的数字时就会报错,程序就退出了。
如何检查并捕获程序运行期的错误呢?后面的错误和调试会讲到。
3、if嵌套的格式
if 条件1:
满足条件1 做的事情1
满足条件1 做的事情2
…(省略)…
if 条件2:
满足条件2 做的事情1
满足条件2 做的事情2
…(省略)…
说明:
外层的if判断,也可以是if-else
内层的if判断,也可以是if-else
根据实际开发的情况,进行选择
练习
1、 要求:从键盘输入刀子的长度,如果刀子长度没有超过10cm,则允许上火车,否则不允许上火车
2、
2、小明身高1.75,体重80.5kg。请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数:
低于18.5:过轻
18.5-25:正常
25-28:过重
28-32:肥胖
高于32:严重肥胖
用if-elif判断并打印结果:
3、情节描述:上公交车,并且可以有座位坐下
要求:输入公交卡当前的余额,只要超过2元,就可以上公交车;如果空座位的数量大于0,就可以坐下
4、循环结构
1、循环介绍
要计算1+2+3,我们可以直接写表达式:
1 + 2 + 3=6
要计算1+2+3+…+10,勉强也能写出来。
但是,要计算1+2+3+…+10000,直接写表达式就不可能了。
为了让计算机能计算成千上万次的重复运算,我们就需要循环语句。
Python的循环有两种,一种是for…in循环,另外一种是while循环。
2、while循环
while循环的格式
while 条件:
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
…(省略)…
pass 和while没有关系
while循环应用
- 计算1~100的累积和(包含1和100)
参考代码如下:
i = 1
sum = 0
while i <= 100:
sum+=i
i+=1
print(sum)
- 计算1~100之间偶数的累积和(包含1和100)
1、循环次数(while中循环次数由条件决定)
2、在循环过程中做什么
3、变量怎么变化?
3、while循环嵌套
前面学习过if的嵌套了,想一想if嵌套是什么样子的?
类似if的嵌套,while嵌套就是:while里面还有while
<1>while嵌套的格式
while 条件1:
条件1满足时,做的事情1
条件1满足时,做的事情2
条件1满足时,做的事情3
…(省略)…
while 条件2:
条件2满足时,做的事情1
条件2满足时,做的事情2
条件2满足时,做的事情3
…(省略)…
<2>while嵌套应用一
要求:打印如下图形: m行,每行打印n次,n==m
*
<3>while嵌套应用二:九九乘法表
n = 1
while n<10:
c = 1
while c <= n:
print("%d*%d=%d"%(c,n,c*n),end="\t")
if c == n:
print()
c+=1
n+=1
4、for循环
像while循环一样,for可以完成循环的功能。
在Python中 for循环可以遍历任何序列的项目,如一个列表或者一个字符串等。
for循环的格式
for 临时变量 in 列表或者字符串等:
循环满足条件时执行的代码
else:
循环不满足条件时执行的代码
for实现100内求和
sum = 0
for i in range(1,101):
sum+=i
print(sum)
5、break和continue
1、break
在循环中,break语句可以提前退出循环。例如,本来要循环打印1~100的数字:
n = 1
while n <=100:
print(n)
n = n + 1
print('END')
上面的代码可以打印出1~100。
如果要提前结束循环,可以用break语句:
n = 1
while n <= 100:
if n > 10: # 当n = 11时,条件满足,执行break语句
break # break语句会结束当前循环print(n)
n = n + 1
print('END')
执行上面的代码可以看到,打印出1~10后,紧接着打印END,程序结束。
可见break的作用是提前结束循环。
2、continue
在循环过程中,也可以通过continue语句,跳过当前的这次循环,直接开始下一次循环。
n = 0
while n < 10:
n = n + 1
print(n)
上面的程序可以打印出1~10。但是,如果我们想只打印奇数,可以用continue语句跳过某些循环:
n = 0
while n < 10:
n = n + 1
if n % 2 == 0: # 如果n是偶数,执行continue语句continue# continue语句会直接继续下一轮循环,后续的print()语句不会执行print(n)
执行上面的代码可以看到,打印的不再是1~10,而是1,3,5,7,9。
可见continue的作用是提前结束本轮循环,并直接开始下一轮循环。
6、小结
循环是让计算机做重复任务的有效的方法。
break语句可以在循环过程中直接退出循环,而continue语句可以提前结束本轮循环,并直接开始下一轮循环。这两个语句通常都必须配合if语句使用。
要特别注意,不要滥用break和continue语句。break和continue会造成代码执行逻辑分叉过多,容易出错。大多数循环并不需要用到break和continue语句,上面的两个例子,都可以通过改写循环条件或者修改循环逻辑,去掉break和continue语句。
有些时候,如果代码写得有问题,会让程序陷入“死循环”,也就是永远循环下去。这时可以用Ctrl+C退出程序,或者强制结束Python进程。