之前我们提到,计算机利用数据有三种方式:1.直接使用数据,2.计算和加工数据,3.用数据做判断。
除了while循环,我之前学过的if...elif...else
语句,也涉及到【利用数据用做逻辑判断】。当逻辑判断通过才会继续执行:
当然,if和while有个显著的区别。那就是if语句只会执行一次,而while是循环语句,只要条件判断为真,就一直循环执行。
这个“判断”的过程,在计算机的世界里是如何发生的呢?
计算机的逻辑判断,只有两种结果,就是True
(英文意思是“真”)和False
(英文意思是“假”),没有灰色地带。这个计算真假的过程,叫做【布尔运算】。
True
和False
,也就叫做【布尔值】。
我们举个例子,请你运行以下代码,看看结果是True还是False:
print(3<5) True 真
print(3>5) False 假
print(‘长安‘==‘长安‘) True 真
print(‘长安‘!=‘金陵‘) True 真
print()
括号内的计算其实就是【布尔运算】。终端上出现的True和False我们称为【布尔值】。
print()
括号内的计算其实就是【布尔运算】。终端上出现的True和False我们称为【布尔值】。
第1行和第2行代码很简单啦。我们看后面两行:两个字符串‘长安‘相等,结果正确,所以打印为True。而字符串‘长安‘和字符串‘金陵‘做比较,结果不相等,!=
代表不等号,结果正确,打印为True。
只有当条件判断为True时,if和while后面的子句才会执行下去。
好,现在我们来体验一下上面出现过的这段奇怪的代码,你会发现它执行后,终端上不显示任何结果:
while False:
print(‘while False‘)
这是因为while循环执行,必须要while后的条件为“真”,而【布尔值】False本身就是“假”,所以这个循环一次都没运行就结束了。
同理,3>5
这个条件恒为“假”,如果把while False
换成while 3>5
,效果会是一样的——什么都不会出现。
while 3>5:
print(‘while False‘)
这时候可能就有人会问了:“那如果我用while True
或者while 3<5
来做条件,会怎么样?”
我们就来体验一下。怕你生气,先剧透:请注意,这段代码将会无限运行,陷入【死循环】,你需要在键盘上按几次【ctrl+c】来强制结束运行。
while True:
print(‘while True‘)
这是因为【布尔值】True直接把条件判断的结果设置为真,也就是条件永远正确。所以代码会无限循环,必须手动强制退出。
【布尔值】对条件判断语句有一样的效果
我们会发现,只有if True
成功运行,将结果显示在了屏幕上。当然,if语句不会陷入死循环。
我们做一个总结:
用数据做逻辑判断的过程叫【布尔运算】
【布尔运算】会产生【布尔值】
【布尔值】分为 False判断 为假 True判断为 真
False与True就像开关一样,决定if 与while语句是否运行。
我们可以使用bool()
函数来查看一个数据会被判断为真还是假。
print(bool(‘abc‘)) 会在终端显示abc是真是假
and 与 or 区别
a==1 and b==1
的意思是【a=1并且b=1】,要两个条件都满足,才能判断为True,而a==1 or b==1
的意思是【a=1或者b=1】,只要两个条件满足一个,就能判断为True。
布尔值运算 and 条件判断 两个条件都为真时,才会通过往下执行 只要有一个条件为假时不会执行程序。
布尔运算 or 条件判断 两个条件中有一个值为真就会通过往下执行。
a = 1
b = -1
if a==1 and b==1: # 【b实际上是-1】
print(‘True‘)
else:
print(‘False‘) 因为 b == -1 不会通过 if and (and要两个条件都满足,才能判断为True)判断语句 执行 else 输出 False (假)
if a==1 or b==1: # 【b实际上是-1】
print(‘True‘)
else:
print(‘False‘) 虽然 b == -1 但是 if or (or只要两个条件满足一个,就能判断为True)a==1 为真 ,所以会执行 if 语句输出 True
not True
就等于False
,not False
就等于True
最后,我们讲一下【in】和【not in】两种运算。
【in】的意思是“判断一个元素是否在一堆数据之中”,【not in】反之。这个超简单的。
a = 1
print(bool(a in list))
print(bool(a not in list))
a = ‘法国‘
print(bool(a in dict))
if...break
for...in...:
...
if ...:
break
# break语句搭配while循环
while...(条件):
...
if ...:
break
if...break
的意思是如果满足了某一个条件,就提前结束循环。记住,这个只能在循环内部使用。print(‘明日复明日‘)
break # 结束循环
while True
我们在上面见过了,这个条件恒为真,就会开启无限循环。而while True
常和break语句搭配使用,你也可以学着使用这种写法。你也可以用while 1 或其他形式开启一个无限循环print(‘上供一对童男童女‘)
t = input(‘孙悟空来了吗‘)
if t == ‘来了‘:
break
print(‘孙悟空制服了鲤鱼精,陈家庄再也不用上供童男童女了‘)
p=input(‘请输入密码:‘)
if p==‘小龙女‘:
break
print(‘通过了!‘)
continue的意思是“继续”。这个子句也是在循环内部使用的。当某个条件被满足的时候,触发continue语句,将跳过之后的代码,直接回到循环的开始。
它的写法是这样的:
# continue语句搭配for循环
for...in...:
...
if ...:
continue
...
# continue语句搭配while循环
while...(条件):
...
if ...:
continue
...
例题 三个问题,只有连续答对,才能判定他就是西夏公主的意中人;否则,只要有任何一题错,都要换人从头开始回答问题。
事实上,西夏公主曾和她的意中人虚竹邂逅于一个黑暗的冰窖之中,但两人不知对方姓名,只互称呼“梦姑”和“梦郎”,两人也看不清彼此的脸。
因此,西夏公主为了找到虚竹,才进行招亲,并对候选者问出这三个问题
while True:
q1 = input(‘第一问:你一生之中,在什么地方最是快乐逍遥?‘)
if q1 != ‘黑暗的冰窖‘:
continue
print(‘答对了,下面是第二问:‘)
q2 = input(‘你生平最爱之人,叫什么名字?‘)
if q2 != ‘梦姑‘:
continue
print(‘答对了,下面是第三问:‘)
q3 = input(‘你最爱的这个人相貌如何?‘)
if q3 == ‘不知道‘:
break
print(‘都答对了,你是虚竹。‘)
pass语句
pass语句就非常简单了,它的英文意思是“跳过”。
a = int(input(‘请输入一个整数:‘))
if a >= 100:
pass
else:
print(‘你输入了一个小于100的数字‘)
else语句
最后一种else语句,我们在条件判断语句见过【else】,其实,else不但可以和if配合使用,它还能跟for循环和while循环配合使用
for i in range(5):
a = int(input(‘请输入0结束循环,你有5次机会:‘))
if a == 0:
print(‘你触发了break语句,导致else语句不会生效。‘)
break
else:
print(‘5次循环你都错过了,else语句生效了。‘)
第二种 while
i=0
while i>5:
a = int(input(‘请输入0结束循环,你有5次机会:‘))
i=i+1
if a == 0:
print(‘5次循环你都错过了,else语句生效了。‘)
我们一起来完成这个“猜大小游戏”的编程,我的思路大概是这样的:
1.一个人在心里想好一个数————这个数字是提前准备好的,可以设置一个变量来保存这个数字。我就设置我的数字为24。
2.然后让另一个人猜————所以可以使用input()函数来接收另一个人输入的数字,并用int()转化为整数。
3.直到猜对为止————天知道几次才能猜对,所以肯定需要用到循环,并且由于不知道要循环几次,所以适合while循环。
4.如果他猜的数比24小就告诉他“太小了”,如果他猜的数比24大就告诉他“太大了”——这里一看“如果……就……”的描述,就知道应该用if...else...
写一个条件判断。
a=24
while 1:
b=input(‘你猜多少!‘)
if int(b)==a:
print(‘你猜对了!‘)
break
elif int(b)>a:
print(‘你猜大了!‘)
else:
print(‘你猜大了!‘)
假如我们改变一下题目:一个人在心里想好一个数,比如24,然后让另一个人猜。如果他猜的数比24小,告诉他“太小了”,如果他猜的数比24大,告诉他“太大了”,这个游戏只能猜3次,3次都猜不中,就告诉他“失败了”。
考一下,这时候的解决方法应该是什么?
a=24
for i in range(3):
b=input(‘你猜多少!‘)
if int(b)==a:
print(‘你猜对了!‘)
break
elif int(b)>a:
print(‘你猜大了!‘)
else:
print(‘你猜大了!‘)
else:
print(‘没机会i了三次了‘)