循环语句
让计算机重复且自动执行代码
- for…in…循环语句
- while循环语句
for…in…循环:空房间
for i in [1,2,3,4,5]: #i是“空房间”
print(i)
其中,空房间的名字i是item(元素)的意思,其实取什么名字都行。
那么,空房间外"等待办业务的人",是以列表的形式出现的,如果是字典呢?
dict = {'日本':'东京','英国':'伦敦','法国':'巴黎'}
for i in dict:
print(i)
日本
英国
法国
我们用print(i)把“空房间”i打印了出来,发现i会逐个接待字典中的每一个【键】。
字典,列表,字符串都可以。不要怀疑,字符串也属于“一群排队办业务的人”。打个比方,'吴承恩’三个字就像一家三口,但走进空房间办业务时,这家人是可以一个一个进去的。来试试吧。
for i in '吴承恩':
print(i)
吴
承
恩
1,2,3,4,5依次出现。也就是说,当这一群排队的人依次序走进空房间,每个人都会把业务办完。
这个过程,在Python中的学名就叫做【遍历】。
除了列表,字典,字符串三种数据类型,我们还可以遍历其他的数据集合。比如和for循环常常一起搭配使用的:range() 函数。
range()函数
for i in range(3):
print(i)
0
1
2
使用range(a,b) 函数,你可以生成了一个【取头不取尾】的整数序列。
我没事儿取这些整数出来干嘛?嗯,这是个好问题。再来看一段代码,并运行:
for i in range(3):
print('我很棒')
我很棒
我很棒
我很棒
有了range()函数之后,当你想把一段代码固定重复n次时,就可以直接使用for i in range(n)解决问题。
for i in range(11):
print('书桓走的第'+str(i)+'天,想他')
书桓走的第0天,想他
书桓走的第1天,想他
书桓走的第2天,想他
书桓走的第3天,想他
书桓走的第4天,想他
书桓走的第5天,想他
书桓走的第6天,想他
书桓走的第7天,想他
书桓走的第8天,想他
书桓走的第9天,想他
书桓走的第10天,想他
range()函数还有一种用法:
for i in range(0,10,3):
print(i)
0
3
6
9
这里range(0,10,3)的意思是:从0数到9(取头不取尾),步长为3。
请你用for循环完成1到100的整数分别乘以5的计算,并打印出来,效果就像这样:
for i in range(1,101):
print(i*5)
d = {'小明':'醋','小红':'油','小白':'盐','小张':'米'}
for i in d:
print(d[i])
醋
油
盐
米
while循环
我们用for循环解过“1到100分别乘以5”的题目:
for i in range(1,101):
print(i*5)
如果现在用while循环,应该怎么写呢?
n = 1
while n < 101:
n = n + 1
print(n*5)
10
15
20
25
30
...
470
475
480
485
490
495
500
505
有点不太对,改一下:
i = 1
while i<101 :
print (i*5)
i = i+1
5
10
15
20
25
30
35
...
485
490
495
500
for循环和while循环最大的区别在于【循环的工作量是否确定】,for循环就像空房间依次办理业务,直到把【所有工作做完】才下班。但while循环就像哨卡放行,【满足条件就一直工作】,直到不满足条件就关闭哨卡。
所以说,当我们【工作量确定】的时候,我们就可以让for循环来完成重复性工作。反之,要【工作量不确定时】可以让while循环来工作:
# 适合用for...in...循环
for i in '神雕侠侣':
print(i)
# 适合用while循环
password = ''
while password != '816':
password = input('请尝试输入密码:')```
不过有一种情况for循环和while循环都可以解决问题,那就是【把一件事情做N遍】:
```python
#用for循环把诗句打印3遍
for i in range(1,4) :
print('明日复明日,明日何其多。')
#用while循环把诗句打印3遍
j = 1
while j<4 :
print ('明日何其多,明日何其多。')
j =j+1
练习
打印数字1-7,跳过4。分别用两种循环实现(判断)。
#查看注释,运行代码。
# while 循环
n = 0
while n < 7:
n = n+1
if n != 4: # 当num != 4,执行打印语句;等于4时不打印。
print(n)
# for 循环
for num in range(1,8): # 为同时能运行两个循环,新取参数 num。
if num != 4: # 当num != 4,执行打印语句;等于4时不打印。
print(num)
终极练习:
练习要求
小明、小红、小刚是同班同学,且坐在同一排,分别坐在第一位、第二位、第三位。
由于他们的身高都差不多,所以,老师计划让他们三个轮流坐在第一位。
每次换座位的时候,第一位变第三位,后面两位都往前一位。
法1:
students = ['小明','小红','小刚']
for i in range(1,4):
students.append(str(students[0]))
del(students[0])
print(students)
# 参考答案(不用del())
students = ['小明','小红','小刚']
for i in range(3):
student1 = students[0] # 获取第一个座位的学生 student1
students = students[1:] # 让 student1 暂时离开,后面的学生座位都进一位。
students.append(student1) # 将 student1 安排到最后一个座位
print(students)
['小红', '小刚', '小明']
['小刚', '小明', '小红']
['小明', '小红', '小刚']# 答案是一样的
法2(利用pop()函数):
print('提取只取不删:')
list1 = ['0','1','2','3']
print(list1[3])
print(list1)
print('\n删除(del)只删不取:' )
list1 = ['0','1','2','3']
del list1[3]
print(list1)
print('\n移除(pop)又取又删:')
list1 = ['0','1','2','3']
print(list1.pop()) # 默认删除最后一个元素,并返回该元素的值。
print(list1)
print(list1.pop(0)) # 也可指定删除某个元素,并返回该元素的值。
print(list1)
students = ['小明','小红','小刚']
students = ['小明','小红','小刚']
for i in range(3):
student1 = students.pop(0) # 运用pop()函数,同时完成提取和删除。
students.append(student1) # 将移除的student1安排到最后一个座位。
print(students)