本文目录
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}")
break
和flag
的区别是,break可以当即结束,而flag测试为False后要等再次回到while语句处才会结束.代码块较大时,效率有差别.- break可以用于所有的Python循环中,如for循环.
7.2.5 在循环中使用continue
continue
和break
都会忽略其后面的语句,区别在于,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,否则真要算到天荒地老了.