7 布尔值和四种语句

用数据做判断:布尔值

深入的学习循环语句的用法:

7 布尔值和四种语句

回顾:

7 布尔值和四种语句

while循环是需要有一个“条件”的,当条件被满足,才能开启循环。

例题中,这一点不难理解:我先定义了变量a,然后将0赋值给a;接下来,面对a<5这个条件,计算机就会判断条件满足,用术语来说就是条件为【真】(True),然后开启循环。

直到a+1不断执行,到了 a=5时,条件a<5不再满足,即条件为【假】(False),这段循环就结束了。

真真假假,计算机是怎么做出这样的判断的呢?简单的数学题倒是一看便知,但当逻辑更复杂的时候,计算机怎么决定自己要不要进行下一步行动呢?比如下面这道小题:

概念:

之前我们提到,计算机利用数据有三种方式:1.直接使用数据,2.计算和加工数据,3.用数据做判断。

除了while循环,我之前学过的if…elif…else语句,也涉及到【利用数据用做逻辑判断】。当逻辑判断通过才会继续执行:

7 布尔值和四种语句

这个“判断”的过程,在计算机的世界里是如何发生的呢?

计算机的逻辑判断,只有两种结果,就是True(英文意思是“真”)和False(英文意思是“假”),没有灰色地带。这个计算真假的过程,叫做【布尔运算】。

请你运行以下代码,看看结果是True还是False:

7 布尔值和四种语句

print()括号内的计算其实就是【布尔运算】。终端上出现的True和False我们称为【布尔值】。
只有当条件判断为True时,if和while后面的子句才会执行下去。

while
好,现在我们来体验一下上面出现过的这段奇怪的代码,你会发现它执行后,终端上不显示任何结果:

7 布尔值和四种语句

这是因为while循环执行,必须要while后的条件为“真”,而【布尔值】False本身就是“假”,所以这个循环一次都没运行就结束了。

同理,3>5这个条件恒为“假”,如果把while False换成while 3>5,效果会是一样的——什么都不会出现。

这时候可能就有人会问了:“那如果我用while True或者while 3<5来做条件,会怎么样?”答案是程序将会不限次数地运行,陷入【死循环】,比如以下的代码会一直打印'while True',这里就不让大家运行啦。

7 布尔值和四种语句

if
【布尔值】对条件判断语句有一样的效果:

7 布尔值和四种语句

我们会发现,只有if True成功运行,将结果显示在了屏幕上。当然,if语句不会陷入死循环。

总结:

7 布尔值和四种语句

【布尔运算】的三种方式(作比较、直接用数值做运算、布尔值之间的运算)

1作比较

其实刚才我们print(3>5),计算机会先做一次布尔运算,判断3是否大于5,然后再把判断的结果以【布尔值】的方式打印出来。

用两个数值做比较的【布尔运算】,主要包含以下情况:

7 布尔值和四种语句

2直接用数值做运算

先看一个样例:
这段代码:

7 布尔值和四种语句

这是一段使用了条件判断的代码,因为终端打印出了'熊猫',说明 if 后面的条件为真。

可是怪就怪在,if后面接的不像是一个“条件”,而是一个数字。

其实,整数1在这里就是作为一个条件,被判断为真(True)。这就是数值本身作为一个条件,被判断真假的情况。

那为什么可以这样操作呢?在Python中已经设定好什么数据为真,什么为假。假的是有限的,那么除了假的,就都是真的

7 布尔值和四种语句

总结:直接False、0、空、None 为假,其他都是真

至于None,它代表的是【空值】,自成一派,数据类型是NoneType。要注意它和0的区别,0是整数0,可并非什么都没有

用bool()函数把前面我们提到的各种数据都放进去判断一下,打印出来看看

7 布尔值和四种语句

3布尔值之间的运算
and、or、not、in、not in五种运算

and和or的计算逻辑

7 布尔值和四种语句
7 布尔值和四种语句
7 布尔值和四种语句

a==1 and b==1的意思是【a=1并且b=1】,要两个条件都满足,才能判断为True,而a==1 or b==1的意思是【a=1或者b=1】,只要两个条件满足一个,就能判断为True。

【in】和【not in】两种运算

【in】的意思是“判断一个元素是否在一堆数据之中”,【not in】反之。这个超简单的。

7 布尔值和四种语句

如果涉及到的数据集合是字典的话,【in】和【not in】就可以用来判断字典中是否存在某个【键】:

7 布尔值和四种语句

总结:

7 布尔值和四种语句
7 布尔值和四种语句
7 布尔值和四种语句

掌握了布尔值,以后我们可以写出更加简洁的while循环。

比如说,昨天用while循环重复执行100遍任务,代码会这样写:

7 布尔值和四种语句

今天理解布尔运算原理后,可以把这段代码改造成更“程序员”的方式:

7 布尔值和四种语句

第二种方式对计算机来说是更简单的,因为计算次数减少了(减少了计算i<100,i<99……这个过程),到0自动停止,这也是程序员在写代码时的思考方式。

四种新的语句

break语句

if…break的意思是如果满足了某一个条件,就提前结束循环。记住,这个只能在循环内部使用。

7 布尔值和四种语句
7 布尔值和四种语句

下面是一个for循环代码,本来会循环5次,但循环到第4次的时候就被break语句打断,然后结束循环了

