Python学习笔记 第7章(2) while循环和break以及continue
Python学习笔记 第7章(2) while循环和break以及continue

Python学习笔记 第7章(2) while循环和break以及continue

7.2 while循环简介

  • for循环针对集合中(列表或字典等)的每个元素执行一个代码块
  • while循环则不断运行,直到给定条件不再满足.

7.2.1 使用while循环

while 循环条件 :

最简单的while循环——数数:

number = 1
while number <= 5 :
    print(number)
    number += 1

这个例子中number <= 5就是循环条件,从声明变量number时指定的值1开始,每次循环该值都+1并输出当次循环的变量值,直至其大于5,就不再满足循环条件,这个while循环就会终止.

number += 1中的运算符+=number = number + 1的简写.

7.2.2 让用户选择合适退出程序

while循环可以在满足条件是无限次数的运行,可以增加一个退出值让用户选择合适结束程序.

下面的循环定义了一个退出值!='quit',即如果shuru的值不等于quit就会无限循环下去,直到用户输入的值为quit时,就不再满足循环条件,随即结束程序.

tishi = "我会把你输入的内容打印在屏幕上."
tishi += "\n当你想要退出时,请输入 quit 即可."

shuru="" #变量在使用前必须先声明

while shuru !='quit':
    shuru = input(tishi)
    print(f"\t{shuru}")

上面例子在while循环应当结束时,会将退出值quit也打印出来,然后才真的结束程序.通过添加一个if测试条件,可以真正实现,在用户输入qiut后就立即结束程序.

tishi = "我会把你输入的内容打印在屏幕上."
tishi += "\n当你想要退出时,请输入 quit 即可."

shuru=""
while shuru !='quit':
    shuru = input(tishi)

    #if语句会判断输入值是否为quit,只有不是quit时才会执行print()函数
    if shuru !='quit':
        print(f"\t{shuru}")

7.2.3 使用标志

实际应用中会存在由多个条件控制循环的情况,只要满足其一就应该终止循环.如果写在一起,语句会复杂难懂,也容易出错.这时可以定义一个变量,由其判断程序是否应该结束.当其值为True时继续,当其值为False时终止.实现这个作用的变量称为标志(flag).将flag变量放在while语句中,而其他可能使flag值为False的判断放在其他地方,这样,while只需检查一个条件,即flag的值即可决定是否继续循环.

flag变量的名字可以自定义为任意符合命名规则的名称

上面的例子可以修改为如下这样,将之前的判断语句用flag替代,循环只需要判断flag的值这一个条件,至于flag的值何时为False则由循环内部的if-elif-else语句去检查,当输入值为quit或者q时,均为False.

当影响循环的测试条件有多个,且每个都应该终止循环时,应该用flag来简化代码.

tishi = "我会把你输入的内容打印在屏幕上."
tishi += "\n当你想要退出时,请输入 quit 或者 q 即可. "

#flag变量的默认值应为True,否则无法执行首次循环
panduan = True

#while语句则不再写条件,而是只写flag变量
while panduan :
    shuru = input(tishi)

    #if语句会判断输入值是否为quit
    if shuru == 'quit':
        #如果是,就将flag变量的值改为False以结束循环
        panduan = False
    elif shuru == 'q':
        panduan = False
    else:
        print(f"\t{shuru}")

7.2.4 使用break退出循环

break用于控制程序流程,只要执行了break则立即退出,其后的语句都将不再执行.如下:

tishi = '请输入你向往的城市名称,需要结束时输入quit即可. '

#while True :循环将不断运行,直到发生break
while True :
    city = input(tishi)

    if city == 'quit':
        #break并不去测试判断,而是直接结束
        break
    else:
        print(f"\t你向往的城市是:{city}")
  • breakflag的区别是,break可以当即结束,而flag测试为False后要等再次回到while语句处才会结束.代码块较大时,效率有差别.
  • break可以用于所有的Python循环中,如for循环.

7.2.5 在循环中使用continue

continuebreak都会忽略其后面的语句,区别在于,break直接结束循环,而continue则立即返回循环开始处,即while所在行.有些程序中,当某个测试条件成立时应立即返回循环开始处并忽略后面的语句,这样更有效率.

如下面这个例子,仍然是判断奇偶数,但是只需要输出奇数,而跳过偶数,同时也或略后面的语句以提高效率.

#先定义变量值为0,以开始循环
shulie = 0

while shulie < 10:
    shulie += 1
    if shulie % 2 ==0:
        #如果测试结果True则直接回到开头
        continue

    因为没有定义else,当测试结果False时则继续执行后面语句
    print(f'\t{shulie}')

7.2.6 避免无限循环

由于人为失误,或者程序不严谨,难免会出现无限循环.在VS Code和大多数环境中,遇到死循环可以Ctrl+C结束运行.

下面这个程序就是一个无限循环,除非Ctrl+C或者强制关闭终端,否则会无限循环下去.

number = 0

panduan = True
while panduan :
    print(number)
    number += 1

程序里定义了flag初始值为True,但是并没有测试其何时为False,因此变量panduan的值永远是True,也没有break来结束循环,所以循环就会没完没了的执行下去

本节习题

习题 7.4 最简单的循环

获取用户输入的内容并反馈,允许用户自行结束程序.

tishi='请输入你喜欢的水果,若要退出请输入quit   '
shuiguo=''

while shuiguo != 'quit':
    shuiguo=input(tishi)
    print(f'\t{shuiguo}')

习题 7.5 票价查询

根据用户输入查询不同年龄的票价,允许用户自行结束程序.

tishi='请输入乘车人的年龄(纯数字),以查询票价'
tishi+='\n查询结束后输入 0 即可退出程序.  '

nianling = ''

while nianling != 0 :

    nianling = input(tishi)
    nianling = int(nianling)

    if nianling == 0:
        break
    elif nianling < 3:
        print(f'\t购票人年龄: {nianling}\t票价:婴幼儿免票')
        continue
    elif nianling < 12:
        print(f'\t购票人年龄: {nianling}\t青少年享受半价')
        continue
    else:
        print(f'\t购票人年龄: {nianling}\t成年人需购买全价票')

习题 7.6 拥有两种结束方式的循环

写一个无限循环,在其中使用flag和break结束.

这里写个判断奇偶的小程序,当用户输入quit时用break结束,当输入值大于等于200时用flag结束.

tishi="请输入一个200以内的自然数,我将为你判断它是奇数还是偶数."
tishi+="\n需要结束时请输入 quit\n\t"

panduan = True
number = 0

while panduan :
    number = input(tishi)

    if number == 'quit':
        break

    number = int(number)
    if number >= 200:
        panduan = False
    elif number == 0 :
        print(f'\t{number}既不是奇数,也不是偶数,它甚至不属于自然数.')
    elif number % 2 == 0 :
        print(f'\t{number}是一个偶数.')
        continue
    else:
        print(f'\t{number}是一个奇数.')
        continue

习题 7.7 无限循环

写一个无限循环,使用CtrlC结束它.

number = 0

panduan = True
while panduan :
    print(f'({number}+1)² = { ( number + 1 ) ** 2 }\n')
    number += 1

好吧,无限循环果然令人苦恼,看来写代码的时候要特别注意各种测试条件的正确性,以及适当的使用break,否则真要算到天荒地老了.

发表回复

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