章节七:布尔值和四种语句

目录
  • 章节七:布尔值和四种语句

    • 1. 用数据做判断:布尔值

      • 1.1 两个数值做比较
      • 1.2 直接用数值做运算
      • 1.3 布尔值之间的运算
    • 2. 四种新的语句
      • 2.1 break语句
      • 2.2 continue语句
      • 2.3 pass语句
      • 2.4 else语句
    • 3. 本章小结
    • 4. 循环小练习
    • 5. 习题练习
      • 5.1 习题一
      • 5.2 习题二
      • 5.3 习题三

1. 用数据做判断:布尔值

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

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

当然,if和while有个显著的区别。那就是if语句只会执行一次,而while是循环语句,只要条件判断为真,就一直循环执行。

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

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

而True和False,也就叫做【布尔值】。

我们举个例子,请你运行以下代码,看看结果是True还是False:

print()括号内的计算其实就是【布尔运算】。终端上出现的True和False我们称为【布尔值】。

第1行和第2行代码很简单啦。我们看后面两行:两个字符串'长安'相等,结果正确,所以打印为True。而字符串'长安'和字符串'金陵'做比较,结果不相等,!=代表不等号,结果正确,打印为True。

只有当条件判断为True时,if和while后面的子句才会执行下去

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

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

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

这时候可能就有人会问了:“那如果我用while True或者while 3<5来做条件,会怎么样?”

不错,程序将会不限次数地运行,陷入【死循环】,比如以下的代码会一直打印'while True',这里就不演示啦

这是因为【布尔值】True直接把条件判断的结果设置为真,也就是条件永远正确。所以代码会无限循环,必须手动强制退出

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

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

我们做一个总结:

1.1 两个数值做比较

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

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

主要记住前两种==和!=,这两种在条件判断中用得非常多。还有大于>和小于<了,这都属于数学常识了。

另外,特别提醒大家一点:在代码中,A == B表示A和B相等,表示相等关系;而=表示给变量赋值。=和虽然长得相似,但没有任何关系

例如:

1.2 直接用数值做运算

请看这段代码:

if 1:print('熊猫')

是不是觉得怪怪的,没关系,我们来运行一下,看终端会给我们一个啥样的结果。

终端打印出了一个字符串熊猫。我们看看这两行代码,这是一段使用了条件判断的代码。因为终端打印出了'熊猫',说明 if 后面的条件为真。

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

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


那为什么可以这样操作呢?

因为在Python中已经设定好什么数据为真,什么为假。假的是有限的,那么除了假的,就都是真的。请看下图:

这个表的左侧一列,它们在Python中被判定为假,比如False、0、'' (空字符串)等等。假的东西是有限的,那么除了假的,其他就都是真的。比如上一个例子中出现的整数1,就是真的。

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

好,现在请看这段代码:

'开心'这个字符串作为一个条件时,被判定为真,所以if后面的条件满足,计算机会执行if的下一行代码;而 ''(空字符串)本身作为一个条件时,被判定为假,if后面的条件为假,计算机不会执行if的下一行代码。


我们可以使用bool()函数来查看一个数据会被判断为真还是假。这个函数的用法与type()函数相似(还有印象吧~),在bool()函数括号中放入我们想要判断真假的数据,然后print出来即可。

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

1.3 布尔值之间的运算

你会接触到and、or、not、in、not in五种运算,别怕,只是看起来多,我保证不难。

还是用例子来说明吧。我们先看看【and】和【or】:

注意到屏幕上的结果了么?

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

这里把and和or的计算逻辑和大家做一个总结:

咱们来做道练习题巩固一下,,,

接下来我们看看【not】运算。这个运算很简单,表示翻转的意思。not True就等于False,not False就等于True

最后,我们讲一下【in】和【not in】两种运算。

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

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

让我们对所有的布尔计算方式做个总结图:

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

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

i = 1
while i<101 :print('把这句话打印100遍')i = i+1

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

i = 100
while i:print('把这句话打印100遍')i = i-1

第二种写法,一开始i是100,while i的布尔运算结果是True。然后每次循环,第4行代码会让i的数值减1。

直到i减少到0的时候,0的布尔运算结果是False,导致while 0会结束循环。所以这样的whlie循环也能正好重复一百遍。这种方式对计算机来说是更简单的,因为计算次数减少了(减少了计算i<100,i<99……这个过程),这也是程序员在写代码时的思考方式。

