判断语句


判断语句的介绍— “你要永远浪漫自由,当自己的靠山,大方拥有,有所为有所爱,有所期待”

判断语句属于条件语句中的一种,是编程语言中最为重要的概念之一,在前面的教程中我们或多或少接触到了一些判断语句的案例,在这一小节中,我将为大家做详细的解析。

在 Python 中,由判断语句控制的代码执行的顺序叫做 分支结构 ,在分支结构中,程序会根据条件的真假来选择性地执行某些代码块,以实现不同的逻辑分支。

假设你正在准备出门,你需要根据今天的天气状况来决定是否需要携带雨伞,在这个时候程序就需要做出判断,如果天气很糟糕,程序就要执行 “携带雨伞” 对应的代码,如果天气很好,就会不带伞出门,这个时候程序就是 通过判断语句产生了分支结构

无法显示

在 Python 中,一共有三种代码的执行顺序,分别是 顺序结构、分支结构、循环结构


条件语句的分类

Python 中的判断语句有以下几种:

名称 描述
if 语句 用于在满足特定条件时执行对应的一段代码。
if else 语句 用于在满足特定条件时执行一个代码块,否则执行另一个代码块。
if elif else 语句 用于根据不同的条件执行不同的代码块。

接下来我将结合示例来对上面三种语句做详细的讲解:


条件语句的真假判别

我们在上面介绍过,条件语句下面对应的代码块是否运行是根据表达式结果的布尔值真 True 或者假 False 来决定的,除了 False 本身外,在 Python 中有一些特殊的元素会被程序默认为假值,比如下面这些:

名称 描述
空值对象 空值在条件语句中会被程序默认为 False 。
空的数据结构或者容器 空的数据结构或者容器在条件语句中会被程序默认为 False 。
数值为零 整数的 0 ,或者浮点数 0.0 都被程序默认为 False 。

下面让我通过一些示例来帮助大家理解上面的几种结果为 False 的方式:

除了上面提到的这几种对象外,其他的数据对象都将被视为 True


条件语句的逻辑运算

逻辑运算在条件语句中应用非常广泛,常常应用于语句中同时存在多个表达式的情况。

在上面的教程中提到 条件语句的核心思想是判断布尔值的真假 ,这句话的应用在逻辑运算中尤为常见。在此基础上开始我们的学习:

条件语句的逻辑运算主要分为以下几种:

