1.嵌套
嵌套指的就是一个东西“套在”另一个东西里,就像套娃一样。那嵌套条件,当然就是指一个条件语句在另一个条件语句里。
例:
is_week='星期天'
#week指当前星期
is_time=11
if is_week== '星期日' :
if is_time < 11 :
#如果是星期天且当前时间没到11点,就去动物园
print('去动物园')
else :
#如果是星期天且当前时间超过11点,就在家看书
print('在家看书')
else :
#如果不是星期天
if is_time < 16 :
#如果不是星期天且时间没到16点,就在学校学习
print('学校学习')
else :
#如果不是星期天且时间超过16点,就自由活动
print('自由活动')
嵌套条件写代码的过程里大概分为这四步:
确定外层条件
对外层条件使用条件语句建立分支结构
确定内层条件,建立分支结构
将内层条件及分支结构写进外层条件对应的分支里
2.了解多个if和if ... elif ... else语句的区别
**多个 if 语句和 if ... elif ... else是有区别的
例:
Height = 146
#代码演示,不适用elif
if Height < 150 :
print('快快长大')
if 150 <= Height < 170 :
print('多多运动')
if Height >= 170 :
pring('身材不错')
# 代码示例:使用 elif
#代码演示,不适用elif
if Height < 150 :
print('快快长大')
elif Height < 170 :
print('多多运动')
else :
pring('身材不错')
单看要实现的功能,这两段代码确实没什么区别;两段代码也都很好理解,不使用 elif 语句的代码甚至更符合人的直觉。那我们为什么还需要 elif 呢?
以上代码在 Height = 186 的情况下,如果代码中不使用elif,则计算机需要进行三次条件判断;但在 if ... elif ... else 语句中,Height < 150 的条件一旦被满足,就会跳出条件分支,所以计算机只需要进行一次条件判断就够了。不使用 elif 的代码无论在 Height 值为多少时,都需要进行三次条件判断;但使用 elif 的代码最多只需要进行两次条件判断。对计算机而言,条件判断就会占用计算机的运算资源,影响代码执行效率。
多路分支适合用来解决“多选一”的问题。在多个条件中只能满足一项,也就只能走一个分支,对这样的需求来说,使用 if ... elif ... else 语句无疑是更合适的。
3.常见错误
一、忘记条件后或 else 后的冒号:
num = 5
if num > 0
print('num 大于 0')
else
print('num 小于等于 0')
# 报错:SyntaxError: bad input on line 2
# (语法错误:第 2 行输入有问题)
SyntaxError 的意思是“语法错误”,这段代码中条件和 else 后面缺少了一个英文冒号 :
二、代码缩进错误:
num = 5
if num > 0:
print('num 大于 0')
else:
print('num 小于等于 0')
# 报错:IndentationError: expected an indented block
# (缩进错误:在这个代码块前面需要一个缩进)
IndentationError 指“缩进错误”,如果忘记了在 if 分支或 else 分支代码块前加缩进,那么代码就会报错。
***不要忘记在嵌套条件中需要额外再加一个缩进,也就是两个空格。
三、混淆 == 和 =
num = 5
if num = 0:
print('num 等于 0')
else:
print('num 不等于 0')
# 报错:SyntaxError: invalid syntax
# (语法错误:不正确的语法)
if 后面接的内容都需要转换成布尔值,使用双等号的 num == 0 是一个布尔表达式,它的值可以为 True 或 False,符合语法要求,但 num = 0 是一个赋值语句,无法被转换成布尔值,所以这里就会提示你 “语法错误”。
Python 用 = 来赋值,用 == 来判断相等
四、搞不清 bool('') 和 bool(' ') 的区别:
bool('') # False
bool(' ') # True
为什么第一个结果为 False,第二个结果为 True。请你看几个例子复习一遍:
bool('') # False
bool(' ') # True
bool('a') # True
bool(0) # False
bool(1) # True
bool([]) # False
bool([1]) # True
bool({}) # False
bool({'a': 1}) # True
对于字符串来说,只有两个引号,中间什么都没有则为空,即 '' 为 False,其他为 True。对应数字来说,0 为空。即 0 为 False,其他都为 True。
对于列表、元组和字典,里面没有元素表示空的。即 []、() 和 {} 为 False,其他都为 True。