2. 四种新的语句

2.1 break语句

先来看看break语句。break的意思是“打破”,是用来结束循环的,一般写作if...break。它的写法长这样:

# break语句搭配for循环
for...in...:...if ...:break# break语句搭配while循环
while...(条件):...if ...:break

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

我们运行一下代码来理解这一点。下面是一个for循环代码,本来会循环5次,但循环到第4次的时候就被break语句打断,然后结束循环了。

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

接下来,看个轻松点的小说案例,巩固一下知识。

《西游记》里面有一个车迟国,车迟国里面有个陈家庄,陈家庄的河里有一个鲤鱼精,每一年都要陈家庄上供一对童男童女给自己吃,庄里的人家真是苦不堪言。

这种年复一年的循环状态,在唐僧师徒来到这里后,结束了。因为孙悟空制服了这个鲤鱼精,百姓再也不用受苦了!真好。

如果用Python来展示这个故事:

第1行代码:while True我们在上面见过了,这个条件恒为真,就会开启无限循环。而while True常和break语句搭配使用,你也可以学着使用这种写法。

第2行代码:打印上供一对童男童女的字符串。

第3行代码:请用户输入一个信息。

第4行代码:如果用户输入的信息是 “来了”,那么if后面的条件被满足,执行下面的代码break;如果没有,回到while True 继续循环。

第5行代码:break表示结束循环,然后去执行循环外部的代码,即第6行代码,打印孙悟空制服了鲤鱼精的字符串。

再来我们来练习一下break语句的编程。

我想请你写下这样一个程序,功能是请用户输入密码,如果输入了错误的密码,就一直循环请用户继续输入;如果输入了正确的密码,就结束循环。设定这个密码为'小龙女'。(其实之前做过这题,有印象吗?)

提示:① 用while True开启无限循环。② 在循环内部用input() 函数获取用户的数据。 ③ 使用if...break,如果变量p == '小龙女',那就break结束循环。否则又开始循环。④ 结束循环后,打印--通过啦~

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

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

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

第5行:结束循环后,就打印--通过啦。这已经是循环外部的代码了,所以没有缩进噢。

break子句,咱们就讲到这里。接下来“继续”,continue语句。

2.2 continue语句

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

它的写法是这样的:

# continue语句搭配for循环
for...in...:...if ...:continue...# continue语句搭配while循环
while...(条件):...if ...:continue...

请观察代码,然后运行代码看看是什么结果:

上面的代码,当i==3的时候会触发continue语句,于是回到了循环开头,跳过了一句print语句。

这样的数字游戏是不是有点无聊?不如再用一个小说例子来解解闷吧。《天龙八部》里面有这样一个情节:西夏公主招亲选婿,吸引了许许多多的青年才俊。

西夏公主挑驸马的方式是,是问这些青年3个问题。

这三个问题,只有连续答对,才能判定他就是西夏公主的意中人;否则,只要有任何一题错,都要换人从头开始回答问题。

事实上,西夏公主曾和她的意中人虚竹邂逅于一个黑暗的冰窖之中,但两人不知对方姓名,只互称呼“梦姑”和“梦郎”,两人也看不清彼此的脸。因此,西夏公主为了找到虚竹,才进行招亲,并对候选者问出这三个问题。

如果用Python来描述这个故事,我想应该是这样的:

别怕哈,表面上看这个代码老长老长,其实不难,我们先看1-5行代码。

第1、2行我就不说了,从第3行开始,当第一问的答案不是“黑暗的冰窖”时,就说明答错了,必须从头开始,所以使用continue提前开始循环,回到第1行代码。

如果在第3行,有人回答对了,那么if q1的条件为假,就会继续执行第5行的代码。之后的代码都是同样的道理。

再看10-13行代码,到了最后一行,如果答对,就可以用break结束循环。答错的话,重新开始,这里就不需要continue了。

好,你可以看到continue的作用就是就是当某个条件为真时,又提前回到循环,而不会执行下面的代码

2.3 pass语句

pass语句就非常简单了,它的英文意思是“跳过”

我们举个例子,请你运行代码体验一下:

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

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

2.4 else语句

最后一种else语句,我们在条件判断语句见过【else】,其实,else不但可以和if配合使用,它还能跟for循环和while循环配合使用。

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

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

while...(条件):...
else:...

