视频地址:网易云课堂17-19课时
分支结构:让你的程序根据条件做不同的事情
循环结构:让你的程序不断地做一件事情
python有两种循环语句,while循环和for循环
一、while循环
第一节的作业已经涉及到了循环:
小甲鱼的循环举例:
当写出死循环时,程序会一直运行直到设备没电,快捷键ctrl + c
可以中断当前程序,退出死循环。
当然还有另外三种退出循环的方式:break、continue和else。
二、break和continue
当遇到break语句,python会立即跳出当前循环,即使循环体内还有待执行的语句!
比如下面这个例子:
continue:跳出本轮循环,回到循环体条件判断的位置。当再次满足条件时,会继续循环。
举例:
当i是偶数时跳出本轮循环不打印,回到while判断语句 i< 10。所以打印的全部为小于10的奇数。
break和continue区别:continue语句是跳出本次循环回到循环体的开头,而break是直接跳出循环体执行循环后面的语句。
三、else
【当循环条件不再为真时,才会执行else里面的语句。】
举例:
m = 1
while m < 5:
print('循环内m的值为:', m)
m = m +1
else:
print('循环外m的值为:', m)
循环内m的值为: 1
循环内m的值为: 2
循环内m的值为: 3
循环内m的值为: 4
循环外m的值为: 5
乍一看好像是多此一举,即使没有else,执行完while语句之后也去执行循环外的语句:
m = 1
while m < 5:
print('循环内m的值为:', m)
m = m +1
print('循环外m的值为:', m)
循环内m的值为: 1
循环内m的值为: 2
循环内m的值为: 3
循环内m的值为: 4
循环外m的值为: 5
但是一旦遇到break,情况就不一样了,看下面这个打卡小程序:
day = 1
while day <= 7:
answer = input('今天你有好好学习吗')
if answer != '有':
break
day = day + 1
else:
print('非常棒,你已经坚持了7天连续学习!')
当我们不使用else时:
day = 1
while day <= 7:
answer = input('今天你有好好学习吗')
if answer != '有':
break
day = day + 1
print('非常棒,你已经坚持了7天连续学习!')
使用else时可以非常方便的不使用标志位的情况下去检测到循环的退出情况。
四、循环的嵌套
如何打印出九九乘法表?(自己试着写一下)
i = 1
while i <= 9:
j = 1
while j <= i:
print(j, '*', i, '=', i*j, end = ' ')
j = j + 1
print()
i = i + 1
无论是break语句还是continue语句,他们只能作用于一层
循环体!
day = 1
hour = 1
while day <= 7:
print('今天是好好学习的第', day, '天')
while hour <= 8:
print('我今天一定要坚持学习八个小时')
hour += 1
if hour > 1:
break
day += 1
这个例子表明,break只跳出其所在的第二层循环体,然后回到了第一层while中继续执行。
五、for循环
可迭代对象:元素可以被单独提取出来的对象,比如字符串“asdfgfg”。
示例一:
for element in 'fishc':
print(element)
============ RESTART: D:\ALIproject\pythonPractise\3_while.py ===========
f
i
s
h
c
while循环可不可以实现上面的功能呢?
可以,我们可以在循环体内依次通过下标索引的方式去访问字符串每一个元素并打印出来。
i = 0
str = 'fishc'
while i < len(str):
print(str[i])
i +=1
=============== RESTART: D:\ALIproject\pythonPractise\3_while.py ===============
f
i
s
h
c
补充:len()函数用于获取一个对象的长度length。
示例二:
for循环如何计算一到一百万的和?
关于range()
for element in 1000000?错,由于整数并不是可迭代的对象所以会报错。这里我们要借助经常跟for循环出生入死的好兄弟——range()
函数,接收三种传参形式,他会生成从star开始到stop的整数序列,step为步进。
sum = 0
for i in range(11):
print(i)
sum += i
print(sum)
=============== RESTART: D:\ALIproject\pythonPractise\3_while.py ===============
0
1
2
3
4
5
6
7
8
9
10
55
注意点:range(11)打印出来的是0到10,也就是不包含stop本身。
# 第二种传参range(start, stop):
for i in range(5, 9):
print(i)
============== RESTART: D:\ALIproject\pythonPractise\3_while.py ===============
5
6
7
8
# 第三种传参方式range(start, stop, step)
for i in range(2, 11, 3):
print(i)
=============== RESTART: D:\ALIproject\pythonPractise\3_while.py ===============
2
5
8
示例三:
Question: 找出10以内的所有素数。(自己好好思考再看答案)
for i in range(2, 11):
m = 2
while m < i:
if i % m == 0:
break
m += 1
else:
print(i, '是一个素数')
=============== RESTART: D:\ALIproject\pythonPractise\3_while.py ===============
2 是一个素数
3 是一个素数
5 是一个素数
7 是一个素数
else在这里出现的刚刚好。
如果i可以被其他数整除他就不是一个素数直接跳出循环,而不会执行else语句。
else循环能被执行只有一种情况,就是当2到i之间所有数都试过都不能被整除,此时就会顺利来到else成为我们的素数。