Python笔记5-while嵌套循环&for循环&break和continue

一、循环语句之while【重点掌握】

1.嵌套循环

类似于嵌套if语句

语法:

while 表达式1:
	while 表达式2:
		语句

# 1.基本使用
"""
while 表达式1:
	while 表达式2:
		语句

工作流程:当进行第一次外层循环时,内层循环会全部执行完毕
         当进行第二次外层循环时,内层循环会全部执行完毕
         ....
"""
n = 0
while n < 3:
    print(n)   # 0 1 2 ---->3
    n += 1
m = 0
while m < 5:
    print(m)   # 0 1 2 3 4---->5
    m += 1

print("*" * 50)

# 查看代码的执行顺序:debug
# 外层循环:执行3次
n = 0
while n < 3:
    # 内层循环:执行5次
    m = 0
    while m < 5:
        print(n,m)
        m += 1
    n += 1
# 15

# 注意:无论代码如何嵌套,但凡遇到循环,都是执行完循环语句之后,后面的代码才有执行的机会

print("*" * 50)

# 2.应用:打印九九乘法表
"""
                                                        行              列  

1x1=1                                                   1              1
1x2=2 2x2=4                                             2               2
1x3=3 2x3=6 3x3=9                                       3               3
....

1x9=9 2x9=18 3x9=27 .......    7x9=63 8x9=72 9x9=81     9               9

规律:
    a.行的取值范围:1~9   i
    b.列的取值范围:1~i   j
    c.表达式的格式:列x行=乘积
"""
# 外层循环:控制的是行
row = 1
while row <= 9:
    # 内层循环:控制的是列
    col = 1
    while col <= row:
        print(col,'x',row,'=',row * col,end=" ",sep='')
        # print(f"{col}x{row}={row * col}",end=' ')
        col += 1
    # 换行
    print()
    row += 1

# 3.练习:求1/1! + 1/2! + 1/3! + ....+ 1/20!的结果
# 5! =  5 * 4 * 3 * 2 * 1
#  外层循环:控制的是1~20的数字,求和
num = 1
total = 0   # 记录和
while num <= 20:
    # 内存循环:分母的阶乘,求阶乘
    m = 1
    mul = 1   # 记录阶乘
    while m <= num:
        mul *= m
        m += 1
    total += 1 / mul
    num += 1
print(total)

# 自己实现:一层循环

二、循环语句之for【重点掌握】

1.基本语法

语法:

for 变量名 in 序列:
	循环体	

功能:for循环主要用于遍历任何序列【容器】,比如列表,字符串,元组,字典和集合等

遍历:指的是依次访问序列中的每一个元素,获取每个元素值

说明:按照顺序获取序列中的每个元素,赋值给变量名,再执行循环体,如此循环往复,直到取完序列中所有的元素为止

# 1.字符串
for i in "hello":
    print(i)

# 2.列表
for n in [10,23,45,6,7,34,5,6,8,1]:
    print('hello world')

print("*" * 50)

# 3.range(start,end,step)
"""
range(start,end,step) :根据具体的需求生成一个具有指定规律数据的容器
    start:开始数字,可以省略,默认为0,如果不省略,包含在内
    end:结束数字,不能省略,不包括在内
    step:步长,可以省略,默认为1
    
    包头不包尾/前闭后开区间
"""

# a
for m in range(4):
    print(m)

print("*" * 50)

# b
for m in range(5,10):
    print(m)

print("*" * 50)

# c
for m in range(1,10,2):
    print(m)

print("*" * 50)

# d
for m in range(10,1,-2):
    print(m)

print("*" * 50)

# e.start为0,end为10,step为2
# 注意:如果end和step同时出现,则不能省略start
# for m in range(10,2):
#     print(m)

print("*" * 50)

"""
注意:
    1.如果容器已知,则for循环的次数是由容器中数据的个数决定的
    2.如果需要使用连续数字 或者 控制循环的次数,可以使用range()
    3.for循环和while循环的使用场景
        a.如果不确定循环的次数,则使用while
        b.如果确定循环的次数,则使用for
"""

2.使用

# 1.计算从1到1000以内所有奇数的和并输出
n = 1
total = 0
while n <= 1000:
    if n % 2 == 1:  # n % 2 != 0
        total += n
    n += 1
print(total)

n = 1
total = 0
while n <= 1000:
    total += n
    n += 2    # step
print(total)


total = 0
for n in range(1,1001):
    if n % 2 == 1:
        total += n
print(total)

total = 0
for n in range(1,1001,2):
    total += n
print(total)

