5.4 条件判断

深入学习Python条件判断语句,包括if、elif、else的使用方法,掌握条件分支控制结构,学习如何根据不同的条件执行不同的代码块,理解Python中的布尔值和条件表达式。

计算机能做很多自动化任务,就是因为它能自己做条件判断。

比如输入用户年龄,根据年龄打印不同内容。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')

elifelse if 的缩写,可以有多个 elifif 语句的完整形式是:

if <条件判断1>:
    <执行1>
elif <条件判断2>:
    <执行2>
elif <条件判断3>:
    <执行3>
else:
    <执行4>

if 语句执行有个特点:从上往下判断,如果某个判断是 True,执行对应的语句后,就忽略剩下的 elifelse。看看下面这个程序为什么打印 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 不能直接和整数比较,必须先转成整数。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 指数,并根据指数判断:

  • 低于 18.5:过轻
  • 18.5-25:正常
  • 25-28:过重
  • 28-32:肥胖
  • 高于 32:严重肥胖

if-elif 判断并打印结果:

height = 1.75
weight = 80.5

bmi = ???

if ???:
    pass

小结

条件判断让计算机自己做选择,Python 的 if…elif…else 很灵活。

条件判断从上向下匹配,满足条件时执行对应的语句块,后续的 elif 和 else 都不再执行。