企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 条件判断 ## 条件判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。 比如,输入用户年龄,根据年龄打印不同的内容,在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') ``` `elif`是`else if`的缩写,完全可以有多个`elif`,所以`if`语句的完整形式就是: ``` if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> else: <执行4> ``` `if`语句执行有个特点,它是从上往下判断,如果在某个判断上是`True`,把该判断对应的语句执行后,就忽略掉剩下的`elif`和`else`,所以,请测试并解释为什么下面的程序打印的是`teenager`: ``` age = 20 if age >= 6: print('teenager') elif age >= 18: print('adult') else: print('kid') ``` `if`判断条件还可以简写,比如写: ``` if x: print('True') ``` 只要`x`是非零数值、非空字符串、非空list等,就判断为`True`,否则为`False`。 ## 再议 input 最后看一个有问题的条件判断。很多同学会用`input()`读取用户的输入,这样可以自己输入,程序运行得更有意思: ``` birth = input('birth: ') if birth < 2000: print('00前') else: print('00后') ``` 输入`1982`,结果报错: ``` Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unorderable types: str() > int() ``` 这是因为`input()`返回的数据类型是`str`,`str`不能直接和整数比较,必须先把`str`转换成整数。Python提供了`int()`函数来完成这件事情: ``` s = input('birth: ') birth = int(s) if birth < 2000: print('00前') else: print('00后') ``` 再次运行,就可以得到正确地结果。但是,如果输入`abc`呢?又会得到一个错误信息: ``` Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: 'abc' ``` 原来`int()`函数发现一个字符串并不是合法的数字时就会报错,程序就退出了。 如何检查并捕获程序运行期的错误呢?后面的错误和调试会讲到。 ## 练习 小明身高1.75,体重80.5kg。请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数: * 低于18.5:过轻 * 18.5-25:正常 * 25-28:过重 * 28-32:肥胖 * 高于32:严重肥胖 用`if-elif`判断并打印结果: ``` # -*- coding: utf-8 -*- height = 1.75 weight = 80.5 bmi = ??? if ???: pass ``` ## 小结 条件判断可以让计算机自己做选择,Python的if...elif...else很灵活。 ![python-if](https://box.kancloud.cn/2016-01-15_56988a24816ed.png) ## 参考源码 [do_if.py](https://github.com/michaelliao/learn-python3/blob/master/samples/basic/do_if.py)