我们来做一个练习:把之前那段for循环的代码改成while循环,要求运行起来效果一模一样。

3. 本章小结

4. 循环小练习

大家应该玩过一个小游戏,就是一个人在心里想好一个数,比如24,然后让另一个人猜。如果他猜的数比24小,告诉他“太小了”,如果他猜的数比24大,告诉他“太大了”。

我们一起来完成这个“猜大小游戏”的编程,我的思路大概是这样的:

1.一个人在心里想好一个数————这个数字是提前准备好的,可以设置一个变量来保存这个数字。我就设置我的数字为24。

2.然后让另一个人猜————所以可以使用input()函数来接收另一个人输入的数字,并用int()转化为整数。

3.直到猜对为止————天知道几次才能猜对,所以肯定需要用到循环,并且由于不知道要循环几次,所以适合while循环。

4.如果他猜的数比24小就告诉他“太小了”,如果他猜的数比24大就告诉他“太大了”——这里一看“如果……就……”的描述,就知道应该用if...else...写一个条件判断。

详解:第一行代码完成了秘密数字的设定,即设定变量age,并把赋值给它。

第二行代码,while True意味这是一个无限循环,需要想办法结束。冒号后的几行代码就是执行语句,逻辑顺序是先输入猜测的数字,再用if进行判断。

猜错了则会进入下一次循环,需要再次输入猜测的数字并用if进行判断。猜对了则会结束游戏。

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

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

请你再思考一下,这时候的解决方法应该是什么?

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

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

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

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

所以如果第一次就猜对了,break会结束循环,计算机会告诉你right,但不会打印出else里面的“渣渣,给你三次机会都把握不住。”

5. 习题练习

5.1 习题一

1.练习介绍
练习目标:
我们会通过今天的作业,综合运用while True循环和 break。

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

现在,请写个代码:当两人都抵赖时,打印判决,代码结束;若为其他结果,则在打印判决后继续循环。

5.2 习题二

1.练习目标
这个作业会建立在上一个练习的基础上,完善代码的功能。

2.练习要求
上一个练习,我们将“囚徒困境”写成了代码,让程序收集两名囚犯的认罪情况,进而决定他们的判决:
两人都认罪,则各判10年;一个认罪一个抵赖,则前者判1年,后者判20年;两人都抵赖,各判3年。只有两人都不认罪,程序才会停止。
现在有一个社会学家,在不同的人群中做这个实验,一旦遇到都不认罪的情况,就停止该人群中的实验。
同时,他希望程序能记录每一对实验者的选择,以及记录第几对实验者都选择不认罪。请你帮帮他吧。

n = 0
list_answer = []while True:n = n + 1a = input('A,你认罪吗?请回答认罪或者不认')b = input('B,你认罪吗?请回答认罪或者不认')list_answer.append([a,b])if a == '认罪' and b == '认罪':print('俩人都判10年')elif a == '认罪' and b == '不认':print('A判1年,B判10年')elif a == '不认' and b == '认罪':print('A判10年,B判1年')elif a == '不认' and b == '不认':print('俩人都判3年')breakelse:print('只能回答“认罪”或者“不认”')print('第'+str(n)+'对实验者都选择不认罪')for i in range(n):print('第' + str(i+1) + '对实验者的选择是:' + str(list_answer[i]))

5.3 习题三

1.练习目标
通过这个练习,你会学会综合使用循环、数据提取和条件判断。

2.练习要求
我很喜欢看电影,我回忆了一下,这两年我觉得还不错的国产电影。
下面,会将电影的影片名和主演放在字典里,如:

movies = {
'妖猫传':['黄轩','染谷将太'],
'无问西东':['章子怡','王力宏','祖峰'],
'超时空同居':['雷佳音','佟丽娅'],
}

让其他人只要输入演员名,就打印出:××出演了电影××。

movies = {
'妖猫传':['黄轩','染谷将太'],
'无问西东':['章子怡','王力宏','祖峰'],
'超时空同居':['雷佳音','佟丽娅'],
}actor = input('你想查询那位演员:')
for movie in movies:actors = movies[movie]if actor in actors:print(actor+'出演了'+movie)

