python:嵌套循环

Python 循环嵌套

1、Python 语言允许在一个循环体里面嵌入另一个循环

2、嵌套循环简单的来说就是一个循环出现在另一个循环里面。对于外循环的每次迭代,内循环都要完成它的所有迭代

 

while 循环嵌套

语法:

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循环可以用来遍历某一对象(遍历:通俗点说,就是把这个循环中的第一个元素到最后一个元素依次访问一次
语法:

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行: 
.......
第一行的数据为:['地区', '单位名称', '职位代码', '职位名称', '招录人数', '报考人数']
"""

 

你可能感兴趣的:(python3)