分支语句:if,else,elif
在生活中,我们经常需要进行选择,比如你可以根据今天天气是晴天还是雨天,决定出门带不带伞。
在Python中我们也有根据条件选择执行不同代码的语句,称作分支语句。
weather = "rain"
if weather == "rain":
print("带伞")
else:
print("不带伞")
上面代码中的后四行就是一个分支语句,意思是如果天气是“雨天”,则输出“带伞”,否则就输出“不带伞”。
if是如果的意思,else是否则的意思,这就是一个最基础的if-else结构。
你可以看到,正如前面所说,因为“=”被用作赋值符号了,所以Python的等于号是“==”。
接下来详细介绍这个结构的格式:
if 条件:
条件成立执行的代码
条件成立执行的代码
......
条件成立执行的代码
else:
条件不成立执行的代码
条件不成立执行的代码
......
条件不成立执行的代码
第一行为if,空格,条件(如weather == "rain"),满足条件则执行if下的代码(代码前有四个空格,这四个空格称为缩进,缩进后的代码有点像是挂在了if下面,用于标注这些代码在if的管理下),如果不满足if空格后的条件,则执行else下的代码(也需要缩进,标注代码在else的管理下)。
关于缩进再提一点。缩进为四个半角空格,可以明显看到有缩进的代码比一般的代码更靠右,像是挂在了其他代码下。
正常的代码都需要顶格写,也就是没缩进。只有在某些特殊结构,比如这里的分支结构和后面会学的其他结构中,当代码可能不被执行或者被多次执行时,才需要缩进来与正常代码区分开。
缩进是必选项,不是可选项。不正确使用缩进可能导致程序不符合预期甚至报错。
print("hello") # 顶格代码正常执行
a = input("请输入年龄:") # 顶格代码正常执行
a = int(a) # 顶格代码正常执行
print("ladder") # 顶格代码正常执行
if a >= 18: # if+空格+条件+冒号
print("成年了") # if缩进内的代码有条件执行
else: # else+冒号
print("未成年") # else缩进内的代码有条件执行
print("step") # 顶格代码正常执行
你可以只写if,而不写else,这样如果条件不满足时就什么也不会发生。但是,你不能在if或else的缩进内什么都不写,这是会报错的,这时就可以用pass作为空代码代替。
pass的作用就是什么都不做,纯粹的占位,不会执行任何代码。
num = 999
if num >= 100:
pass
else:
print("小于100")
# 运行结果:
# (啥也没有)
另外,if和else必须紧紧挨着写,“if缩进内的代码”写完就直接顶格写“else:”,不能在“if缩进内的代码”和“else:”之间插入其他顶格的正常代码,否则会报错。
num = 100
if num >= 100:
print("大于等于100")
print("我是卡在中间的顶格代码")
else:
print("小于100")
# 运行结果:
# SyntaxError: invalid syntax(报错:语法错误)
当你需要根据多个条件选择不同代码时,你可能会这样做:
old = input("请输入年龄:")
old = int(old)
if old >= 60:
print("老年")
if old >= 45:
print("中年")
if old >= 18:
print("青年")
if old >= 7:
print("少年")
else:
print("幼年")
观察代码你便可以看出其中的问题——当你输入70时,70能满足下面的所有条件。也就是说,除了"幼年",其他的字符串都会被输出——这显然不是我们想要的。
这时候我们就可以使用if-elif-else语句了。
old = input("请输入年龄:")
old = int(old)
if old >= 60:
print("老年")
elif old >= 45:
print("中年")
elif old >= 18:
print("青年")
elif old >= 7:
print("少年")
else:
print("幼年")
可以看到,我把中间的几个“if”替换为了“elif”,这有什么区别,又是怎么让程序恢复到我们想要的样子?
elif,即elseif的缩写,你可以读作“否则如果”。当第一个if条件不符合时,会跳到下面的elif语句。此时,如果elif的条件满足,那么就不会再执行下面的判断。同样,如果第一个if条件符合,则下面的任何判断都不会被执行。
这么说可能有点难理解,这里给出上面那段elif代码的等效版本:
old = input("请输入年龄:")
old = int(old)
if old >= 60:
print("老年")
else:
if old >= 45:
print("中年")
else:
if old >= 18:
print("青年")
else:
if old >= 7:
print("少年")
else:
print("幼年")
可以看到,这是一个多层嵌套的if-else语句。如果你理解了if-else的逻辑,那么相信你不难看懂这段代码。你理解这段代码后,再与上面elif的那段代码对比,就能理解elif的机制——else-if。
数据类型:bool(布尔值)
bool类型比较容易理解。不像int有无数个数字,str有无数种字符串,bool只有两个值——True和False。
True表示真,也就是正确;False表示假,也就是错误。
这两个值在Python内都可以通过字面量生成法直接打出来,不需要双引号之类的特殊标识,但是你要记住首字母大写。
bool值可以通过逻辑判断产生,例如等式和不等式:
print("ladder" == "ladder") # True
print("ladder" == "step") # False
print(1 == 1) # True
print(1 == 2) # False
print(1 == "1") # False
print(999 > 111) # True
print(111 >= 111) # True
print(-10 <= 20) # True
print("ladder" <= 0) # 报错:TypeError: '<=' not supported between instances of 'str' and 'int'
tip:这个代码把符号字体改了,等号应为==,大于或等于号应为>=,小于或等于号应为<=。
从上面的代码中可以看出,如果条件成立,就返回True,如果条件不成立,就返回False。
也就是说,我们在分支语句中判断条件时,其实就是在判断bool值。如果bool值为True就执行,为False就不执行。
print(type(1 == 1))
# 运行结果:
# <class 'bool'>
OK,差不多就这些,下一篇讲逻辑运算!

Comments NOTHING