Python循环嵌套及用法

Python 不仅支持 if 语句相互嵌套,while 和 for 循环结构也支持嵌套。所谓嵌套(Nest),就是一条语句里面还有另一条语句,如for里面还有for,while里面还有while,甚至while中有for或者for中有while也都是允许的。

寻找规律写循环

循环嵌套的规律

for循环可以简化程序中重复的代码。
for语句的格式如下:

for i in range(重复次数):
       下级代码

py

for i in range(3):        #外层循环变量
    for j in range(i):    #内层循环变量
        print('up')
    print('walk')
    print('get')

外循环变量i是一个变化的值,变化的规律是0,1,2,刚好 与print(‘up’)每次要被执行的次数一致。我们就可以通过外层 循环变量i,来控制内循环的循环次数,完成操作。

print()命令拓展

end 是print()命令的一个参数,用来设定打印结果以什么结尾。

print(打印内容,end = 结尾内容 )

省略参数end时,默认end = ‘\n’,\n是换行符,所以执行 print()命令会默认换行。我们可以把end设为其他字符串。

py

print(1)
print(2)

省略end参数,打印默认换行。运行结果:

1
2

py

print(1, end = '')
print(2)

让end等于空字符串, 打印时不会换行。运行结果:

12

py

print(1, end = '*')
print(2)

让end等于星号*, 打印时会以*结尾。运行结果:

1*2

for循环嵌套的应用

打印图形

py

for i in range(4):
    for j in range(5):
        print('*', end = '')
    print()

外循环:控制打印哪一行
内循环:打印一行中的每个星号

*****
*****
*****
*****

py

for i in range(5):
    for j in range(i + 1):
        print('*', end = '')
    print()

利用循环变量控制每行星号的个数

*
**
***
****
*****

py

for i in range(5):
    for j in range(i + 1):
        print('*', end = '')
    print()
for i in range(4):
    for j in range(4 - i):
        print('*', end = '')
    print()

分成上下2个三角形

*
**
***
****
*****
****
***
**
*

循环嵌套中的continue

continue语句可以结束当前一次循环,直接进入下一次循环。它的控制范围是有限的,只能控制一层循环。

py

for i in range(4):
    print('next')
    for j in range(3):
        print('yellow')
        print('red')
    if i == 2:
        continue
    print('green')

i=2 时,执行continue语句,跳过print(‘green’), 继续执行下一次外循环。

py

for i in range(4):
    print('next')
    for j in range(3):
        print('yellow')
        if i == 1:
            continue
        print('red')
    print('green')

i=1时,执行continue语句,跳过print(‘red’),继续执行下一次内循环。

内循环中的continue语句,只会结束当前的一次内循环,继续执行下一次内循环,不会影响到外循环中其他下级代码的执行。

循环嵌套中的break

遍历列表

列表的索引是从0开始的。
遍历列表:把列表中的元素,从头到尾一个一个地取出来使用。

py

data = ['X', 'W', 'Z']
for z in data:
    print(z)

z的值是data列表中的元素。

循环嵌套中的break

使用break语句可以结束循环。 在一个有多层循环嵌套的结构中,break的位置,决定了它能结束哪个循环。

py

for j in range(3):
    for k in range(3):
        print('小王')
        break
    print('小王子')
    break
print('你好')

小王
小王子
你好

第一处break语句是内层for循环的下级代码,当程序 执行这个break语句时,只会结束内层for循环,继续执行print(‘小王子’)
第二处break语句是外层for循环的下级代码,当程序执 行这个break语句时,会结束外层for循环,继续执 行print(‘你好’)。

要分析出break会结束哪个循环,我们可以把每一层的循环结构看做一个整体,观察break语句,它 在哪一层,就会结束哪一层循环。

标志变量的使用

可以使用一个标志变量flag,来记录不同的状态。
flag=0,表示列表中有字母E
flag=1,表示列表中没有字母E

py

data = input().split()
flag = 0    #初始化,没有字母E
for d in data:
    print(d)
    if d == 'E':
        flag = 1
        break
