在python中使用布尔类型,来表示真假对错。
来看一句话:“今天dewei吃早饭了对吗?”
通过这句话得出,我们希望dewei是吃了早饭的。所以我们企图寻找答案。
如果dewei真的吃了,就应证了这句话。所以对于这句话的结果,就是true。
如果dewei没有吃早饭,也就是否定了这个疑问句。所以结果是false。
而如果为true,展开的逻辑就是dewei现在不饿了。如果为false,可能dewei现在会有些饥饿。
所以说,通过判断的结果,做不同的事情。
因为程序是自上而下执行的,对于一些条件进行假设,如果条件为true,则执行条件代码块。执行完成之后,继续执行下面的代码。
如果条件为false,则不会执行条件代码,而是跳过条件代码,继续执行下面的代码。
图中的平行四边形中的条件:就是条件语句。
条件代码:就是业务语句,也就是条件代码块。
if语句将帮助我们构建出条件语句和条件代码块(业务语句)。
if是关键字,在if的后面的bool_result是添加的命题。if就是对这个命题的真实性的判断。
并且命题的后面要书写冒号。大家注意,曾经在脚本入口中学习过,如果遇到冒号,下一行就是新的代码块,并且要进行缩进。
缩进是由一个tab键或者四个空格键组成的。所以我们看到的第二行的do,就是代表if语句的业务代码块。
并且,相比if的起始位置,进行了缩进。
如果if判断bool_result这个命题为真的时候,将会执行这个代码块。
这个代码块里可以执行python任何的代码。另外,if属于强类型的关键字。它不能用于定义变量名,也没有返回值。
dewei_status = 'hunger'
if dewei_status == 'hunger':
print('Xiaomu invites Dewei to dinner')
运行结果:
Xiaomu invites Dewei to dinner
定义了一个字符串 'hunger',并且赋值给一个变量dewei_status。
接下来做这样一个命题:变量dewei_status是否等于 'hunger'。
if关键字会对这个判断进行真假的裁判。如果为真,则会进入冒号下面的代码块中进行执行。如果不为真,则不会执行if对应代码块中的代码。
定义的变量dewei_status的值是 'hunger',并且将dewei_status与字符串 'hunger'进行判断。这两个肯定相等。
所以一定返回真。if关键字发现返回的是真(true),则将程序执行带入到if逻辑的代码块中执行。
于是打印出:Xiaomu invites Dewei to dinner
例1: if的用法。
# coding:utf-8
info = 'my name is xiaomu'
info_list = info.split()
print(info_list)
if info_list[0] == 'xiaomu':
print(1)
info_list[0] = 'dewei'
if info_list[1] == 'xiaomu':
print(2)
info_list[1] = 'dewei'
if info_list[2] == 'xiaomu':
print(3)
info_list[2] = 'dewei'
if info_list[-1] == 'xiaomu':
print(4)
info_list[-1] = 'dewei'
print(info_list)
info = ' '.join(info_list)
print(info)
运行结果:
/Users/llq/PycharmProjects/pythonlearn/pythonlearn/python_if/bin/python /Users/llq/PycharmProjects/pythonlearn/python_if/if_init.py
['my', 'name', 'is', 'xiaomu']
4
['my', 'name', 'is', 'dewei']
my name is dewei
进程已结束,退出代码为 0
发现print(4)
打印出来了。而上面,3个if的代码块都没有走。这很好理解,列表的0索引对应的值是 'my',所以 'my'并不等于 'xiaomu'。
所以if关键字对于这个检测,返回的结果是false,就不会进入到if代码块中。
第二和第三个也是。1索引的值是'name',2索引的值是‘is’,它们都不等于‘xiaomu’这个字符串。
所以它们if条件判断的结果都是false。也不会进入到对应的if代码块中。
只有到了索引3,也就是-1索引的时候,它的成员是‘xiaomu',和我们的比对相等。
if判断为true,所以走进了代码块。执行了代码块中的代码。先将print(4)打印出来,再将列表的-1索引的值改变成了‘dewei’。
例2: or:或者;成员运算符在if语句中的用法。
info = 'my name is dewei, i am a pythoner, i love python'
info_list = info.split()
if info_list[0] in ['python','i']:
info_list[0] = '*'
if info_list[1] == 'python' or info_list[1] == 'i':
info_list[1] = '*'
if info_list[2] == 'python' or info_list[2] == 'i':
info_list[2] = '*'
if info_list[3] == 'python' or info_list[3] == 'i':
info_list[3] = '*'
if info_list[4] == 'python' or info_list[4] == 'i':
info_list[4] = '*'
if info_list[5] == 'python' or info_list[5] == 'i':
info_list[5] = '*'
if info_list[6] == 'python' or info_list[6] == 'i':
info_list[6] = '*'
if info_list[7] == 'python' or info_list[7] == 'i':
info_list[7] = '*'
if info_list[8] == 'python' or info_list[8] == 'i':
info_list[8] = '*'
if info_list[9] == 'python' or info_list[9] == 'i':
info_list[9] = '*'
if info_list[-1] in ['python','i']:
info_list[-1] = '*'
print(info_list)
info =' '.join(info_list)
print(info)
运行结果:
/Users/llq/PycharmProjects/pythonlearn/pythonlearn/python_if/bin/python /Users/llq/PycharmProjects/pythonlearn/python_if/if_init.py
['my', 'name', 'is', 'dewei,', '*', 'am', 'a', 'pythoner,', '*', 'love', '*']
my name is dewei, * am a pythoner, * love *
进程已结束,退出代码为 0
例3:and:并且。
info = 'my name is dewei'
print(len(info))
if len(info) > 10 and len(info) != 16:
print(info.replace('dewei','xiaomu'))
print('finish')
运行结果:
/Users/llq/PycharmProjects/pythonlearn/pythonlearn/python_if/bin/python /Users/llq/PycharmProjects/pythonlearn/python_if/if_init.py
16
finish
进程已结束,退出代码为 0
这个语句里,两个比大小之间用and连接。and两边的命题,与and有一个空格,这和or是一样的。
看代码:先打印了16这个长度。之后进行了这样一次判断:长度大于10并且长度不能等于16。才会进入这个代码块中。
由于不满足这两个命题的条件,没有进入代码块,而是绕了过去,直接执行下一个打印:print('finish')
。