7 布尔值和四种语句

注意:break前面一共缩进了【8个空格】

练习:
这样一个程序,功能是请用户输入密码,如果输入了错误的密码,就一直循环请用户继续输入;如果输入了正确的密码,就结束循环。设定这个密码为'1'

第1行:用while True 开启了一个无限循环。你也可以用while 1 或其他形式开启一个无限循环。

7 布尔值和四种语句

第1行:用while True 开启了一个无限循环。你也可以用while 1 或其他形式开启一个无限循环。

第2行:用input() 函数获取到了一个数据。

第3行:如果这个数据等于之前设定的密码,那么就第4行:结束循环。如果这个数据不等于之前设定的密码,那就回到第1行while True继续循环。

continue语句

continue的意思是“继续”。这个子句也是在循环内部使用的。当某个条件被满足的时候,触发continue语句,将跳过之后的代码,直接【回到循环的开始】。

7 布尔值和四种语句
7 布尔值和四种语句

pass语句

7 布尔值和四种语句
7 布尔值和四种语句

这个代码的意思是:当a>=100的时候,跳过,什么都不做。其他情况,也就是a<100的时候,执行一个print语句。

如果没有pass来占据一个位置表示“什么都不做”,以上的代码执行起来会报错,而不会继续执行:

7 布尔值和四种语句

else语句

其实,else不但可以和if配合使用,它还能跟for循环和while循环配合使用,如果在整个循环中跳出循环导致循环False或等到循环结束自然False,则执行else语句

跟for循环

7 布尔值和四种语句
7 布尔值和四种语句
7 布尔值和四种语句

所以,用一句话总结,当循环中没有碰到break语句,就会执行循环后面的else语句,否则就不会执行。

在while循环中,else的用法也是如此,格式一模一样:

7 布尔值和四种语句

把之前那段for循环的代码改成while循环,要求运行起来效果一模一样

7 布尔值和四种语句

做个总结:

7 布尔值和四种语句

循环小练习

一个人在心里想好一个数,比如24,然后让另一个人猜。如果他猜的数比24小,告诉他“太小了”,如果他猜的数比24大,告诉他“太大了”。

7 布尔值和四种语句
7 布尔值和四种语句

那要怎么在猜对的时候结束游戏呢?这就用到了break语句。

假如我们改变一下题目:一个人在心里想好一个数,比如24,然后让另一个人猜。如果他猜的数比24小,告诉他“太小了”,如果他猜的数比24大,告诉他“太大了”,这个游戏只能猜3次,3次都猜不中,就告诉他“失败了”。

7 布尔值和四种语句

既然是三次机会,那么我们就利用range(3)生成0,1,2的序列,三次循环之后即会结束。

这里我们重点看两个地方:一是break,二是倒数第二句的else。

在for…in…循环中也可以使用break,正常情况下,三次机会用完之后就结束循环,但如果第一次就猜对了,也需要结束循环。前者我们能用range(3)解决,后者则依靠break语句。

for…in…可以和else语句搭配使用。意思是在for…in…循环结束之后,执行else语句里的命令。不过如果for…in…是因为break结束的就不会执行else语句里的命令。

练习:

囚徒困境

题目要求:
假设有两名囚徒A和B因为合伙犯罪被抓捕,因没有确凿可以指认罪行的证据,审判者准备单独审判两位囚徒。
若两人都认罪,则两人各判10年;若一个认罪一个抵赖,则认罪的人判1年,抵赖的人判20年;若两人都抵赖,则各判3年。

7 布尔值和四种语句
while True:
    a = input('A,你认罪吗?请回答认罪或者不认:')
    b = input('B,你认罪吗?请回答认罪或者不认:')
    if a=='Y':
        if b=='Y':
            print('都判10年')
            break
        elif b=='N':
            print('认罪判1年,不认罪的判20年')
            break
        else:
            print('输入错误,冲洗输入')
    elif a=='N':
        if b=='Y':
            print('认罪判1年,不认罪的判20年')
            break
        elif b=='N':
            print('都不认罪,各判3年')
            break
        else:
            print('输入错误,冲新输入')
    else:
         print('输入错误,重新输入')
print('判决完毕')
7 布尔值和四种语句

补充代码,让代码运行时输入演员的名字时,可以打印出:××出演了电影××。

movies = {

'妖猫传':['黄轩','染谷将太'],

'无问西东':['章子怡','王力宏','祖峰'],

'超时空同居':['雷佳音','佟丽娅'],

}


actor = input('你想查询哪个演员?')

补充代码,让代码运行时输入演员的名字时,可以打印出:××出演了电影××。

答案:

movies = {

'妖猫传':['黄轩','染谷将太'],

'无问西东':['章子怡','王力宏','祖峰'],

'超时空同居':['雷佳音','佟丽娅'],

}


actor = input('你想查询哪个演员?')

for  movie in movies:  # 用 for 遍历字典print

    actors = movies[movie]  # 读取各个字典的主演表

    if actor in actors:

        print(actor + '出演了电影' + movie)

发布者:LJH,转发请注明出处:https://www.ljh.cool/7655.html

(1)
上一篇 2022年9月11日 下午9:24
下一篇 2022年9月12日 下午1:02

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注