Python ---循环语句

在相同的地方有相同的代码,用while来解决代码冗余

a=1  ##初始值
while a<=6:  #循环的结束条件,范围在a<=6
    a=a+1     #更新循环变量
    print(f'我吃了第{a}个小笼包')   ##循环体,执行的打印代码

打印结果:
我吃了第2个小笼包
我吃了第3个小笼包
我吃了第4个小笼包
我吃了第5个小笼包
我吃了第6个小笼包
我吃了第7个小笼包
当a=6的情况下,满足a=a+1,所以会打印7
若不想打印7,在6的时候就结束循环,将=去掉就行了,改变条件
break的用法,提前结束所有循环
a=0
while a<=6:
    a=a+1
    if a==3:
        print('吃到奇怪的东西')
        break##提前结束循环        
    print(f'我吃了第{a}个小笼包')

 continue仅仅跳过某个循环,后面的接着运行         
 a=0
while a<=6:

    a=a+1
    if a==3:
         print('吃到奇怪的东西')
         continue##跳过本次循环执行下一次循环       
    print(f'我吃了第{a}个小笼包')  





else在循环结束后的位置,不在循环之内           

添加else
第一种情况:没有break和continue
a=0
while a<6:
    a=a+1

    print(f'我吃了第{a}个小笼包')
else:  ###循环结束才会执行的代码  
    print('我吃完了小笼包')

  输出结果为:
我吃了第1个小笼包
我吃了第2个小笼包
我吃了第3个小笼包
我吃了第4个小笼包
我吃了第5个小笼包
我吃了第6个小笼包
我吃完了小笼包





第二种情况:break存在
a=0
while a<6:
    a=a+1
    if a==3:
        print('吃到奇怪的东西')
        break##提前结束循环        
    print(f'我吃了第{a}个小笼包')
else:    
    print('我吃完了小笼包')

输出结果为:
我吃了第1个小笼包
我吃了第2个小笼包
吃到奇怪的东西
break是没有正常执行循环的,提前终止循环,所以不会执行else里面的代码的



第三种情况:存在continue
a=0
while a<6:

    a=a+1
    if a==3:
         print('小明女朋友吃了第三个小笼包')
         continue##跳过本次循环执行下一次循环       
    print(f'我吃了第{a}个小笼包')
else:     
    print('我吃完了小笼包')


      输出结果为:
我吃了第1个小笼包
我吃了第2个小笼包
小明女朋友吃了第三个小笼包
我吃了第4个小笼包
我吃了第5个小笼包
我吃了第6个小笼包
我吃完了小笼包

continue会正常执行完循环的代码,会正常执行else里面的代码

break是没有正常执行循环的,提前终止循环,所以不会执行else里面的代码的

continue会正常执行完循环的代码,会正常执行else里面的代码

跟conyinue同层级后面的代码不会执行,就是摆放在continue的正在正下方

for循环:计数循环,迭代循环,适用于字符串,例如'python',迭代就是把这个字符串里面的6个字符都拿出来 p y t h o n

格式:
for i in 'python'
print(i)

输出结果就是:
p
y
t
h
o
n
将python 保存在变量i中,该for循环打印了6次
for循环的次数就是可迭代对象(字符串)的长度

去取完字符串的内容后自动结束运行
自动生成一个范围内的数字
for i in range(5):
    print(i)
    运行结果是
0
1
2
3
4
##括号内只有一个数字,默认从0开始,左闭右开区间,也就是>=0,<5,从0开始打印,到5就停止,5本身不打印
括号里面的数字得不到


for i in range(5,10):
    print(i)
    打印结果是:
5
6
7
8
9


#第一个数字是开始值,第二个数字是结束值


for i in range(5,20,5):
    print(i)
打印结果是:
5
10
15
第三位数字就是每一次循环要添加的数值 

range函数里面只能 传入整数






for i in range(1,7):
    if i==3:
        print('吃到了石头')
        break
    print(f'吃了{i}笼包子')
    输出:
 吃了1笼包子
吃了2笼包子
吃到了石头   




for i in range(1,7):
    if i==3:
        print('吃到了石头')
        continue
    print(f'吃了{i}笼包子')

输出:
吃了1笼包子
吃了2笼包子
吃到了石头
吃了4笼包子
吃了5笼包子
吃了6笼包子
while循环
i = 1
sum = 0
for i in range(0,100,3):
    if i % 3 == 0:
        sum += i
    i += 1
print("三的倍数相加", sum)


另一种写法:for循环
i = 1
sum = 0
while i <= 100:
    if i % 3 == 0:
        sum += i
    i += 1
print("三的倍数相加", sum)

else跟if判断结合使用,是当if elif里面的条件不满足的时候,才会执行

else跟循环结合使用,当循环正常结束的时候,才会执行代码

else一定要跟判断语句或者循环语句结合使用

循环嵌套

i=0
while i<5:
    x=0
    while x <5:
        x=x+1
        print(f'小明喝了一口饮料')
    i=i+1
    print(f'小明吃了{i}饼干')
输出:
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明吃了1饼干
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明吃了2饼干
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明吃了3饼干
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明吃了4饼干
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明吃了5饼干

