• Python 基础合集5:条件与循环


    一、前言

    本节主要整理了if 条件语法、两种循环和4个常用的语句。

    环境说明:Python 3.6、windows11 64位

    二、if 条件

    基本语法:

    if ……:
        pass
    elif ……:
        pass
    else:
        pass
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    当条件判断只涉及一分为二的判断时,可以只使用 if…else…,不用elif ,只有当一个整体被划分为2种以上的类别,elif 才派上用场。elif 是elseif 的缩写,有一些语言涉及条件句时,会直接使用elseif 都是一样的意思。
    可以看一个经典的分数判断案例:

    # 案例1:判断一个分数是及格还是不及格,及格线60分
    # 代码1
    score = 61
    if score >= 60:
        print('恭喜你及格了!')
    else:
        print('这次没及格,再接再厉哦!')
    
    # 案例2:判断一个分数是优秀(>=90),还是良好(>=60,且<90),还是较差(<60)
    # 代码2
    score = 61
    if score >= 90:
        print('优秀')
    elif score >= 60:
        print('良好')
    else:
        print('较差')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    else 其实还可以用 elif 进行代替,比如

    # 上个代码块的代码1 改写
    score = 61
    if score >= 60:
        print('恭喜你及格了!')
    elif score < 60:
        print('这次没及格,再接再厉哦!')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    同一个 if…elif…else… 语句之间是有递进关系的,也就是说,先判断前面的条件,符合了就返回,不符合再判断写一个,所以在案例2的代码2中判断良好的时候,不需要再加一个条件 score < 90。除了上面展示的方法,还可以通过if 条件嵌套来实现,见下例子:

    # 代码3
    score = 61
    if score >= 60:
        if score >= 90:
        	print('优秀')
        else:
            print('良好')
    else:
        print('较差')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    有时候可能还会出现一种并列的判断(如下),多个if条件并列,只要符合条件便会打印对应的结果,以下代码会打印出前两个if 条件的结果。
    使用并列的if 添加判断同一个值的类别时,只要判断条件都是互斥的,如代码4中第二个if 语句改为if 90 > score >= 60:即可实现代码2的效果,不过不推荐,容易出岔子。

    # 代码4
    score = 91
    if score >= 90:
        print('优秀')
    if score >= 60:
        print('良好')
    if score < 60:
        print('较差')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    三、循环

    3.1 四个关键字

    3.1.1 break

    break 可以理解为打断,跳出循环。一般比较多是放到if 条件句中,当满足某个条件的时候终止循环,返回结果。
    基本语法:

    # for 循环+break
    for...in...:
        ...
        if ...:
            break
    # while 循环+break
    while...(条件):
        ...
        if ...:
            break
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    如果break 不放在if 条件句中,直接放在循环的一级子句,循环便只会执行一遍,一般没有什么意义,不如直接去掉循环,直接执行循环体的代码,如下

    # break 放在for 循环一级子句中,执行一遍便终止循环
    for i in range(6):
        print(i)
        break
    
    # 直接执行循环体
    i = 0
    print(i)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.1.2 continue

    continue 可以理解为结束本次循环,开启下次循环。一般也和if 条件句一起使用,当满足某个条件的时候,不执行循环体后续代码,回到循环的开始,开启下一次循环。
    基本语法:

    # for 循环+break
    for...in...:
        ...
        if ...:
            continue
    # while 循环+break
    while...(条件):
        ...
        if ...:
            continue
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    示例:打印0-8,除了3之外的8个数

    for i in range(9):
        if i == 3:   # 等于6时,不打印,直接进入下一次循环
            continue
        print(i)
    
    • 1
    • 2
    • 3
    • 4

    3.1.3 pass

    为了保持代码结构的完整性,pass不做任何操作,只是充当了一个占位语句。当没想好结构中具体的代码时,可以先用pass占位,保证程序正常运行不报错。

    3.1.4 else

    放在条件句中,else 条件会在出现 if 和elif 判断条件之外的其他的所有情况的时候执行。
    放到循环中,else 条件会在循环中没有执行break语句时执行,否则就不会执行,如果执行了break,则不执行else 。
    示例:

    # 不执行else 代码 
    for i in range(0,9):   # 取0~8
        if i == 3:         # 等于3时跳出循环
            break
        print(i)
    else:
        print('没有执行break')
    
    # 执行else 代码
    for i in range(0,9,2): # 取偶数
        if i == 3:
            break
        print(i)
    else:
        print('没有执行break')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3.2 两种循环

    3.2.1 for 循环

    基本语法:

    for i in xxx: # xxx可以是str、list、tuple、dict、set、迭代器等
        <循环执行代码>
    
    • 1
    • 2

    常用语法:

    for i in range(x): # x 是一个整数
        <循环执行代码>
    
    • 1
    • 2

    语法介绍:

    • i 是变量名,可以修改为其他变量;
    • in后可接str、list、tuple、dict、set、迭代器等,但不允许接整数、浮点数;若是字典,则赋值给变量的是字典中的key,而不是value,即遍历的是key;若是字符串,会依次输出字符;
    • for…in…语句最后需要加冒号;
    • for…in…语句内部语句需要缩进,tab缩进或两空格、四空格、六空格都可以,只要不混用
    • 循环时,列表里的元素值依次赋值给变量i,i最终的值取决于最新一次的赋值

    作用:用于遍历可迭代的对象,查看使用对象内容,或重复执行循环次数确定的工作,使用次数完成某些任务。

    for i in 'Xin':
        print(i)
    #显示结果依次为:X i n
    
    for i in [1,3,5,7]:
       print(i)
    #显示结果依次为:1 3 5 7
    
    for i in (1,3,5,7):
       print(i)
    #显示结果依次为:1 3 5 7
    
    for i in {1,5,3,7}:  # 集合会先排序再输出
       print(i)
    #显示结果依次为:1 3 5 7
     
    d = {'小A':95,'小B':93,'小C':92}
    for i in d:
        print(i)
    #显示结果依次为:小A 小B 小C
     
    d = {'小A':95,'小B':93,'小C':92}
    for i in d:
        print(d[i])
    #显示结果为:95 93 92
    
    for i in range(1,8):  # 取1~7
       print(i)
    #显示结果依次为:1 2 3 4 5 6 7
    
    for i in range(1,8,2):  # 在1~7,每两位取1个元素
       print(i)
    #显示结果依次为:1 3 5 7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    以上代码提到的range()是一个常用的迭代器,迭代器和序列的不同之处就是,序列全部元素会给你展示出来,打印序列时可以看到所有的值,而迭代器不会给你展示所有元素,你需要时才给你返回相关的元素,每次返回一个。在取单个值和遍历的场景下,从表面上是看不出什么区别的。想要查看迭代器的所有元素,可以根据内部数据结构转化一下,像range(1,8,2)可以通过list(range(1,8,2))转化为列表查看所有元素,当然用tuple(range(1,8,2))转化为元组也可以。
    image.png
    range()参数的意义:

    • range(n)与range(0,n)一样,都是生成一个从0到n-1的整数序列
    • range(m,n),n>m,生成从m到n-1的序列。取头不取尾。
    • range(m,n,p),n>m,生成m到n-1中间隔为p的整数序列。例如range(3,30,5)的意思就是从3开始每间隔5取一个数,直到29,结果为[3,8,13,18,23,28]。(只有两个参数时,p默认为1。)

    再聊聊关于使用for 循环次数的应用,比如说我要打印3遍“Hello World!”,其实有无数多中方式,以下代码介绍4种,希望能打开你的思维。

    # 法1:将0、1、2赋值i 循环3次
    for i in range(3):
        print('Hello World!')
    
    # 法2:将2、3、4赋值i 循环3次
    for i in range(2,5):
        print('Hello World!')
    
    # 法3:将3、5、7赋值i 循环3次
    for i in range(3,9,2):
        print('Hello World!')
    
    # 法4:将'X'、'i'、'x'赋值i 循环3次
    for i in 'Xin':
        print('Hello World!')
    
    # in后面替换成任意具有3个元素且合法的元组、列表、集合、字典都可以(合法即没有错误)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    PS:如果是初学者,可能会对 for i in range(1,8):\n\t print(i)的意义会感到疑惑,本身执行这个其实没有多大的意义,要有对应的场景应用才有意义。该语句的应用有两个方面的价值,一个是只用它的循环次数,一个是变量 i 有意义,需要用来辅助处理数据。给个简单的场景,如我要计算从前一天的21点到次日的13点,过了多少个小时(算整点的即可),可以通过循环次数来查看:(这是一个简单的示例,但不是一个好的示例,因为直接13+24-21=16就可以得出结果)

    count = 0     # 从0开始
    for i in range(21,24+13):
        count = count + 1    # 每循环一次加上1,计算循环的次数
    print(count)  # 结果为16
    
    • 1
    • 2
    • 3
    • 4

    3.2.2 while循环

    基本语法:

    while <条件><循环执行代码>
    
    • 1
    • 2

    作用:

    • 与if条件判断类似,while后条件若满足,会进入语句内部循环体执行代码直至条件不再满足或内部打断。
    • 用于处理未知循环次数已知循环次数的问题。

    注意:当while的条件中含有变量时,变量需要先定义。
    while循环解决循环次数确定的问题时,通常在循环条件中涉及到变量。变量和条件都是可根据实际情况进行自定义的,如以下代码1和代码2,循环次数和打印结果是一样的,但是变量初始赋值和循环的条件有微小差异,同时在加1重新赋值的位置也有所改变,一开始接触的时候,可以将每一次循环过程写出来,方便理解。
    当解决循环次数不确定的问题是,通常会使用关键字True,然后加上一个if 判断当达成某个条件之后进行break(即跳出循环)。

    # 处理循环次数确定的问题:
    # 代码1
    a = 0
    while a < 5:
          a = a + 1
          print(a)
    
    # 代码2
    a = 1
    while a < 6:
          print(a)
          a = a + 1
    #代码1和代码2的结果均为:
    #1 
    #2
    #3
    #4
    #5
        
    # 代码3
    a = 0
    while a < 5:
          a = a + 1
    print(a)
    # 显示结果为:(因为print()在循环外,只输出最后一次赋值给a的值)
    
    # 处理循环次数不确定的问题,常用while True+if+break
    while True:
        if xxx:
            break
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    3.2.3 两类循环的差异

    for循环和whlie循环最大的区别在于【循环的“工作量”是否确定】,当循环次数确定的情况下,两种循环都可以;当循环次数不确定的时候,则不适用for 循环,只能用while 循环。
    示例:打印从1到100的整数分别乘以5的计算结果,提示第一个打印的值是5,最后一个是500。

    # for循环
    for i in range(1,101): 
        print(i*5)
    
    # while循环
    ## 方法1:设定初始变量的值为0
    i = 0
    while i<100 :
        i = i+1
        print (i*5)
    
    ## 方法2:设定初始变量的值为1
    i = 1
    while i<101 :
        print (i*5)
        i = i+1
    
    ## 方法3:当做工作量不确定,但是有一个条件打印出500后终止循环来出来
    i = 1
    while True:
        print(i*5)
        if i*5 == 500:
            break
        i = i + 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    如上,其实实现方法也有多种,这就是代码的灵活之处,同一个目的地,或有一百种实现方式,多思考,多实践。




    <下节预告:函数基本用法>


    - End -

  • 相关阅读:
    MySQL中的死锁预防和解决
    Android 虚拟分区详解(一) 参考资料推荐
    C# 使用SIMD向量类型加速浮点数组求和运算(1):使用Vector4、Vector<T>
    oracle10和11功能说明比较
    [附源码]计算机毕业设计JAVA基于JSP技术的新电商助农平台
    贪心+二分
    VSCode新建Vue项目
    Linux:环境变量
    pandas算术运算、逻辑运算、统计运算describe()函数、统计函数、累计统计函数及自定义函数运算
    PgSql使用技巧总结 PgSql和MySql的对比
  • 原文地址:https://blog.csdn.net/qq_45476428/article/details/126926704