zoukankan      html  css  js  c++  java
  • python | 控制流语句-循环结构

     

    3.3 循环结构

    3.3.1 分类

    循环结构共有两种:

    • while循环:「无限循环」,用于循环次数难以提前确定,也可以用于循环次数确定的情况
    • for循环:「有限循环」,用于循环次数可以提前确定,尤其常用于枚举序列,或迭代对象中的元素

    一般而言,优先考虑使用for循环,而相同或不同的循环结构之间可以互相嵌套,实现更为复杂的逻辑。

     

    3.3.1.1 for循环

    for循环适用场景:

    • 循环次数确定的时候
    • 遍历序列

    其使用语法如下:

    for 变量 in 序列:
        循环体
    
    说明:
    for       -     关键字,固定写法
    变量名     -     和声明变量的要求一样
    in        -     关键字,固定写法
    序列       -     容器型数据:字符串、列表、字典、元组、集合、迭代器、生成器、range、文件、组合数据类型
    :         -     固定写法
    循环体     -     和for保持一个缩进的一条或者多条语句;需要重复执行的语句
    
    执行过程         让变量去序列中取值,一个一个的取,取完为止,每取一个值执行一次循环体,
                    for循环可以通过控制序列中元素的个数来控制循环的次数
    
    # 测量列表中每个字符的长度
    words=["mzd思想","邓小平理论","三个代表重要思想","科学发展观","新时代中国特色社会主义思想"]
    for w in words[:]:
        print(w,len(w))
    
    # 测量列表中每个字符的长度
    words = ["mzd思想", "邓小平理论", "三个代表重要思想", "科学发展观", "新时代中国特色社会主义思想"]
    for w in words[:]:
        if len(w) > 5:
            words.remove(w)
    print(words)
    
    # 求输入n个数的平均数
    n=eval(input('要输入多少个数'))
    sum=0.0
    for i in range(n):
        x=eval(input('请输入数字'))
        sum=sum+x
    print(sum/n)
    

     

    3.3.1.2 while循环

    while循环适用场景:

    • 死循环
    • 循环次数不确定

    其使用语法如下:

    while 条件语句:
        循环体
    
    说明:
    while      -    关键字,固定写法
    条件语句    -    任何有结果的表达式;数据、已经声明过的变量、运算表达式(不能是赋值语句)等
    :          -    固定写法
    循环体      -    和while保持缩进的一条或者多条语句;(需要重复执行的语句)
    
    执行过程:		 先判断条件语句是否为True,如果为True就执行循环体,执行完循环体再判断条件语句是否为True,
    			    如果为True又执行循环体,以此类推;直到条件语句为False,循环结束
    
    # while循环:实现0到100的求和
    i = 1
    sum = 0
    while i <= 100:
        sum = sum+i
        i = i+1          # 等价于i += 1(累加)
    print(sum)
    

     

    3.3.2 else拓展

    for循环和while循环都存在else拓展用法:

    • for循环:else语句只在for循环遍历完成后才执行,可用于判断循环执行情况
    • while循环:else语句只在while循环条件不被满足时(为False)才执行
    • break:若循环是因为break结束的,则else语句不会执行

    其使用语法如下:

    for 变量 in 序列:
        循环体
    else:
        代码段
    
    while 条件语句:
        循环体
    else:
        代码段
    
    else中代码段: 		当循环自然死亡(for后的变量数据取完了;while后面的条件为False),else后面的代码段					        
                       会在循环结束后执行;如果循环是因为遇到break而结束的,那么else后面的代码段就不会执行
    else的意义:		可以通过判断else中的代码有没有执行来判断循环有没有遇到break
    
    words=["mzd思想","邓小平理论","三个代表重要思想","科学发展观","新时代中国特色社会主义思想"]
    for w in words:
    	print(w, len(w))
    	break
    else:
    	print('循环正常结束')
    

     

    3.3.3 循环结构优化

    为了获得更高的效率和运行速度,有必要对循环语句进行优化,遵循两个优化原则。

    • 原则1:减少循环内部不必要计算,将与循环变量无关代码尽可能提取到循环之外
    • 原则2:多重循环嵌套时,尽量减少内层循环中不必要计算,尽可能往外提
    # 循环结构-优化前
    import time
    start = time.time()  # 获取当前时间
    digits = (1, 2, 3, 4)
    for i in range(10000):
        result = []
        for i in digits:
            for j in digits:
                for k in digits:
                    result.append(i*100+j*10+k)
    print('Time Used:', time.time()-start)  # 输出所用时间
    len(result)
    
    # 循环结构-优化后,把计算的东西提出来
    start = time.time()  # 获取当前时间
    digits = (1, 2, 3, 4)
    for i in range(10000):
        result = []
        for i in digits:
            i = i*100
            for j in digits:
                j = j*10
                for k in digits:
                    result.append(i+j+k)
    print('Time Used:', time.time()-start)  # 输出所用时间
    len(result)
    

     

    3.3.4 循环控制语句

    python中用breakcontinue来控制循环语句,以实现循环的终止跳出

    3.3.4.1 break

    「终止当次循环,并跳出当前循环」 —— 循环层结束

    可以从两方面理解:

    • 终止当次循环:则当次循环后面的if、elif、else…都不再执行
    • 跳出当前循环:若break跳出的是循环嵌套内层循环,则外层的循环会继续执行
    # 遍历循环拓展模式:通过else判断循环是否正常结束
    words=["mzd思想","邓小平理论","三个代表重要思想","科学发展观","新时代中国特色社会主义思想"]
    for w in words[:]:
        print(w,len(w))
        break
    else:
        print('循环正常结束')
    	
    # 从1开始累加,当和超过100时停止
    i = 1
    sum = 0
    while i in range(100):
        sum = sum+i
        i = i+1
        if sum > 100:
            break
    print(sum)
    print(i)
    
    # 计算小于100的最大素数
    # 素数:只能表示为它自己和1的乘积,如13=13*1
    for i in range(99, 1, -1):
        for j in range(2, i):
            if i % j == 0:     # 不是素数
                break          # 跳出当前循环,继续遍历列表
        else:
            print(i)
            break              # break,跳出所有循环;删除break,输出所有素数
    

     

    3.3.4.2 continue

    「终止当次循环,不跳出当前循环」 —— 循环层未结束

    可以从两方面理解:

    • 终止当次循环:则当次循环后面的if、elif、else…都不再执行
    • 不跳出当前循环:循环会继续执行,直接进入下一次循环的条件判断
    # 找出0-9之间的奇数、偶数,并打印出来
    L1=[]
    L2=[]
    for i in range(10):
        if i%2==0:
            L1.append(i)
            continue
        L2.append(i)
    L1
    L2   
    
    # 找出符合条件的字符:打印非T的字符
    for i in 'PYTHON':
        if i == 'T':
            continue
        print(i)
    else:
        print('正常退出')
    
    # 找出符合条件的字符:打印非T的字符
    for i in 'PYTHON':
        if i == 'T':
            break        # 体会break和continue的区别
        print(i)
    else:
        print('正常退出')
    

     

    3.3.5 死循环

    死循环就是循环不会终止的循环类型,很多都是由于continue使用不当造成的,即continue使得条件表达式判断的结果永远为True,则产生死循环。

    但死循环并非一无是处,可用于完成指定功能,如设置中断程序,常用while true while 1

    # continue使用不当带来的死循环
    # 输出小于10的奇数
    i = 0
    while i < 10:
        if i % 2 == 0:
            continue
            i += 1
        print(i)
    
    # 正确的用法
    i = 0
    while i < 10:
        i += 1
        if i % 2 == 0:
            continue
        print(i)
    
    # 死循环巧妙应用
    # 输入正数时一直循环,输入负数时停止
    while True:     # 等价于while 1
        num = eval(input('请输入一个正数'))
        if num < 0:
            break
    print('程序终止')
    
  • 相关阅读:
    windows中android SDK manager安装更新sdk很慢,或者出现Done loading packages后不动甚至没有任何可用包
    实用小函数
    UML类图几种关系的总结
    TextView自动换行
    Android launchMode=singleInstalce 与onActivityResult
    红黑树
    二叉查找树相关算法
    添加google账户时无法与服务器建立连接
    ubuntu 下eclipse svn更改用户
    ubuntu adb: command not found
  • 原文地址:https://www.cnblogs.com/1k-yang/p/12100437.html
Copyright © 2011-2022 走看看