#章节七:布尔值和四种语句相关推荐

  1. python的布尔判断和四种循环语句

    python的布尔判断和四种循环语句 一.布尔运算的三种方式 (一)两个数值/字符串做比较 (二)直接用数值做运算 (三)布尔值之间的运算 (四)布尔值与While.if 二.四种循环语句 (一)br ...

  2. break后面的语句还执行吗_12.python之配合循环的四种语句

    上节课讲了配合循环语句使用的布尔值和布尔运算,为了能够更好地使用循环语句,本节课会讲述四种能够配合循环语句使用的语句,分别是break语句.continue语句.pass语句.else语句. 一.br ...

  3. html获取data-*值,html5 获取和设置data-*属性值的四种方法讲解

    1.获取id的对象 2.需要获取的就是data-id 和 dtat-vice-id的值 一:getAttribute()方法 const getId = document.getElementById ...

  4. xlsx表格怎么筛选重复数据_excel表格如何筛选重复数据 在Excel表格的两列数据中提取不重复值的四种方法...

    excel表格如何筛选重复数据 在Excel表格的两列数据中提取不重复值的四种方法,最近到了季度汇报的时候,掌握一手excel技能在此刻显得多么重要,为了是你的excel看起来更高大上,今天教大家设置 ...

  5. JAVA中获取文件MD5值的四种方法

    JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...

  6. UE4 C++入门之路4-PostInitProperties函数详解(设置属性默认值的四种方法)

    PostInitProperties函数详解 前言 设置属性默认值的四种方法 一 声明时赋值 二 构造函数赋值 三 构造函数初始化列表 四 PostInitProperties 前言 也许在工作或者学 ...

  7. 算法-寻找数组中的重复值,四种解法

    算法-寻找数组中的重复值 寻找数组中的重复值 寻找数组中的重复值 题目来源于:Leetcode-287.本题归类到简单我无法理解-要满足四个条件需要用很特定的解法,面试中要是用到的话很可能是在给自己挖 ...

  8. 关于交换a和b的值的四种方法

    交换a,b的值,大家可能认为很简单,但是如果突然让你想出4种方法,可能大家一瞬间脑子里只出现了用第三变量暂存的这种最基本的方法,下面我总结了四种方法: 初始化a和b: #关于python较换 a b ...

  9. java基础(七) 深入解析java四种访问权限

    戳上面的蓝字关注我们哦! 精彩内容 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 java项目练习精选 引言   Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4 ...

最新文章

  1. Keil错误fatal error: UTF-16 (LE) byte order mark detected
  2. 北京交通大学研究生教务处爬虫
  3. ngTemplateOutlet递归的问题
  4. Shiro之权限管理的概念
  5. laravel大型项目系列教程(四)之显示文章列表和用户修改文章
  6. 基于原生javascript的ajax实现
  7. MAMP升级mysql5.6到5.7
  8. listitem android,android-为contextmenu标识listitem的ID
  9. 特斯拉又烧一辆!车库里起火 所幸无人受伤
  10. 对于electron-react-boilerplate(ERB)的学习笔记(legacy)
  11. utilities(matlab)—— 多元函数的数值梯度
  12. Sliding Window 单调队列解决--经典滑动窗口问题--求窗口的最大值最小值
  13. 推荐一款免费还开源的数据库可视化软件(DBeaver)
  14. 23_多易教育之《yiee数据运营系统》OLAP平台-整体概述篇
  15. 文本转成图片(自动换行、自定义字体),图片抗锯齿优化,图片压缩优化
  16. Word文档转PDF后文件变小、图片不清晰解决办法
  17. 上号神器扫码登录网站使用教程
  18. 北大沙龙 | 技术大咖为大家讲解什么是UTXO
  19. 阿迪达斯智能运营中心在苏州工业园区开工建设;信达生物任命生物医药科学家刘勇军为集团总裁 | 美通企业日报...
  20. 2018工业互联网峰会在京召开

热门文章

  1. [附源码]JAVA+ssm健身房管理系统(程序+Lw)
  2. 解决VMware_Ubuntu虚拟机中鼠标滚轮不流畅问题
  3. 基于Socket的游戏服务器通信框架的设计与实现
  4. 网络计算机打印老是卡死,电脑网络速度过慢导致电脑经常卡死该怎么处理
  5. 微信小程序中wx:for使用数值循环
  6. 2021年高压电工考试资料及高压电工考试试卷
  7. BLE--Access Address
  8. [2018-10-1]斐讯K2 PSG1218 A2 刷bread 和第三方老毛子Padavan固件
  9. ESRI公司研发GIS产品集合
  10. oracle跨数据库复制数据表-dblink