Python基本语法

作者: 郭_扬 | 来源:发表于2019-05-31 15:50 被阅读0次

    Python基本语法

    课程大纲:

    • 变量
    • 运算符
    • 分支与循环
    • 模块与包

    一、变量

    1. 变量定义
    • 在 Python 中,每个变量 在使用前都必须赋值,变量 赋值以后 该变量 才会被创建
    • 等号(=)用来给变量赋值
    • = 左边是一个变量名
    • = 右边是存储在变量中的值
    变量名 = 值
    
    • 案例1 学生注册
    # 定义变量---学生学号
    studentNo = "9527"
    
    # 定义变量---学生密码
    stuentPassword = "123"
    
    # 在程序中,如果要输出变量的内容,需要使用 print 函数
    print(studentNo)
    print(stuentPassword)
    

    说明#是代码注释,快捷键是Ctrl+/

    • 案例2 超市买菜
      需求
      1)柿子的价格是 8.5 元/斤
      2)买了 7.5 斤 柿子
      3)计算付款金额
    # 定义柿子价格变量
    price = 8.5
    
    # 定义购买重量
    weight = 7.5
    
    # 计算金额
    money = price * weight
    
    print(money)
    
    1. 变量类型
      变量的四要素:
    • 变量的名称
    • 变量保存的数据
    • 变量存储数据的类型
    • 变量的内存地址(标识)

    2.1. 变量类型的演练

    • 需求
      定义变量保存小强的个人信息
      姓名:小强
      年龄:22 岁
      性别:是男生
      身高:1.80 米
      体重:77.0 公斤
    • 提问
      在演练中,一共有几种数据类型?
      在 Python 中定义变量时需要指定类型吗?

    2.2 变量的类型

    • 在 Python 中定义变量是 不需要指定类型(在其他很多高级语言中都需要)
    • 数据类型可以分为 数字型 和 非数字型
      数字型
      整型 (int)
      浮点型(float)
      布尔型(bool)
      真 True 非 0 数 —— 非零即真
      假 False 0
      非数字型
      字符串
      列表
      元组
      字典
    • 使用 type 函数可以查看一个变量的类型
    type(name)
    

    2.3 不同类型变量之间的计算

    • 数字型变量 之间可以直接计算
      在 Python 中,两个数字型变量是可以直接进行 算数运算的
      如果变量是 bool 型,在计算时
      True 对应的数字是 1
      False 对应的数字是 0
      演练步骤
      1)定义整数 i = 10
      2)定义浮点数 f = 10.5
      3)定义布尔型 b = True
    i = 10
    f = 10.5
    b = True
    
    print(i+f+b)
    21.5
    

    发生了自动类型转换,全部转换成了浮点数。

    • 字符串变量 之间使用 + 拼接字符串
      在 Python 中,字符串之间可以使用 + 拼接生成新的字符串
    first_name = "三"
    last_name = "张"
    print(first_name + last_name)
    
    • 字符串变量 可以和 整数 使用 * 重复拼接相同的字符串
    print("-" * 50)
    

    输出

    '--------------------------------------------------'
    
    • 数字型变量 和 字符串 之间 不能进行其他计算
    first_name = "zhang"
    x = 10
    
    print( x + first_name)
    ---------------------------------------------------------------------------
    TypeError: unsupported operand type(s) for +: 'int' and 'str'
    类型错误:`+` 不支持的操作类型:`int` 和 `str`
    

    解决办法:使用str(x)将x的类型强制转换成字符串类型

    first_name = "zhang"
    x = 10
    print(str(x)+first_name)
    

    2.4 变量的输入
    所谓 输入,就是 用代码 获取 用户通过 键盘 输入的信息
    例如:去银行取钱,在 ATM 上输入密码在 Python 中,如果要获取用户在 键盘 上的输入信息,需要使用到 input 函数

    • 在 Python 中可以使用 input 函数从键盘等待用户的输入
    • 用户输入的 任何内容 Python 都认为是一个 字符串
    • 语法如下
    字符串变量 = input("提示信息:")
    

    2.5 变量输入演练 —— 超市买苹果
    需求

    • 收银员输入 苹果的价格,单位:元/斤
      收银员输入 用户购买苹果的重量,单位:斤
      计算并且 输出 付款金额
    • 代码
    # 1. 输入苹果单价
    price_str = input("请输入苹果价格:")
    
    # 2. 要求苹果重量
    weight_str = input("请输入苹果重量:")
    
    # 3. 计算金额
    # 1> 将苹果单价转换成小数
    price = float(price_str)
    
    # 2> 将苹果重量转换成小数
    weight = float(weight_str)
    
    # 3> 计算付款金额
    money = price * weight
    
    print(money)
    

    2.6 变量的格式化输出
    使用%

    苹果单价 9.00 元/斤,购买了 5.00 斤,需要支付 45.00 元

    • 在 Python 中可以使用 print 函数将信息输出到控制台
    • 如果希望输出文字信息的同时,一起输出 数据,就需要使用到 格式化操作符
      % 被称为 格式化操作符,专门用于处理字符串中的格式
      包含 % 的字符串,被称为 格式化字符串
    • % 和不同的 字符 连用,不同类型的数据 需要使用 不同的格式化字符
    1. %s 字符串
    2. %d 有符号十进制整数,%06d 表示输出的整数显示位数,不足的地方使用 0 补全
    3. %f 浮点数,%.2f 表示小数点后只显示两位
    4. %% 输出 %
    • 语法格式如下:
    print("格式化字符串" % 变量1)
    
    print("格式化字符串" % (变量1, 变量2...))
    

    举个栗子
    需求

    • 定义字符串变量 name,输出 我的名字叫 小明,请多多关照!
    • 定义整数变量 student_no,输出 我的学号是 000001
    • 定义小数 price、weight、money,输出 苹果单价 9.00 元/斤,购买了 5.00 斤,需要支付 45.00 元
    • 定义一个小数 scale,输出 数据比例是 10.00%
    print("我的名字叫 %s,请多多关照!" % name)
    print("我的学号是 %06d" % student_no)
    print("苹果单价 %.02f 元/斤,购买 %.02f 斤,需要支付 %.02f 元" % (price, weight, money))
    print("数据比例是 %.02f%%" % (scale * 100))
    
    1. 变量命名
      标识符

    标识符就是程序员自己命名的 变量名。 名字 需要有 见名知义 的效果,不要随意起名。

    • 标示符可以由 字母、下划线 和 数字 组成
    • 不能以数字开头
    • 不能与关键字重名
      关键字
      关键字 就是在 Python 内部已经使用的标识符
      关键字 具有特殊的功能和含义
      开发者 不允许定义和关键字相同的名字的标示符
    ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue',
     'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 
    'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise',
     'return', 'try', 'while', 'with', 'yield']
    

    二、运算符

    1)算数运算符

    • 是完成基本的算术运算使用的符号,用来处理四则运算
    运算符 描述 实例
    + 10 + 20 = 30
    - 10 - 20 = -10
    * 10 * 20 = 200
    / 10 / 20 = 0.5
    // 取整除 返回除法的整数部分(商) 9 // 2 输出结果 4
    % 取余数 返回除法的余数 9 % 2 = 1
    ** 又称次方、乘方,2 ** 3 = 8
    >>> a=10
    >>> b=5
    >>> print(a+b)
    15
    >>> print(a-b)
    5
    >>> print(a*b)
    50
    >>> print(a/b)
    2.0
    >>> print(a**b)
    100000
    >>> print(a//b)
    2
    >>> print(a%b)
    0
    

    2)比较(关系)运算符

    运算符 描述
    == 检查两个操作数的值是否 相等,如果是,则条件成立,返回 True
    != 检查两个操作数的值是否 不相等,如果是,则条件成立,返回 True
    > 检查左操作数的值是否 大于 右操作数的值,如果是,则条件成立,返回 True
    < 检查左操作数的值是否 小于 右操作数的值,如果是,则条件成立,返回 True
    >= 检查左操作数的值是否 大于或等于 右操作数的值,如果是,则条件成立,返回 True
    <= 检查左操作数的值是否 小于或等于 右操作数的值,如果是,则条件成立,返回 True
    >>> a=10
    >>> b=20
    >>> a==b
    False
    >>> a!=b
    True
    >>> a>b
    False
    >>> a<b
    True
    >>> a>=b
    False
    >>> a<=b
    True
    

    3)逻辑运算符

    运算符 逻辑表达式 描述
    and x and y 只有 x 和 y 的值都为 True,才会返回 True否则只要 x 或者 y 有一个值为 False,就返回 False
    or x or y 只要 x 或者 y 有一个值为 True,就返回 True;只有 x 和 y 的值都为 False,才会返回 False
    not not x 如果 x 为 True,返回 False;如果 x 为 False,返回 True
    >>> a=True
    >>> b=False
    >>> a and b
    False
    >>> a or b
    True
    >>> not a
    False
    >>> not -1
    False
    >>> not 0
    True
    

    4)赋值运算符

    • 在 Python 中,使用 = 可以给变量赋值
    • 在算术运算时,为了简化代码的编写,Python 还提供了一系列的 与 算术运算符 对应的 赋值运算符
    • 注意:赋值运算符中间不能使用空格
    运算符 描述 实例
    = 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
    += 加法赋值运算符 c += a 等效于 c = c + a
    -= 减法赋值运算符 c -= a 等效于 c = c - a
    *= 乘法赋值运算符 c = a 等效于 c = c a
    /= 除法赋值运算符 c /= a 等效于 c = c / a
    //= 取整除赋值运算符 c //= a 等效于 c = c // a
    %= 取 模 (余数)赋值运算符 c %= a 等效于 c = c % a
    **= 幂赋值运算符 c = a 等效于 c = c a
    >>> a=10
    >>> b=20
    >>> c=0
    >>> c=a+b
    >>> print(c)
    30
    >>> c+=10
    >>> print(c)
    40
    >>> c-=a
    >>> print(c)
    30
    >>> c*=a
    >>> print(c)
    300
    >>> c/=a
    >>> print(c)
    30.0
    >>> c%=a
    >>> print(c)
    0.0
    >>> c=a**5
    >>> print(c)
    100000
    >>> c//=b
    >>> print(c)
    5000
    >>> print(b)
    20
    

    5)运算符的优先级

    • 以下表格的算数优先级由高到最低顺序排列
    运算符 描述
    ** 幂 (最高优先级)
    * / % // 乘、除、取余数、取整除
    + - 加法、减法
    <= < > >= 比较运算符
    == != 等于运算符
    = %= /= //= -= += = *= 赋值运算符
    not or and 逻辑运算符

    三、分支与循环

    条件语句

    Python 条件语句跟其他语言基本一致的,都是通过一条或多条语句的执行结果( True 或者 False )来决定执行的代码块。
    Python 程序语言指定任何非 0 和非空(None)值为 True,0 或者 None为 False。

    • if-语句的基本形式
      Python 中,if 语句的基本形式如下:
    if 判断条件:
        执行语句……
    else:
        执行语句……
    

    Python 语言有着严格的缩进要求,因此这里也需要注意缩进,也不要少写了冒号 : 。

    if 语句的判断条件可以用>(大于)、<(小于)、==(等于)、>=(大于等于)、<=(小于等于)来表示其关系。

    例如:

    results=59
    
    if results>=60:
        print ('及格')
    else :
        print ('不及格')
    

    输出结果:

    不及格
    

    上面也说道,非零数值、非空字符串、非空 list 等,判断为True,否则为False。因此也可以这样写:

    num = 6
    if num :
        print('Hello Python')
    
    • if-语句多个判断条件的形式
      有些时候,我们的判断语句不可能只有两个,有些时候需要多个,比如上面的例子中大于 60 的为及格,那我们还要判断大于 90 的为优秀,在 80 到 90 之间的良好呢?

    这时候需要用到 if 语句多个判断条件,

    用伪代码来表示:

    if 判断条件1:
        执行语句1……
    elif 判断条件2:
        执行语句2……
    elif 判断条件3:
        执行语句3……
    else:
        执行语句4……
    

    实例:

    results = 89
    
    if results > 90:
        print('优秀')
    elif results > 80:
        print('良好')
    elif results > 60:
        print ('及格')
    else :
        print ('不及格')
    

    输出结果:

    良好
    
    • if-语句多个条件同时判断
      Python 不像 Java 有 switch 语句,所以多个条件判断,只能用 elif 来实现,但是有时候需要多个条件需同时判断时,可以使用 or (或),表示两个条件有一个成立时判断条件成功;使用 and (与)时,表示只有两个条件同时成立的情况下,判断条件才成功。
    java = 86
    python = 68
    
    if java > 80 and  python > 80:
        print('优秀')
    else :
        print('不优秀')
    

    输出结果:

    不优秀
    

    注意:if 有多个条件时可使用括号来区分判断的先后顺序,括号中的判断优先执行,此外 and 和 or 的优先级低于 >(大于)、<(小于)等判断符号,即大于和小于在没有括号的情况下会比与或要优先判断。

    java = 86
    python = 68
    
    if (80 <= java < 90) or (80 <= python < 90):
        print('良好')
    

    输出结果:

    良好
    

    课上练习1

    我想买车,买什么车决定于我在银行有多少存款
    如果我的存款超过500万,我就买路虎
    否则,如果我的存款超过100万,我就买宝马
    否则, 如果我的存款超过50万,我就买迈腾
    否则, 如果我的存款超过10万,我就买福特
    否则, 如果我的存款10万以下 ,我买比亚迪
    

    课上练习2

    输入小明的考试成绩,显示所获奖励
    成绩==100分,爸爸给他买辆车
    成绩>=90分,妈妈给他买MP4
    90分>成绩>=60分,妈妈给他买本参考书
    成绩<60分,什么都不买
    
    循环语句

    一般编程语言都有循环语句,循环语句允许我们执行一个语句或语句组多次。
    循环语句的一般形式如下:



    Python 提供了 for 循环和 while 循环,当然还有一些控制循环的语句:

    循环控制语句 描述
    break 在语句块执行过程中终止循环,并且跳出整个循环
    continue 在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环
    pass pass 是空语句,是为了保持程序结构的完整性
    • while-循环语句
    count = 1
    sum = 0
    while count <= 100:
        sum = sum + count
        count = count + 1
    print(sum)
    

    输出结果

    5050
    

    当然 while 语句时还有另外两个重要的命令 continue,break 来跳过循环,continue 用于跳过该次循环,break 则是用于跳出本层循环
    比如,上面的例子是计算 1 到 100 所有整数的和,当我们需要判断 sum 大于 1000 的时候,不在相加时,可以用到 break ,退出整个循环

    count = 1
    sum = 0
    while  count <= 100:
        sum = sum + count
        if  sum > 1000:  #当 sum 大于 1000 的时候退出循环
            break
        count = count + 1
    print(sum)
    

    输出的结果:

    1035
    

    有时候,我们只想统计 1 到 100 之间的奇数和,那么也就是说当 count 是偶数,也就是双数的时候,我们需要跳出当次的循环,不想加,这时候可以用到 continue

    count = 1
    sum = 0
    while  count <= 100:
        if count % 2 == 0:  # 双数时跳过输出
            count = count + 1
            continue
        sum = sum + count
        count = count + 1
    print(sum)
    

    输出的语句:

    2500
    

    在 Python 的 while 循环中,还可以使用 else 语句,while … else 在循环条件为 false 时执行 else 语句块

    比如:

    count = 0
    while count < 5:
       print (count)
       count = count + 1
    else:
       print (count)
    

    输出的结果:

    0
    1
    2
    3
    4
    5
    
    • for-循环语句
      for循环可以遍历任何序列的项目,如一个字符串
      它的流程图基本如下:


    基本的语法格式:

    for iterating_var in sequence:
       statements(s)
    

    实例:

    for letter in 'www.neuedu.com':
        print(letter)
    

    输出的结果如下:

    w
    w
    w
    .
    n
    e
    u
    e
    d
    u
    .
    c
    o
    m
    

    range()函数

    Python函数range()让你能够轻松地生成一系列的数字。例如,可以像下面这样使用函数range()来打印一系列的数字:

        for value in range(1,5):
            print(value)
    

    上述代码好像应该打印数字1~5,但实际上它不会打印数字5:

        1
        2
        3
        4
    

    在这个示例中,range()只是打印数字1~4,这是你在编程语言中经常看到的差一行为的结果。函数range()让Python从你指定的第一个值开始数,并在到达你指定的第二个值后停止,因此输出不包含第二个值(这里为5)。

    要打印数字1~5,需要使用range(1,6):

        for value in range(1,6):
            print(value)
    

    这样,输出将从1开始,到5结束:

        1
        2
        3
        4
        5
    
    • 嵌套循环
      Python 语言允许在一个循环体里面嵌入另一个循环。上面的实例也是使用了嵌套循环的。

    具体的语法如下:

    for 循环嵌套语法

    for iterating_var in sequence:
       for iterating_var in sequence:
          statements(s)
       statements(s)
    

    while 循环嵌套语法

    while expression:
       while expression:
          statement(s)
       statement(s)
    

    除此之外,你也可以在循环体内嵌入其他的循环体,如在 while 循环中可以嵌入 for 循环, 反之,你可以在 for 循环中嵌入 while 循环

    有 while … else 语句,当然也有 for … else 语句啦,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样。

    for num in range(10,20):  # 迭代 10 到 20 之间的数字
       for i in range(2,num): # 根据因子迭代
          if num%i == 0:      # 确定第一个因子
             j=num/i          # 计算第二个因子
             print ('%d 是一个合数' % num)
             break            # 跳出当前循环
       else:                  # 循环的 else 部分
          print ('%d 是一个质数' % num)
    

    输出的结果:

    10 是一个合数
    11 是一个质数
    12 是一个合数
    13 是一个质数
    14 是一个合数
    15 是一个合数
    16 是一个合数
    17 是一个质数
    18 是一个合数
    19 是一个质数
    

    课上案例

    • 打印九九乘法表
    for i in range(1, 10):
            for j in range(1, i+1):
                print('{}x{}={}\t'.format(i, j, i*j), end='')
            print()
    
    1x1=1   
    2x1=2   2x2=4   
    3x1=3   3x2=6   3x3=9   
    4x1=4   4x2=8   4x3=12  4x4=16  
    5x1=5   5x2=10  5x3=15  5x4=20  5x5=25  
    6x1=6   6x2=12  6x3=18  6x4=24  6x5=30  6x6=36  
    7x1=7   7x2=14  7x3=21  7x4=28  7x5=35  7x6=42  7x7=49  
    8x1=8   8x2=16  8x3=24  8x4=32  8x5=40  8x6=48  8x7=56  8x8=64  
    9x1=9   9x2=18  9x3=27  9x4=36  9x5=45  9x6=54  9x7=63  9x8=72  9x9=81
    
    • 遍历list、set、dict等集合
    • l=[1,2,3,4,5,6,7]打印前五个元素

    当我们同时需要索引和元素时,还有一种更简洁的方式,那就是通过 Python 内置的函数 enumerate()。用它来遍历集合,不仅返回每个元素,并且还返回其对应的索引,这样一来,上面的例子就可以写成:

    l = [1, 2, 3, 4, 5, 6, 7]
    for index, item in enumerate(l):
        if index < 5:
            print(item)  
                  
    1
    2
    3
    4
    5
    

    条件与循环的复用
    前面讲了条件与循环的一些基本操作,接下来,我们重点来看它们的进阶操作,让程序变得更简洁高效。
    在阅读代码的时候,你应该常常会发现,有很多将条件与循环并做一行的操作,例如:

    expression1 if condition else expression2 for item in iterable
    
    

    将这个表达式分解开来,其实就等同于下面这样的嵌套结构:

    for item in iterable:
        if condition:
            expression1
        else:
            expression2
    
    

    而如果没有 else 语句,则需要写成:

    expression for item in iterable if condition
    
    

    举个例子,比如我们要绘制 y = 2*|x| + 5 的函数图像,给定集合 x 的数据点,需要计算出 y 的数据集合,那么只用一行代码,就可以很轻松地解决问题了:

    y = [value * 2 + 5 if value > 0 else -value * 2 + 5 for value in x]
    
    

    当然,这样的复用并不仅仅局限于一个循环。比如,给定两个列表 x、y,要求返回 x、y 中所有元素对组成的元祖,相等情况除外。那么,你也可以很容易表示出来:

    [(xx, yy) for xx in x for yy in y if xx != yy]
    
    

    这样的写法等价于:

    l = []
    for xx in x:
        for yy in y:
            if xx != yy:
                l.append((xx, yy))
    
    
    随机数的处理

    在 Python 中,要使用随机数,首先需要导入 随机数 的 模块 —— “工具包”

    import random
    

    导入模块后,可以直接在 模块名称 后面敲一个 . ,会提示该模块中包含的所有函数

    random.randint(a, b) ,返回 [a, b] 之间的整数,包含 a 和 b

    例如:

    random.randint(12, 20)  # 生成的随机数n: 12 <= n <= 20   
    random.randint(20, 20)  # 结果永远是 20   
    random.randint(20, 10)  # 该语句是错误的,下限必须小于上限
    

    综合练习---猜数字

    计算机要求用户输入数值范围的最小值和最大值。计算机随后“思考”出在这个范围之内的一个随机数,并且重复地要求用户猜测这个数,直到用户猜对了。在用户每次进行猜测之后,计算机都会给出一个提示,并且会在这个过程的最后显示出总的猜测次数。这个程序包含了几种类型的我们学过的 Python 语句,例如,输入语句、输出语句、赋值语句、循环和条件语句。

    一个可能的游戏过程如下:

    Enter the smaller number: 1
    Enter the larger number: 20
    Enter your guess: 5
    Too small
    Enter your guess: 9
    Too small
    Enter your guess: 15
    Too small
    Enter your guess: 17
    Too large
    Enter your guess: 16
    You've got it in 5 tries!
    
    import random
    
    smaller = int(input("Enter the smaller number: "))
    larger = int(input("Enter the larger number: "))
    myNumber = random.randint(smaller, larger)
    count = 0
    while True:
        count += 1
        userNumber = int(input("Enter your guess: "))
        if userNumber < myNumber:
            print("Too small")
        elif userNumber > myNumber:
            print("Too large")
        else:
            print("You've got it in", count, "tries!")
            break
    

    四、模块与包

    模块的概念

    一个.py文件就称为一个模块

    导入模块中类或函数的方式:

    方式一:import 模块名
    使用时:模块名.函数名()

    import module1
    module1.output()
    

    方式二:from 模块名 import 函数名
    使用时:函数名()

    from module1 import output
    output()
    

    方式三:from 模块名-import *
    使用时:函数名()

    from module1 import *
    output()
    

    方式四:from 模块名 import 函数名 as tt(自定义)
    注意原来的函数名将失效
    使用时:tt()

    from module1 import output as tt
    tt()
    

    可以在模块当中定义一个变量all,指定导出的函数子集:

    使用all的影响: 后面的[]里面写什么函数名,使用from 模块名 import 方式导入时导入什么 all如果没有这个变量将全部导入(all仅限 于from 模块名 import 这种导入方式)

    加all示例:

    __all__=['output']
    def output():
        print('hello neuedu')
    
    def output2():
            print('hello output2')
    

    以下代码报错

    from module1 import *
    output2()
    
    包的概念

    概念:包就是一个文件夹,里面包含了若干py文件以及一个_init_.py文件。

    导入包中函数,以及模块的方式:

    方式一:from 包名 import 模块名
    使用时:模块名.函数名()

    from neuedu import module3
    module3.output()
    

    方式二:from 包名模块名 import 函数名
    使用时:函数名()

    from neuedu.module3 import output
    output()
    

    方式三:import 包名模块名
    使用的时候 包名.模块名.函数名()

    import neuedu.module3
    neuedu.module3.output()
    

    方式四:from 包名 import *
    前提是:将 init.py 文件中写入all变量(写入方式同模块导入的写入方式) 。 变量当中写入哪个模块则导入哪个模块,不写则什么都不导入 使用时:模块名.函数名() _init_.py

    __all__ = ['module3']
    
    from neuedu import *
    module3.output()
    

    方式五:import 包名

    前提是:在包里面的init.py 文件里写入 from . import 模块名 init.py里面导入哪个模块 通过本方式就能使用哪个模块

    使用时:包名.模块名.函数名() _init_.py

    from . import module3
    
    import neuedu
    neuedu.module3.output()
    

    相关文章

      网友评论

        本文标题:Python基本语法

        本文链接:https://www.haomeiwen.com/subject/bagwtctx.html