# 2.计算1到100以内能被7或者3整除但不能同时被这两者整除的数的个数
m = 1
count = 0
while m <= 100:
    if (m % 7 == 0 or m % 3 == 0) and  not (m % 7 == 0 and m % 3 == 0):
        count += 1
    m += 1
print(count)

m = 1
count = 0
while m <= 100:
    if (m % 7 == 0 or m % 3 == 0) and  m % 21 != 0:
        count += 1
    m += 1
print(count)


count = 0
for m in  range(1,101):
    if (m % 7 == 0 or m % 3 == 0) and  m % 21 != 0:
        count += 1
print(count)


# 3.计算1到500以内能被7整除但不是偶数的数的个数
m = 1
count = 0
while m <= 500:
    if m % 7 == 0 and m % 2 != 0:
        count += 1
    m += 1
print(count)

count = 0
for m in  range(1,501):
    if m % 7 == 0 and m % 2 != 0:
        count += 1
print(count)


# 4.求1-2+3-4………+97-98+99-100的结果
n = 1
total = 0
while n <= 100:
    if n % 2 == 1:
        total += n
    else:
        total -= n
    n += 1
print(total)

total = 0
for n in range(1,101):
    if n % 2 == 1:
        total += n
    else:
        total -= n
print(total)


# 5.打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是 ⼀个⽔仙花数,因为  1³ + 5³ + 3³ 等于 153
num = 100
while num < 1000:
    bw = num // 100
    sw = num // 10 % 10
    gw = num % 10
    total = gw ** 3 + sw ** 3 + bw ** 3
    if total == num:
        print(num)
    num += 1

print("*" * 30)

for num in range(100,1000):
    bw = num // 100
    sw = num // 10 % 10
    gw = num % 10
    total = gw ** 3 + sw ** 3 + bw ** 3
    if total == num:
        print(num)

三、break和continue【重点掌握】

"""
【面试题】简述break和continue的区别
break:结束break所在的循环
continue:结束本次正在执行的循环,继续下一次循环
"""

# 1.
n = 0
while n < 10:
    print(n)
    n += 1
# 0-9

n = 0
while n < 10:
    print(n)
    if n == 5:
        break
    n += 1
# 0-5

# n = 0
# while n < 10:
#     print(n)
#     if n == 5:
#         continue
#     n += 1
# 0~55555.。。死循环

# for循环中,加1的操作是由range()控制的,所以适用于中间某个值不需要执行的情况
for i in range(10):
    print(i)
    if i == 5:
        continue
    print("over",i)


# 2.break应用在嵌套循环中,结束的是当前循环【就近原则】
m = 0
while m < 3:
    n = 0
    while n < 5:
        print(m,n)
        if n == 2:
            break
        n += 1
    m += 1

# 说明:在实际项目开发中,break应用最多,一般使用break用于提前结束循环,也可以结合死循环使用

四、死循环和else分支【重点掌握】

死循环:在循环语句中,表达式永远为真的循环

语法:

while 表达式:
	语句1
else: 
	语句2

说明:和if-else语句中的作用一样,表示当表达式的值为假的时候,执行else后面的语句2

1.基本使用

# 1.while死循环
# while 1:
#     pass
#
# while True:
#     pass

# pass:占位语句,没有实际意义,但是可以保证代码结构的完整性,一般用于代码块中


# 2.else分支
"""
while 条件:
    pass
else:
    pass

for 变量 in 容器:
    pass
else:
    pass
"""
# a.一般情况下,while-else,for-else,不管循环的条件是否成立,else都会被执行
n = 0
while n < 5:
    print(n)
    n += 1
else:
    print("11111111")

for n in range(5):
    print(n)
else:
    print('222222')

print("*" * 50)

# b.二般情况下,while-else和for-else结合break使用
# 当while或for中的break被执行,则else没有执行的机会
n = 0
while n < 5:
    print(n)
    if n == 3:
        break
    n += 1
else:
    print("11111111")

for n in range(5):
    print(n)
    if n > 10:
        break
else:
    print('222222')

2.练习

# 练习:模拟用户的登录过程:让用户输入自己的用户名和密码,如果用户名为root,密码为abc,则表示登录成功
# 允许错误三次,如果连续三次输入有误,则禁止登录
for i in range(3):
    username = input("请输入你的用户名:")
    pwd = input("请输入你的密码:")
    if username == 'root' and pwd == 'abc':
        print("登录成功!")
        break
    else:
        print("用户名或密码有误,请重新输入")
else:
    print("连续输入错误三次,禁止输入")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值