循环知识 下2

2019/03/14 22:14
阅读数 117

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

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

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

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

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

TrueFalse,也就叫做【布尔值】。

我们举个例子,请你运行以下代码,看看结果是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
print('以下是and运算')
if a==1 and b==1:    # 【b实际上是-1】
    print('True')                    
else:
    print('False')                因为 b == -1 不会通过 if   and (and要两个条件都满足,才能判断为True)判断语句 执行 else 输出 False (假)
 
 
print('以下是or运算')
if a==1 or b==1:  # 【b实际上是-1】
    print('True')
else:
    print('False')                                                        虽然 b == -1 但是  if or (or只要两个条件满足一个,就能判断为True)a==1 为真 ,所以会执行 if 语句输出 True
 
【not】运算。这个运算很简单,表示翻转的意思。not True就等于Falsenot False就等于True
 

 

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

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

list = [1,2,3,4,5]
a = 1
# 做一次布尔运算,判断“a是否在列表list之中”
print(bool(a in list))
print(bool(a not in list))
因为a=1 是在list是在列表中所以第一行print 打印出为True 真
not in 反之 打印 False 假
 
如果涉及到的数据集合是字典的话,【in】和【not in】就可以用来判断字典中是否存在某个【键】
dict = {'法国':'巴黎','日本':'东京','中国':'北京'}
a = '法国'

print(bool(a in dict))
 
 
break语句。break的意思是“打破”,是用来结束循环的,一般写作if...break
# break语句搭配for循环
for...in...:
    ...
    if ...:
        break

# break语句搭配while循环
while...(条件):
    ...
    if ...:
        break
 
在这里,if...break的意思是如果满足了某一个条件,就提前结束循环。记住,这个只能在循环内部使用。
【注】:Tab键和空格键不能同时混用。
for i in range(5):
  print('明日复明日')
  if i==3:  # 当i等于3的时候触发
    break # 结束循环
 
 
while True我们在上面见过了,这个条件恒为真,就会开启无限循环。而while True常和break语句搭配使用,你也可以学着使用这种写法。你也可以用while 1 或其他形式开启一个无限循环
 
当没有输入'来了'两个字时 一直循环 
while True:    
    print('上供一对童男童女')
    t = input('孙悟空来了吗')
    if t == '来了':
        break
print('孙悟空制服了鲤鱼精,陈家庄再也不用上供童男童女了')
 
 
 
  练习题  提示:① 用while True开启无限循环。② 在循环内部用input() 函数获取用户的数据。 ③ 使用if...break,如果变量p == '小龙女',那就break结束循环。否则又开始循环。④ 结束循环后,打印--通过啦~
while True:
   
    p=input('请输入密码:')
    if p=='小龙女':
     break
print('通过了!')
 
continue语句

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('你触发了break语句,导致else语句不会生效。')   
   break
else:
    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了三次了')

 

 

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部