本节目标:
掌握Python循环语句的知识点及应用
循环结构就是程序中控制某条或某些指令重复执行的结构。在Python中构造循环结构有两种做法,一种是for-in
循环,一种是while
循环。
一、while循环
1. 语法格式
1 | while 判断条件(condition):# 自动将表达式的值会直接转为布尔类型 即会判断 bool(表达式) 的值 |
while的循环的基本格式为
while
后加一个空格,然后加一个判断条件,判断条件的值为布尔类型,若为True,则执行循环体的执行语句,反之,循环结束,不执行循环体。判断条件可以是任何类型的条件表达式,任何非零、非空的值均为True。
注意冒号和缩进
执行流程
2. 小案例
请实现一个用户登录系统,如果密码错误则反复提示让用户重新输入,直到输入正确才停止。
1 | print("开始运行超级无敌系统") |
知识点:通过改变表达式的真假可以控制循环体是否执行和跳出循环
break
break,用于在while循环中帮你终止循环,跳出整个循环体,即使表达式的值为真。
1 | print("开始运行系统") |
所以,以后写代码时候,想要结束循环可以通过两种方式实现了,即:条件判断 和 break关键字,两种在使用时无好坏之分,只要能实现功能就行。
continue
continue,在循环中用于 结束本次循环,开始下一次循环。
1 | # 打印1-10中的奇数 |
对于break和continue都是放在循环语句中用于控制循环过程的,一旦遇到break就跳出整个循环体,停止所有循环,一旦遇到continue就停止本次循环,开始下次循环。当然,通过如果没有了break和continue,我们用while条件的判断以及其他协助也能完成很多功能,有了break和continue可以在一定程度上简化我们的代码逻辑。
while else
基本格式
1
2
3
4while <expr>(条件表达式):
<statement(s)>
else:
<additional_statement(s)>else执行的时机
- 当while循环是因为表达式的布尔值为假终止循环时,执行else,可以理解为while正常结束循环,要执行else。
- 当while循环是因为break终止循环时的时候,不执行else,可以理解为while异常结束循环,不执行else。
示例:提示用户输入用户名和密码 输入正确打印其输入正确 最多输三次 若超过三次 则提示重试
1
2
3
4
5
6
7
8
9
10
11num = 1
while num <= 3:
name = input('请输入用户名:')
pwd = input('请输入密码:')
if name == '保国' and pwd == '55555':
print('输入正确')
break
print(f'用户名或密码错误,请重新输入,还剩{3 - num}次机会')
num += 1
else: # 当while根据条件语句正常结束循环的时候,执行else
print('输入用户名和密码次数超过三次,请一小时后重试。')示例:猜数字游戏。规则是计算机出一个1到100之间的随机数,玩家输入自己猜的数字,计算机给出对应的提示信息(大一点、小一点或猜对了),如果玩家猜中了数字,计算机提示用户一共猜了多少次,游戏结束,否则游戏继续。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17import random
answer = random.randint(1, 100)
counter = 0
while True:
counter += 1
number = int(input('请输入数字【1-100】: '))
if number < answer:
print(f'{number} 小了,请重新输入')
elif number > answer:
print(f'{number} 大了,请重新输入')
else:
print('恭喜你猜对了!')
break
print(f'你总共猜了{counter}次')
if counter > 7:
print('你的智商余额明显不足')上面的代码中使用了
break
关键字来提前终止循环,需要注意的是break
只能终止它所在的那个循环,这一点在使用嵌套的循环结构(下面会讲到)需要引起注意。除了break
之外,还有另一个关键字是continue
,它可以用来放弃本次循环后续的代码直接让循环进入下一轮。
二、for循环
1. 语法格式
1 | for <variable> in <sequence>: |
for循环又称
for-in
循环,基本语法格式为for+空格+序列的元素+in+序列+冒号,下面统一缩进的代码块为循环体。序列表示Python中的容器,包含字符串、列表、元组、字典、集合等。
执行流程
2. 循环示例
循环字符串
1
2
3motto = 'Life is short, I use Python!'
for ch in motto:
print(ch)循环列表
1
2
3names = ['乔丹', '科比', '詹姆斯', '奥尼尔', '邓肯']
for name in names:
print(name)循环元组
1
2
3names = ('乔丹', '科比', '詹姆斯', '奥尼尔', '邓肯')
for name in names:
print(name)循环字典
1
2
3
4
5
6names = {'控卫': '乔丹', '分位': '科比', '小前锋': '詹姆斯', '中锋': '奥尼尔', '大前锋': '邓肯'}
for postion in names:
print(postion, names[postion])
for postion, name in names.items():
print(postion, names[postion])循环集合
1
2
3names = {'乔丹', '科比', '詹姆斯', '奥尼尔', '邓肯'}
for name in names:
print(name)
break、continue和else
for循环中的break、continue和else用法和while循环中一样,break是跳出整个循环,continue是跳出当前循环,else是当for循环是因为break跳出循环时,不执行else语句,反之,执行else语句。
示例:输入两个正整数,计算它们的最大公约数和最小公倍数。
提示:两个数的最大公约数是两个数的公共因子中最大的那个数;两个数的最小公倍数则是能够同时被两个数整除的最小的那个数。
1 | x = int(input('x = ')) |
range
语法格式
1
range(start, stop[, step])
参数说明:
- start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
- stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
- step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
示例1:下面代码中计算1~100求和的结果。
1
2
3
4sum = 0
for x in range(101):
sum += x
print(sum)需要说明的是上面代码中的
range(1, 101)
可以用来构造一个从1到100的范围,当我们把这样一个范围放到for-in
循环中,就可以通过前面的循环变量x
依次取出从1到100的整数。当然,range
的用法非常灵活,下面给出了一个例子:range(101)
:可以用来产生0到100范围的整数,需要注意的是取不到101。range(1, 101)
:可以用来产生1到100范围的整数,相当于前面是闭区间后面是开区间。range(1, 101, 2)
:可以用来产生1到100的奇数,其中2是步长,即每次数值递增的值。range(100, 0, -2)
:可以用来产生100到1的偶数,其中-2是步长,即每次数字递减的值。
示例2:实现1-100之间的偶数求和。
1
2
3
4sum = 0
for x in range(2, 101, 2):
sum += x
print(sum)当然,也可以通过在循环中使用分支结构的方式来实现相同的功能,代码如下所示。
1
2
3
4
5sum = 0
for x in range(1, 101):
if x % 2 == 0:
sum += x
print(sum)在for循环中使用range和容器相结合
1
2
3
4
5
6
7
8
9
10sites = ["Baidu", "Google","Xiaomi","Taobao", 'Tencent']
for i in range(len(sites)):
print(i, sites[i])
输出:
0 Baidu
1 Google
2 Xiaomi
3 Taobao
4 Tencent
三、循环嵌套
1. while循环嵌套
1 | while expression: |
示例:99乘法表
1 | i = 1 |
输出
1 | 1*1=1 |
2. for循环嵌套
1 | for iterating_var in sequence: |
示例:99乘法表
1 | for i in range(1, 10): |
输出
1 | 1*1=1 |
四、简单小结
经过上面的学习,知道了Python中有while
和for
循环两种循环语句,那么这两种循环语句有什么区别或者说具体应用场景有什么不同呢?
- 如果明确的知道循环执行的次数或者要对一个容器进行迭代,那么我们推荐使用
for-in
循环, - 如果要构造不知道具体循环次数的循环结构,我们推荐使用
while
循环。while
循环通过一个能够产生或转换出bool
值的表达式来控制循环,表达式的值为True
则继续循环;表达式的值为False
则结束循环。
五、最佳练习
练习1:输入一个正整数判断是不是素数。
提示:素数指的是只能被1和自身整除的大于1的整数。
参考答案1:
1 | from math import sqrt |
参考答案2:
1 | from math import sqrt |
练习2:打印如下所示三角形图案
1 | * |
1 | * |
1 | * |
参考答案:
1 | row = int(input('请输入行数: ')) |
练习3:猜数字游戏【限制次数】
要求:随机生成一个1-100的数字,允许用户最多尝试10次,10次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出。
参考答案:
1 | import random |
练习4:猜数字游戏升级版
要求:允许用户最多尝试5次,每尝试5次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y,就继续让其猜5次,以此往复,如果回答N,就退出程序,如何猜对了,就直接退出。
参考答案:
1 | import random |