循环嵌套
若一个循环结构中还包含循环结构,就是循环嵌套。
for循环嵌套举例
用for循环嵌套打印矩阵九九乘法表:
#code01.py
for i in range(1,10):
print('%4d'%i,end = '')
print()
print('-'*36)
for i in range(1,10):
for j in range(1,10):
print('%4d'%(i*j),end = '')
print()
1 2 3 4 5 6 7 8 9
------------------------------------
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
while循环嵌套举例
用while循环嵌套打印一张左下直角三角形九九乘法表:
#code02.py
i=1
while i<=9:
print('%4d'%i,end = '')
i+=1
print()
print('-'*36)
k=1
while k<=9:
j=1
while j<=k:
print('%4d'%(k*j),end = '')
j+=1
print()
k+=1
1 2 3 4 5 6 7 8 9
------------------------------------
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
8 16 24 32 40 48 56 64
9 18 27 36 45 54 63 72 81
循环中断与短路控制
循环中断与短路分别由break和continue语句实现。
(1)循环中断语句break:循环在某一轮执行到某一语句时,已经有了结果,不需要再继续循环,就用这个语句跳出(中断)循环。
(2)循环语句continue:某一轮循环还没有执行完,已经有了这一轮的结果,后面的语句不必要执行,需要进入下一轮时,就用这个语句短路该层后面还没有执行的语句,直接跳到循环起始处,进入下一轮循环。
需要注意的是,在循环嵌套结构中,它们只对本层循环有效。
1.循环中断语句break
break语句的作用是“跳出本层循环结构”
测试一个数是否是素数:
#code03.py
j=0
n =int(input('输入一个自然数:'))
for i in range(2,n-1):
if n%i==0:
print('%d不是素数。'%(n))
j=1
break
if j==0:
print('%d是素数。'%(n))
输入一个自然数:9483
9483不是素数。
输入一个自然数:17
17是素数。
也可以优化算法,把循环范围设置为range(2,int(sqrt(n))+1):
#code04.py
from math import sqrt
j=0
n =int(input('输入一个自然数:'))
for i in range(2,int(sqrt(n))+1):
if n%i==0:
print('%d不是素数。'%(n))
j=1
break
if j==0:
print('%d是素数。'%(n))
输入一个自然数:9483
9483不是素数。
输入一个自然数:17
17是素数。
2.循环短路语句continue
continue语句的作用是结束当前重复体,而不是跳出循环。当某一轮循环还没有执行完,已经有了这一轮的结果,后面的语句不必要执行,需要进入下一轮时,就用这个语句短路该层后面还没有执行的语句,直接跳到循环起始处,进入下一轮循环。
按照埃拉托色尼筛选法,找到并打印出某个区间中的全部素数。
#code05.py
from math import sqrt
naturalNumber1 = int(input('请输入一个自然数:'))
naturalNumber2 = int(input('请输入另一个自然数:'))
if naturalNumber1 > naturalNumber2:
naturalNumber1,naturalNumber2 = naturalNumber2,naturalNumber1
print('{}~{}间的素数依次为:'.format(naturalNumber1,naturalNumber2),end = '\t')
for n in range(naturalNumber1,naturalNumber2):
isPrimer = True
for i in range(2,int(sqrt(n)+1)):
if n%i == 0:
isPrimer = False
break
if isPrimer == False:
continue
else:
print(n,end = '\t')
请输入另一个自然数:100
3~100间的素数依次为: 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97