名称 描述
比较运算 用于判断两个内容的大小关系或者是否相同。
逻辑符运算 通过 and 、or 、not 逻辑符来完成表达式运算。
逻辑符组合运算 同时出现多个表达式需要使用逻辑符组合进行运算。
  • 比较运算

    在 Python 中,进行比较运算主要涉及到判断是否相等、是否不相等以及大小关系比较:

    ① 判断是否相等

    在 Python 中 双等号 == 的意思是比较两侧的内容是否相等,如果相等,则返回 True ,不相等则返回 False 。与之相反的是,冒号和等号的组合 != 的意思是比较两侧内容是否不相等,如果不相等,则返回 True ,相等则返回 False

    【案例】检查用户输入的用户名和密码是否匹配:

    # 我们先设定默认的初始账号和密码
    default_username = '牧旗教程'
    default_password = 'password'
     
    # 使用 input 函数获取用户输入的账号和密码
    username = input('请输入账号: ')
    password = input('请输入密码: ')
     
    # 如果账号和密码同时都正确
    if username == default_username and password == default_password:
        print('登录成功')
    # 如果账号正确但是密码不正确
    elif username == default_username and password != default_password:
        print('密码不正确,请重新输入')
    # 否则登录失败
    else:
        print('您的账号不存在')

    运行代码,并输入正确的账号和密码:

    请输入账号: >? 牧旗教程 
    请输入密码: >? password

    按下回车,输出结果如下:

    登录成功

    在这个案例里,username == default_username 这个表达式是用来判断两个变量是否完全相同,输入正确的账号后该表达式会返回 True 布尔值,账号和密码都为 True ,则会登录成功。否则进入后面的 elif 语句中再进行判断。

    ② 大小关系比较

    在 Python 中的比较运算还有大于号 >、 小于号 < 、大于等于号 >= 、小于等于号 <= ,这些符号的用法和数学中的用法是一样的,在这里不再举例说明。

  • 逻辑符运算

    在 Python 中的逻辑运算符有 andornot 三种,分别代表与、或、非,三种计算方式。这三个逻辑符的输出结果是布尔类型,用于条件语句的判断。让我们结合案例依次进行学习:

    ① and 逻辑符

    在使用 and 逻辑符的时候, 在所有条件全部都为 True 的前提下 ,返回的结果才能是 True ,只要有一个表达式结果是 False ,返回的结果都是 False

    无法显示

    让我们通过一个例子来加强理解:

    【案例】根据多条件组合来判断一个人是否符合飞行员初筛的条件,必须满足年龄大于 18岁、不能是没有学历并且身体健康的条件才符合规定。

    # 使用 input 函数获取个人输入的信息
    age = int(input('请输入您的年龄:'))
    education = input('请输入您的学历(无学历/本科以下/本科/硕士):')
    body = input('请输入您的身体状况(健康/其他):')
     
    # 根据条件判断是否符合初筛的条件
    if age >= 18 and education != '无学历' and body == '健康':
        print('您符合飞行员初筛条件')
    else :
        print('您不符合飞行员初筛条件')

    运行代码,输入一批符合条件的信息进行测试,最后按回车运行,结果如下:

    请输入您的年龄:>? 25
    请输入您的学历(无学历/本科以下/本科/硕士):>? 本科
    请输入您的身体状况(健康/其他):>? 健康
    您符合飞行员初筛条件

    可以看出,我们定义的这个人的各项条件 全都满足 飞行员的初筛条件,也就是三个条件试都是 True ,所以输出的结果也是 True

    ② or 逻辑符

    在使用 or 逻辑符的时候,只要有 任何一个条件 满足是 True ,那么返回的结果就是 True ,只有 所有的条件 都是 False 的前提下,返回的结果才是 False

    无法显示

    让我们通过一个例子来加强理解:

    【案例】根据多条件组合来判断一个人是否符合获得赠品的条件,需要满足的条件是这个人是vip,或者消费金额满1000元,才可以获得赠品。

    is_vip = input('您是否是vip会员?(是/否):')
    amount = float(input('请输入您的消费金额(元):'))
     
    # 这个人是vip 或者消费金额满1000元,就可以获得赠品
    if is_vip == '是' or amount > 1000 :
        print('恭喜您可以获得赠品')
    else:
        print('抱歉,您的资格暂时无法获得赠品')

    运行代码,输入一批符合条件的信息进行测试,最后按回车运行,结果如下:

    您是否是vip会员?(是/否):>? 否
    请输入您的消费金额(元):>? 1500
    恭喜您可以获得赠品

    可以看出,虽然我输入的信息没有 vip 资格,但是满足了消费金额大于 1000 这个条件,也就是两个表达式只要满足了一个,输出的结果就是 True

    ③ not 逻辑符

    not 运算符是不满足这个条件才能返回 True

    【案例】如果不抽烟才可以进入某场所

    smoke = False
    if not smoke :
         print('欢迎进入')

    运行代码,结果如下,可见,输出了 “欢迎进入” 的提示,说明 not smoke 的结果是 True

    欢迎进入
  • 在进行逻辑判断时有一个小技巧叫做 短路求值,可以快速地完成结果判断,短路求值要记住以下的特点:

    对于 and 逻辑符,一旦计算出一个条件是 False ,则整个表达式的结果为 False ,不再计算其他表达式,直接返回结果。因为无论其他表达式的结果是什么,已经有一个 False 存在,整个表达式不可能再为 True

    对于 or 逻辑符,一旦计算出一个条件是 True ,则整个表达式的结果为 True ,不再计算其他表达式,直接返回结果。因为无论其他表达式的结果是什么,已经有一个 True 存在,整个表达式不可能为 False

  • 逻辑符组合运算

    在 Python 中经常会出现逻辑符组合使用的情况,比如在条件语句中同时出现了 andor 或同时出现了 andnot 等组合。

    在遇到逻辑符组合使用的情况时,需要将表达式都转换为布尔值再进行判断。

    在 Python 中经常会出现逻辑符组合使用的情况,遇到这种情况需要遵循一定的优先级计算顺序,下面是程序在计算时会遵循的优先级:

    优先级 名称
    由最高 括号 (和数学中的一样,括号的优先级永远最高)
       ↓ 乘法 ( * ) 、 除法 ( / ) 、 取整 ( // ) 、 取余 ( % )
       ↓ 加法 ( + ) 、 减法 ( - )
       ↓ 是否相等 ( == ) 、 是否不相等 ( != )
       ↓ 非运算符 ( not )
       ↓ 与运算符 ( and )
    到最低 或运算符 ( or )

    让我们通过一个例子来加强理解:

    【案例】写一个程序来判断满足如下条件的用户可以享受优惠,条件是学生或者是年龄大于等于 60 岁的老人,并且购买金额超过 100 元或者购买商品数量超过 3 件。

    # 使用 input 函数获取用户输入的信息
    is_student = input('您是否是学生?(是/否):')
    age = int(input('您的年龄是多少?(岁):'))
    amount = float(input('您的购买金额是多少?(元):'))
    item_count = float(input('您购买商品的数量是多少?(个):'))
     
    # 使用多个逻辑符将条件组合起来
    if (not age <= 60 or is_student == "是") and (amount > 100 or item_count > 3):
        print('您可以享受优惠' )
    else:
        print('您无法享受优惠' )

    运行代码,并输入指定的信息:

    您是否是学生?(是/否):>? 是
    您的年龄是多少?(岁):>? 18
    您的购买金额是多少?(元):>? 150
    您购买商品的数量是多少?(个):>? 2
    您可以享受优惠

    首先按照运算符的先后顺序,括号的优先级是最高的,所以程序会先执行 and 两侧的括号内的表达式。

    先看左侧的括号内的内容,相较于 or 关键词, not 关键词的优先级更高, 所以程序会先计算 not age <= 60 表达式,结果是 False

    接下来计算 is_student == '是' 表达式, 结果也是 True ,所以根据 or 逻辑符的性质,左侧括号内返回的结果是 True

    同理,右侧括号内的表达式返回的也是 True ,最后使用 and 逻辑符连接两个 True ,所以最后判断结果也为 True ,所以我们输入的条件是满足优惠政策的。

  • 当然,条件语句也经常和循环语句联用,达到非常好的效果,在下一节的循环语句中我会做详细的讲解。


    例题

    【案例1】来看一个非常有趣的例题,使用 Python 编写一套程序,用户和计算机进行石头剪刀布,计算机出拳的结果是随机的,判断谁会赢得比赛。

    使用 random 函数可以生成随机数,在使用前需要用 import 函数 引入,关于 import 的详细内容会在后面的教程中学到。

    import random
     
    # 输出计算机的引导语
    print('欢迎来到牧旗教程的猜拳游戏!')
     
    # 使用字典定义石头剪刀布分别对应的数字
    computer_dict = {1:'石头',2:'剪刀',3:'布'}
     
    # 使用 input 函数获取用户输入的信息
    user_choice = input("请输入您的选择(石头/剪刀/布):")
     
    # 判断用户输入的信息是否合规
    if user_choice not in ['石头','剪刀','布']:
        print('您的输入不合规,请重新运行程序并在石头、剪刀、布中选择一个')
    else:
        # 使用 random 函数让计算机随机生成一个1-3的数字
        computer_choice = random.randint(1,3)
     
        # 将计算机生成的数字转化为文字
        computer_string = computer_dict[computer_choice]
     
        # 输出计算机的引导语
        print('您的选择是 :', user_choice)
        print('计算机的选择是 :', computer_string)
     
        # 开始进行比大小计算并输出结果
        if user_choice == computer_string:
            print('结果是平局!')
        elif (user_choice == '石头' and computer_string == '剪刀')\
            or (user_choice == '剪刀' and computer_string == '布')\
            or (user_choice == '布' and computer_string == '石头'):
            print('恭喜获胜!')
        else:
    print('您输了!')

    这个案例中用到了字典、if 语句、逻辑符组合使用等知识点,运行上面的代码:

    欢迎来到牧旗教程的猜拳游戏!
    请输入您的选择(石头/剪刀/布):

    我们随意输入一个选择试试,并按下回车:

    欢迎来到猜拳游戏!
    请输入您的选择(石头/剪刀/布):>? 石头
    您的选择是 : 石头
    计算机的选择是 : 剪刀
    恭喜获胜!

    大家在测试的时候结果可能会与我的结果不同,因为我们设定的计算机出拳结果是随机的,大家可以多次重新运行代码测试~

    关注公众号【牧旗教程】,回复“更多例题”,获取更多题型进行训练~

    您的打赏将帮助维护网站服务器的正常运营,并为作者的后续更新提供更多的动力。

    无法显示 无法显示