1、Python 语言允许在一个循环体里面嵌入另一个循环
2、嵌套循环简单的来说就是一个循环出现在另一个循环里面。对于外循环的每次迭代,内循环都要完成它的所有迭代
语法:
while expression:
while expression:
statement(s)
statement(s)
1、你可以在循环体内嵌入其他的循环体,如在while循环中可以嵌入for循环, 反之,你可以在for循环中嵌入while循环
2、for循环和while循环,两者的相同点在于都能循环做一件重复的事情;不同点在于,for循环是在序列穷尽时停止,while循环是在条件不成立时停止。
3、外部循环满足条件后,执行代码开始执行内部循环,等内部循环全部执行完毕,如果还满足外部循环条件,则外部循环再次执行,依次类推,直到跳出外层循环。
4、break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句。(跳出当前循环,不会执行break后面的代码(不会执行当前循环下所属代码块,继续执行下面其他代码块的代码))
5、如果使用嵌套循环,break语句将停止执行最深层的循环,并开始执行下一行代码。
6、Python不支持一次跳出多个循环,我们可以通过在父循环中设定一个跳出标志,子循环通过更改这个标志来跳出多个循环
例1:
loop1 = 0
loop2 = 0
while True:
loop1 += 1
print("父循环:",loop1)
break_flag = False
while True:
loop2 += 1
if loop2 == 5:
break_flag = True
print("跳出子循环")
break #跳出当前循环,不会执行break后面的代码(当前所属代码块)
print("子循环:",loop2)
if break_flag == True:
print("跳出父循环")
break
#break语句:跳出本次循环(嵌套循环中只跳出一层循环)
"""
上面代码的输出结果为:
父循环: 1
子循环: 1
子循环: 2
子循环: 3
子循环: 4
跳出子循环
跳出父循环
"""
注:
break和continue的用法给我的感觉就是,在循环里面加一个if的判断语句,当满足这个if的条件时执行break或continue语句(并不再执行其后面的语句),当不满足这个if判断语句时执行其他语句(其他语句正常写:先写正常的语句,再在正常的语句中加一个if的判断条件来跳出循环)
例2:
number = 5
while True:
num = int(input("请输入数字:"))
if num == number:
print("正确")
break #尝试无break的情况(跳出循环时,只结束当前代码块,会执行后面代码块的代码)
elif num > number:
print("大了")
else:
print("小了")
print("end") #无break时,永远都不会执行这句,所有有没有都没啥影响
"""
请输入数字:4
小了
请输入数字:6
大了
请输入数字:5
正确
end
"""
例2_1:
number = 5
while True:
num = int(input("请输入数字:"))
if num == number:
print("正确")
#尝试无break的情况(跳出循环时,只结束当前代码块,会执行后面代码块的代码)
elif num > number:
print("大了")
else:
print("小了")
print("end") #无break时,永远都不会执行这句,会显得多余,但是不会报错
"""
请输入数字:6
大了
请输入数字:5
正确
请输入数字:1
小了
"""
例3:
usename = "root"
passworld = 123456
while True:
name = str(input("请输入用户名:"))
if name == usename:
print("用户名正确")
break
else:
print("用户名错误,请再次输入")
#continue (无影响)
while True:
world = int(input("请输入密码:"))
if world == passworld:
print("密码正确,即将进入系统")
break
else:
print("密码错误,请再次输入")
continue
"""
用户名错误,请再次输入
请输入用户名:hniuo
用户名错误,请再次输入
请输入用户名:root
用户名正确
请输入密码:4654
密码错误,请再次输入
请输入密码:123456
密码正确,即将进入系统
"""
例3_1:
usename = "root"
passworld = "123456"
count = 3
while True:
name = str(input("请输入用户名:"))
if name == usename:
print("用户名正确")
break
else:
print("用户名错误,请再次输入")
while True:
world = input("请输入密码:")
if world == passworld:
print("密码正确,即将进入系统")
break
if count > 0:
count -= 1
if count <= 0:
print("无输入次数,请稍后再试")
break
print("密码错误,还剩" + str(count) + "次机会," + "请再次输入密码")
#print("密码错误,还剩%s次机会,请再次输入密码" % count)
# 不转为str会报错:TypeError: Can't convert 'int' object to str implicitly
"""
请输入用户名:bij
用户名错误,请再次输入
请输入用户名:root
用户名正确
请输入密码:6546
密码错误,还剩2次机会,请再次输入密码
请输入密码:16516
密码错误,还剩1次机会,请再次输入密码
请输入密码:123456
密码正确,即将进入系统
"""
for循环可以用来遍历某一对象(遍历:通俗点说,就是把这个循环中的第一个元素到最后一个元素依次访问一次)
语法:
for iterating_var in sequence:
for iterating_var in sequence:
statements(s)
statements(s)
例4:
num=[]
for i in range(2,100):
for j in range(2,i):
if(i%j==0):
break
else:
num.append(i)
print(num)
"""
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59......]
"""
例4_1:
for i in range(4):
for n in range(i):
print("第%s个外循环"%i)
print(n)
"""
第1个外循环
0
第2个外循环
0
第2个外循环
1
第3个外循环
0
第3个外循环
1
第3个外循环
2
"""
备注:
嵌套可变循环
1、固定的数(比如range()函数中使用的数)也称为常数(constant)。如果在一个for循环的range()函数中使用常数,程序运行时循环总会运行相同的次数,在这种情况下,我们称循环次数是硬编码的。有时我们希望循环次数由用户来决定,或者由程序的另一部分决定,对于这种情况,我们就需要一个变量。
2、不管是嵌套for循环还是嵌套while循环:每执行外循环一次,要等待内循环全部完成或中止,才继续接着外循环,如此反复,直到外循环完成.
3、python中的print 打印函数默认自带换行,可以添加 第二参数 end = " " 来阻止换行。end代表要打印字符串的最后最后一个字符,可以换成制表符或者其他的符号代替换行符而已
例5:
for i in range(1,11):
for number in range(5, 8):
print(i, "*", number, "=", i * number)
print()
"""
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
10 * 5 = 50
10 * 6 = 60
10 * 7 = 70
"""
例5:
#使用for循环实现
for i in range(1, 9+1):
for j in range(1, i+1):
print("%d*%d=%d\t" % (i, j, i*j), end="")
print()
#使用while循环实现
row = 1
while row <= 9:
col = 1
while col <= row:
print("%d*%d=%d\t" % (row, col, row*col), end = "")
#print("%d*%d=%d" % (row, col, row * col), end="\t")
col += 1
print() # 单纯的换行
row += 1
#使用while+for循环实现
for x in range(1,10):
y = 1
while y <= x:
print("%d*%d=%d\t" % (y, x, x * y),end = "")
y += 1
print()
#使用其他写法
print("\n".join("\t".join(["%s*%s=%s" %(x,y,x*y) for y in range(1, x+1)]) for x in range(1, 10)))
"""
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
"""
嵌套循环中感觉还是可能for循环比较常见吧,可能也只要实际遇到了才会有跟深的理解,可能写着写着就会写成for循环中嵌套了一个for循环。特别是那种需要多次遍历的场景
例6:
import xlrd
excel_path = "F:\\Excel_demo\\demo.xls"
#打开文件,获取excel文件的workbook(工作簿)对象
excel = xlrd.open_workbook(excel_path,encoding_override="utf-8")
#获取sheet对象
all_sheet = excel.sheets()
#循环遍历每个sheet对象
sheet_name = []
sheet_row = []
sheet_col = []
for sheet in all_sheet:
sheet_name.append(sheet.name)
print("该Excel共有{0}个sheet,当前sheet名称为{1},该sheet共有{2}行,{3}列"
.format(len(all_sheet),sheet.name,sheet.nrows,sheet.ncols))
for each_row in range(sheet.nrows):#循环打印每一行
print("当前为%s行:"% each_row,type(each_row))
print(sheet.row_values(each_row),type(sheet.row_values(each_row)))
first_row_value = sheet.row_values(0)#打印指定的某一行
print("第一行的数据为:%s" % first_row_value)
"""
该Excel共有3个sheet,当前sheet名称为小于一比八的职位,该sheet共有4行,6列
当前为0行:
['地区', '单位名称', '职位代码', '职位名称', '招录人数', '报考人数']
当前为1行:
['省级单位', '浙江警官职业学院', '13312004000000001', '司法警务专业教学', 1.0, '0']
当前为2行:
['省级单位', '浙江警官职业学院', '13312004000000002', '法学教学', 1.0, '1']
当前为3行:
.......
第一行的数据为:['地区', '单位名称', '职位代码', '职位名称', '招录人数', '报考人数']
"""