此代码运行顺序是先喝饮料,当饮料喝了5口,就吃一口饼干

喝了几口饮料这个循环是在吃饼干这个循环的内部


现在想让外面吃饼干的次数和喝饮料的次数一样,应该做出一下调整:
将第四行的条件改成while x <=i:


  打印结果则是:
小明喝了一口饮料
小明吃了1饼干
小明喝了一口饮料
小明喝了一口饮料
小明吃了2饼干
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明吃了3饼干
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明吃了4饼干
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明吃了5饼干



吃饼干和喝饮料的次数一样了



for i in range(1,6):
    for x in range(1,6):
        print(f'小明喝了一口饮料')        
    print(f'吃了{i}口饼干')


    打印结果:
吃了1口饼干
小明喝了一口饮料
吃了2口饼干
小明喝了一口饮料
小明喝了一口饮料
吃了3口饼干
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
吃了4口饼干
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
小明喝了一口饮料
吃了5口饼干


    喝饮料和吃饼干的次数不一样,若要一样,修改如下:
    将range(1,6)修改为range(1,i)

与while不同的是for循环是先吃饼干后喝饮料
原因:
因为在第修改后的79行,range(1,i),开始的i的值是1,所以范围是[1,1),j不能从里面获取值
当把print(f'吃了{i}口饼干')注释掉,再把range 的范围改成[1,1),就会发现打印没有结果




for i in range(1,6):
    for x in range(1,i+1):
        print('*'*x)        
    print('#'*i)   
打印结果是 :
 *
#
*
**
##
*
**
***
###
*
**
***
****
####
*
**
***
****
*****
#####
 为什么这个*号从第二次循环的时候开始就可以把第一次循环啊引出来的*号带上?这个*号每循环一次就会带上上一次的循环 ,
 就是因为print('*'*x)这个循环在这个print('#'*i)循环的里面,所以要等x在所规定的范围内print('*'*x) 打印完,才能打印#号,
原理和第9行输出的结果道理一样的                                    
for i in range(6):
    for x in range(i+1):
        print(f'{i}-{x}')        
    print('#'*5)
打印结果:
0-0
#####
1-0
1-1
#####
2-0
2-1
2-2
#####
3-0
3-1
3-2
3-3
#####
4-0
4-1
4-2
4-3
4-4
#####
5-0
5-1
5-2
5-3
5-4
5-5
#####
如何使打印的结果呈现在同一行呢?
应该修改一下内层循环的print,在后面添加end=' '
输出结果为:
1*0 1*1 #####
2*0 2*1 2*2 #####
3*0 3*1 3*2 3*3 #####
4*0 4*1 4*2 4*3 4*4 #####
5*0 5*1 5*2 5*3 5*4 5*5 #####
6*0 6*1 6*2 6*3 6*4 6*5 6*6 #####
7*0 7*1 7*2 7*3 7*4 7*5 7*6 7*7 #####
8*0 8*1 8*2 8*3 8*4 8*5 8*6 8*7 8*8 #####
9*0 9*1 9*2 9*3 9*4 9*5 9*6 9*7 9*8 9*9 #####

如果不想要*号,若是将打印*号的代码删去,打印结果为:
1*0 1*1 2*0 2*1 2*2 3*0 3*1 3*2 3*3 4*0 4*1 4*2 4*3 4*4 5*0 5*1 5*2 5*3 5*4 5*5 6*0 6*1 6*2 6*3 6*4 6*5 6*6 7*0 7*1 7*2 7*3 7*4 7*5 7*6 7*7 8*0 8*1 8*2 8*3 8*4 8*5 8*6 8*7 8*8 9*0 9*1 9*2 9*3 9*4 9*5 9*6 9*7 9*8 9*9

因为若是将打印*号的print删去,就没有Printf去给print(f'{i}*{x}',end=' ')换行了,所以后面的end就没用了

print('#'*5)  在本次代码中承担外层循环控制行的作用还要控制换行

若果不想要*号,可进行修改,将最后一行的代码进行修改
改为:print(end='\n'),则就是默认换行

外层循环控制行,内层循环控制列

for i in range(1,10):
    for x in range(1,i+1):
        print(f'{i}*{x}',end=' ')        
    print(end='\n')

    输出结果为:
1*1 
2*1 2*2 
3*1 3*2 3*3 
4*1 4*2 4*3 4*4 
5*1 5*2 5*3 5*4 5*5 
6*1 6*2 6*3 6*4 6*5 6*6 
7*1 7*2 7*3 7*4 7*5 7*6 7*7 
8*1 8*2 8*3 8*4 8*5 8*6 8*7 8*8 
9*1 9*2 9*3 9*4 9*5 9*6 9*7 9*8 9*9    
i=1
while i<=9:
    j=1
    while j<=i:
        print(f'{i}*{j}',end='  ')
        j=j+1
    print(end='\n')
    i+=1


  i = 1
while i <= 9:
    j = 1
    while j <= i:    # j的大小是由i来控制的
        print(f'{i}*{j}={i*j}', end='\t')
        j += 1
    print('')
    i += 1

for循环和while不同,while循环要写出条件,例如 j += 1

  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值