print(flag)

当条件成立时,表示列表中 有字母E,把flag设置为1, 再终止内层循环。
当输入为:G E Q时, 运行结果为:

G
E
1

输入为:G F Q时, 运行结果为:

G
F
Q
0

综合应用

在for循环嵌套中同时使用标志变量和break语句。

py

flag = 0
for i in range(3):
    print('go')
    for j in range(4):
        if i == 1 and j == 2
        print('Apple')
        flag = 1
        break
    if flag == 1
        break
    print('end')

内循环:当i=1并且j=2时,打印Apple,把flag设置为1,再执行break,会结束内循环。

go
go
Apple
end

外循环:当flag=1时,会执行break,结束外循环。

标志变量一般用来记录不同的状态。 break语句可以结束它所在的那个循环。

项目分析

说明

每次运行程序,随机生成一个三位密码,用户猜出正确的密码即为成功。
用户可以多次输入,每当输入错误时,程序会分别对每一位数字给出提示,用户需要根据提示信息推测出正确的密码。
Python循环嵌套

生成密码

生成三位的随机密码,每一位是0-9中的一个数字,三个数字各不相同。实现步骤:

  1. 创建列表,存储0-9 [‘0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9’]
  2. 打乱列表 [‘8′,’1′,’3′,’5′,’6′,’0′,’9′,’4′,’7′,’2’]
  3. 组合密码 ‘813’

代码实现:

py

import random   #导入random库,才能使用shuffle()函数
numbers = ['0','1','2','3','4','5','6','7','8','9']
random.shuffle(numbers)   #打乱列表numbers中的元素顺序
password = numbers[0] + numbers[1] + numbers[2]

shuffle( )是random库中的函数,它可以让列表中的所有元素随机排列。
使用时先导入random库

import random
random.shuffle(列表名)

判断输入是否正确

生成密码以后,系统需要接收用户的输入,并判断输入的密码是否正确。
Python循环嵌套
代码实现

py

import random   
numbers = ['0','1','2','3','4','5','6','7','8','9']
random.shuffle(numbers)   
password = numbers[0] + numbers[1] + numbers[2]
while True:
    guess = input('请输入三位数密码:')
    if guess == password:
        print('密码正确')
        break

输入正确时,break语句结束while循环。

错误提示信息

用户输入错误时,需要针对每一位数字给出提示信息:

  1. 这一位数字正确,提示“正确”;
  2. 数字应该在密码的其他位置上,提示“在其他位置”;
  3. 数字不是密码中的任何一个数字,会提示“错误”。

代码实现:

py

while True:
    guess = input('请输入三位数密码:')
    if guess == password:
        print('密码正确')
        break
    else:
        for i in range(3):
            if guess[i] == password[i]:
                print(guess[i], '正确')
            elif guess[i] in password:
                print(guess[i],'在其他位置')
            else:
                print(guess[i],'错误')

判断数字属于哪种情况,并给出对应提示。

项目优化

优化1:检查输入是否是三位数

py

while True:
    guess = input('请输入三位数密码:')
    if len(guess) != 3:
        print('输入格式错误')
        continue

输入以后,先判断输入,位数错误跳出本次循环,继续下一轮输入。

优化2:猜测次数限制,成功失败效果

py

times = 5
unlock = 0
while times > 0:
if guess == password:
    print('密码正确')
    unlock = 1
    break

程序最后,通过unlock的值判断是否解锁成功:

py

if unlock == 1:
    print('解锁成功!')
    print('^O^')
else:
    print('解锁失败!')
    print('*_*')
那年 • 今日
写于2022-04-07 21:43
没有伞的孩子,必须学会努力奔跑。

赞助 点赞 1

Dr.等人对本文发表了2条热情洋溢的评论。
  • Dr. Drunker说道:
    内容越来越硬,哈哈
    1. 老王说道:
      回复 Dr. Drunker: ::wb:wl:: 一周一节课,感觉进度还是有点慢。
  • 发表回复

    您的电子邮箱地址不会被公开。 必填项已用 * 标注