(1)Python基础

末鹿安然 提交于 2019-12-04 11:06:42
目录

前言1、编译型语言和解释型语言对比:2、程序执行原理3、Python 特点:是完全面向对象的语言优点:简单、易学;免费、开源,面向对象,丰富的库,可扩展性。。。面向对象的思维方式:4、Python 2.x3.x 版本简介:一、认识1、执行 Python 程序的三种方式:解释器,交互式,集成开发环境2、认识错误(BUG)单词列表3、(1)新建项目,命名(2)多文件项目的演练4、注释(1)单行注释(行注释):(2) 多行注释(块注释):"""5、关于代码规范二、4种运算符,变量,input输入和输出1、运算符(2)逻辑运算:与 and或 or非 not 三种。(3)比较(关系)运算符:(4)赋值运算符:(1)算数运算符* 运算符还可以用于字符串2、运算符的优先级3、变量,(1)标识符和关键字标识符:关键字:(2)变量的命名规则:字母下划线数字 组成,不能以数字开头;(2)变量定义:= ,变量名 = 值解释变量含义:(3)常量:(4)变量的类型:(a)数据类型可以分为 数字型非数字型:(b)不同类型变量之间的计算:true是1,false是0,字符串用+连接,4、变量的输入和输出:使用input函数input 函数实现键盘输入:字符串变量 = input("提示信息:")(1)变量的输入及类型转换:price = float(input("请输入价格:"))(2)变量的格式化输出,格式:print("格式化字符串,即命名%s" % (变量1, 变量2...))(3)实践1:格式化输出演练:%s,%d,%f,%%不知道???举例2:格式化输出三、流程控制:if,判断语句 又被称为 “分支语句”语法格式如下:if 的嵌套随机数的处理:random.randint(12, 20)练习1:练习2:判断年龄练习3:elif 演练 —— 女友的节日练习4:if 的嵌套 演练 —— 火车站安检练习5、综合应用 —— 石头剪刀布四、while 循环while 语句基本语法循环嵌套break 和 continue字符串中的转义字符练习1、九九乘法表练习2、计算 0 ~ 100 之间 所有 偶数 的累计求和结果

前言

1、编译型语言和解释型语言对比:

  • 编译型语言-速度快:程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器。

    特点:统一编译执行;执行速度快,跨平台性差些。如 C、C++,

  • 解释型语言-跨平台性好:解释型语言编写的程序不进行预先编译,以文本方式存储程序代码,会将代码一句一句直接运行。在发布程序时,看起来省了道编译工序,但是在运行程序的时候,必须先解释再运行。

    特点:一行一行翻译并执行;跨平台能力强,如python,

2、程序执行原理

内存条通常只有 4G / 8G / 16G / 32G

  1. 程序 运行之前,程序是 保存在硬盘 中的

  2. 当要运行一个程序时

    • 操作系统会首先让 CPU 把Python程序复制到 内存

    • Python 解释器 根据语法规则,从上向下 让 CPU 翻译 Python 程序中的代码

    • CPU 执行 内存 中的 程序代码即01代码

程序要执行,首先要被加载到内存

 

3、Python 特点:是完全面向对象的语言

优点:简单、易学;免费、开源,面向对象,丰富的库,可扩展性。。。

  • 函数模块数字字符串都是对象,在 Python 中一切皆对象

  • 完全支持继承、重载、多重继承

  • 支持重载运算符,也支持泛型设计

  • Python 拥有一个强大的标准库,Python 语言的核心只包含 数字字符串列表字典文件 等常见类型和函数,而由 Python 标准库提供了 系统管理网络通信文本处理数据库接口图形系统XML 处理 等额外的功能

  • Python 社区提供了大量的第三方模块,使用方式与标准库类似。它们的功能覆盖 科学计算人工智能机器学习Web 开发数据库接口图形系统 多个领域

面向对象的思维方式:

  • 面向对象 是一种 思维方式,也是一门 程序设计技术

  • 要解决一个问题前,首先考虑 由谁 来做,怎么做事情是 的职责,最后把事情做好就行!

    • 对象 就是

  • 要解决复杂的问题,就可以找多个不同的对象各司其职,共同实现,最终完成需求

4、Python 2.x3.x 版本简介:

​ 提示:如果开发时,无法立即使用 Python 3.0(还有极少的第三方库不支持 3.0 的语法),建议

  • 先使用 Python 3.0 版本进行开发

  • 然后使用 Python 2.6Python 2.7 来执行,并且做一些兼容性的处理

 

一、认识

1、执行 Python 程序的三种方式:解释器,交互式,集成开发环境

  • 解释器 —— python / python3

  • 交互式 —— ipython,shell

    1.直接在终端中运行解释器,而不输入要执行的文件名

    2.在 Python 的 Shell 中直接输入 Python 的代码,会立即看到程序执行结果

    3.退出 官方的解释器: exit()或者ctrl + d

    4.IPython:在命令行输入 ipythonipython3

​ print("hello")

  • 集成开发环境 —— PyCharm

    执行(SHIFT + F10) / 调试(SHIFT + F9) ,单步执行按钮(F8):

    具体方法:

    1. 先点击小虫子按钮,点击代码添加断点,有红色圆点标记

    2. 打开console选项,看到当前代码”蓝色高亮“

    3. 点击右侧的向下箭头,或者F8执行,

2、认识错误(BUG)

  1. 手误单词错误 NameError: 注意,错误时代码单词的颜色,执行时出现nameError;

  2. 一行代码不要做多件事情,将多条 print 写在一行;

    SyntaxError: invalid syntax,注意:执行时,向上箭头;

  3. 缩进错误:注意,空格键,tab;每行代码顶格写,不要增加空格

  4. python 2.x 默认不支持中文

单词列表

* error 错误* name 名字* defined 已经定义* syntax 语法* invalid 无效* Indentation 索引* unexpected 意外的,不期望的* character 字符* line 行* encoding 编码* declared 声明* details 细节,详细信息* ASCII 一种字符编码

3、

(1)新建项目,命名

  • 新建项目:通过 欢迎界面 或者菜单 File / New Project 可以

  • 新建文件:在项目名称右键new python file,

命名规则:如 项目名,01_Python 基础、02分支、03循环

​ 文件名,hm_01_hello.py

注意:

  1. 命名文件名时建议只使用 小写字母数字下划线

  2. 文件名不能以数字开始

???实践:添加:指定项目位置,文件名称,python解释器版本

(2)多文件项目的演练

  • PyCharm 中,要想让哪一个 Python 程序能够执行,必须首先通过 鼠标右键的方式执行 一下

  • 对于初学者而言,在一个项目中设置多个程序可以执行,是非常方便的,可以方便对不同知识点的练习和测试;

    注意:在运行按钮左侧可以看到文件名称,执行的是选择的文件。

  • ???对于商业项目而言,通常在一个项目中,只有一个 可以直接执行的 Python 源程序

4、注释

(1)单行注释(行注释):

  • # 开头,# 后面建议先添加一个空格;然后再编写相应的说明文字

  • 在代码的末尾增加的单行注释:注意# 注释和代码之间至少要有 两个空格;

  注意:如果全部注释都没有加空格,点击小灯泡-选择“reformat file”;

(2) 多行注释(块注释):"""

一对 连续的 三个 引号(单引号和双引号都可以);

5、关于代码规范

任何语言的程序员,编写出符合规范的代码,是开始程序生涯的第一步

二、4种运算符,变量,input输入和输出

1、运算符

(2)逻辑运算与 and或 or非 not 三种。

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

(3)比较(关系)运算符

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

(4)赋值运算符

  • 注意:赋值运算符中间不能使用空格

运算符描述实例
= 简单的赋值运算符 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

(1)算数运算符

* 运算符还可以用于字符串

运算符描述实例
+ 10 + 20 = 30
- 10 - 20 = -10
* 10 * 20 = 200
/ 10 / 20 = 0.5
// 取整除 返回除法的整数部分(商) 9 // 2 输出结果 4
% 取余数 返回除法的余数 9 % 2 = 1
** 又称次方、乘方,2 ** 3 = 8
  • 在 Python 中 * 运算符还可以用于字符串,计算结果就是字符串重复指定次数的结果。

2、运算符的优先级

  • 先乘除后加减

  • 同级运算符是 从左至右 计算

  • 可以使用 () 调整计算的优先级

  • 以下表格的 算数优先级 由高到最低顺序排列

运算符描述
** 幂 (最高优先级)
* / % // 乘、除、取余数、取整除
+ - 加法、减法
<= < > >= 比较运算符
== != 等于运算符
= %= /= //= -= += *= **= 赋值运算符
not or and 逻辑运算符

3、变量

(1)标识符和关键字

标识符:

标示符就是程序员定义的 变量名函数名

    • 标示符可以由 字母下划线数字 组成,

    • 不能以数字开头,不能与关键字重名。是区分大小写,

注意:不能有#,-,感叹号!,(),&,点等

关键字:

  • 关键字 就是在 Python 内部已经使用的标识符

  • 关键字 具有特殊的功能和含义

  • 开发者 不允许定义和关键字相同的名字的标示符

通过以下命令可以查看 Python 中的关键字:

In [1]: import keywordIn [2]: print(keyword.kwlist)

提示:关键字的学习及使用,会在后面的课程中不断介绍

  • import 关键字 可以导入一个 “工具包”

  • Python 中不同的工具包,提供有不同的工具

(2)变量的命名规则字母下划线数字 组成,不能以数字开头;

Python 中,如果 变量名 需要由 二个多个单词 可以按照以下方式命名:1、每个单词都使用小写字母;2、使用 _下划线 连接。如first_name,

​ 小驼峰式命名法:firstName

​ 大驼峰式命名法:FirstName

(2)变量定义= ,变量名 = 值

变量名 = 值,= 的左右应该各保留一个空格。

1、在 Python 中,每个变量 在使用前都必须赋值,变量 赋值以后 该变量 才会被创建

2、变量定义之后,后续就可以直接使用了

3、注意:

  • money = money - 5 是在定义新的变量还是在使用变量?

    • 直接使用之前已经定义的变量

    • 变量名 只有在 第一次出现 才是 定义变量

    • 变量名 再次出现,不是定义变量,而是直接使用之前定义过的变量

  • 在程序开发中,可以修改之前定义变量中保存的值吗?

    • 可以

    • 变量中存储的值,就是可以

解释变量含义:

当我们写:name="python"时,Python解释器干了两件事情:

  • 1)在内存中创建了一个'python'的字符串;

  • 2)在内存中创建了一个名为name的变量,并把它指向'python'。

​ 这时候把变量name赋值给另一个变量name1,这个操作实际上是把变量name1指向变量name所指向的数据,与变量name并无任何关系;若name值变化,name1的值依然无变化;name的值发生变化,相当于重新开辟了一块内存空间;而name1依然指向原有内存空间。

(3)常量

常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量:如 TOTAL;

(4)变量的类型

在内存中创建一个变量,会包括:

  1. 变量的名称

  2. 变量保存的数据

  3. 变量存储数据的类型

  4. 变量的地址(标示)

PyCharm,利用 单步调试 确认变量中保存数据的类型。

Python 中定义变量是 不需要指定类型(在其他很多高级语言中都需要)。

(a)数据类型可以分为 数字型非数字型:

  • 数字型

    • 整型 (int)

    • 浮点型(float

    • 布尔型(bool

      • True 非 0 数 —— 非零即真,对应的数字是 1

      • False 0,对应的数字是 0

    • 复数型 (complex)

      • 主要用于科学计算,例如:平面场问题、波动问题、电感电容等问题

  • 非数字型

    • 字符串,str

    • 列表

    • 元组

    • 字典

    提示:在 Python 2.x 中,整数 根据保存数值的长度还分为:

    • int(整数)

    • long(长整数)

      在 Python 3.x只有:Int

    使用type 函数可以查看一个变量的类型,如type(name)

(b)不同类型变量之间的计算:true是1,false是0,字符串用+连接,

1、数字型变量 之间可以直接计算,​###拼接字符串的两种方式:2、字符串变量 之间使用 + 拼接字符串;3、字符串变量 和 整数 使用 * 重复拼接相同的字符串,如"-" * 50​4、数字型变量 和 字符串 之间 不能进行其他计算。
first_name = "三"last_name = "张"​print(first_name + last_name)print("first_name" + "last_name")print("first_name + last_name")​结果如下:三张first_namelast_namefirst_name + last_name

4、变量的输入和输出:使用函数

所谓输入,就是 用代码 获取 用户通过 键盘 输入的信息。使用函数

input 函数实现键盘输入:字符串变量 = input("提示信息:")

字符串变量 = input("提示信息:") 

(1)变量的输入及类型转换:price = float(input("请输入价格:"))

(2)变量的格式化输出,格式:print("格式化字符串,即命名%s" % (变量1, 变量2...))

  • 如果希望输出文字信息的同时,一起输出数据,就需要使用到格式化操作符。

  • %被称为格式化操作符,专门用于处理字符串中的格式;

    • 包含 % 的字符串,被称为 格式化字符串

    • % 和不同的 字符 连用,不同类型的数据 需要使用 不同的格式化字符

格式化字符含义
%s 字符串
%d 有符号十进制整数,%06d 表示输出的整数显示位数,不足的地方使用 0 补全
%f 浮点数,%.2f 表示小数点后只显示两位;%.3f,
%% 输出 %

(3)实践1:格式化输出演练:%s,%d,%f,%%

1、定义一个小数 scale,输出 数据比例是 10.00%???print("数据比例是 %.2f%%" % (scale * 100))2、定义整数变量 student_no,输出 我的学号是 000001print("我的学号是 %06d" % student_no)​3、print("苹果单价 %.02f 元/斤,购买 %.02f 斤,需要支付 %.02f 元" % (price, weight, money))

不知道???举例2:格式化输出

name = input("what is your name:")age = int(input("tell me you age:"))job = input("job:")salary = input("salary:") info = '''    ---- info of %s ------    name:%s    age:%d    job:%s    salary:%s'''%(name,name,age,job,salary)print(info)  info2 = '''    ---- info of {_name} ------    name:{_name}    age:{_age}    job:{_job}    salary:{_salary}    '''.format(_name=name,_age=age,_job=job,_salary=salary)print(info2)  info3 = '''    ---- info of {0} ------     name:{0}     age:{1}     job:{2}     salary:{3}     '''.format(name,age,job,salary)print(info3)

三、流程控制:if,

注意:1、Tab 和空格不要混用!代码的缩进为一个 `tab` 键,或者 **4** 个空格;注意:tab键可以增加缩进,   2、if,else,elif语句以及缩进部分是一个 完整的代码块;3、elif 和 else 都必须和 if 联合使用,而不能单独使用​4、缩进块后边顶格写的代码;光标放在if代码块时,会有提示,点击该提示会直接跳到该行代码;缩进方法:选中内容shift+tab或者tabif/else下方注意缩进

语法格式如下:

if 要判断的条件:    条件成立时,要做的事情    ……else:    条件不成立时,要做的事情    ……
if 条件1:    条件1满足执行的代码    ……elif 条件2:    条件2满足时,执行的代码    ……elif 条件3:    条件3满足时,执行的代码    ……else:    以上条件都不满足时,执行的代码    ……
if 条件1 and 条件2:    条件1满足 并且 条件2满足 执行的代码    ……

if 的嵌套

if 条件 1:    条件 1 满足执行的代码    ……        if 条件 1 基础上的条件 2:        条件 2 满足时,执行的代码        ……           # 条件 2 不满足的处理    else:        条件 2 不满足时,执行的代码        # 条件 1 不满足的处理else:    条件1 不满足时,执行的代码    ……

随机数的处理:random.randint(12, 20)

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

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

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

练习1:

# 练习3: 定义一个布尔型变量 `is_employee`,编写代码判断是否是本公司员工is_employee = True​# 如果不是提示不允许入内if not is_employee:    print("非公勿内")    if has_ticket:    print("有车票,可以开始安检...")

练习2:判断年龄

需求

  1. 输入用户年龄

  2. 判断是否满 18 岁 (>=

  3. 如果满 18 岁,允许进网吧嗨皮

  4. 如果未满 18 岁,提示回家写作业

# 1. 输入用户年龄age = int(input("今年多大了?"))​# 2. 判断是否满 18 岁# if 语句以及缩进部分的代码是一个完整的语法块if age >= 18:    print("可以进网吧嗨皮……")else:    print("你还没长大,应该回家写作业!")​# 3. 思考!- 无论条件是否满足都会执行print("这句代码什么时候执行?")

练习3:elif 演练 —— 女友的节日

需求

  1. 定义 holiday_name 字符串变量记录节日名称

  2. 如果是 情人节 应该 买玫瑰看电影

  3. 如果是 平安夜 应该 买苹果吃大餐

  4. 如果是 生日 应该 买蛋糕

  5. 其他的日子每天都是节日啊……

holiday_name = "平安夜"​if holiday_name == "情人节":    print("买玫瑰")    print("看电影")elif holiday_name == "平安夜":    print("买苹果")    print("吃大餐")elif holiday_name == "生日":    print("买蛋糕")else:    print("每天都是节日啊……")​

练习4:if 的嵌套 演练 —— 火车站安检

需求

  1. 定义布尔型变量 has_ticket 表示是否有车票

  2. 定义整型变量 knife_length 表示刀的长度,单位:厘米

  3. 首先检查是否有车票,如果有,才允许进行 安检

  4. 安检时,需要检查刀的长度,判断是否超过 20 厘米

    • 如果超过 20 厘米,提示刀的长度,不允许上车

    • 如果不超过 20 厘米,安检通过

  5. 如果没有车票,不允许进门

# 定义布尔型变量 has_ticket 表示是否有车票has_ticket = True​# 定义整数型变量 knife_length 表示刀的长度,单位:厘米knife_length = 20​# 首先检查是否有车票,如果有,才允许进行 安检if has_ticket:    print("有车票,可以开始安检...")​    # 安检时,需要检查刀的长度,判断是否超过 20 厘米    # 如果超过 20 厘米,提示刀的长度,不允许上车    if knife_length >= 20:        print("不允许携带 %d 厘米长的刀上车" % knife_length)    # 如果不超过 20 厘米,安检通过    else:        print("安检通过,祝您旅途愉快……")​# 如果没有车票,不允许进门else:    print("大哥,您要先买票啊")​

练习5、综合应用 —— 石头剪刀布

需求

  1. 从控制台输入要出的拳 —— 石头(1)/剪刀(2)/布(3)

  2. 电脑 随机 出拳 —— 先假定电脑只会出石头,完成整体代码功能

  3. 比较胜负

# 从控制台输入要出的拳 —— 石头(1)/剪刀(2)/布(3)player = int(input("请出拳 石头(1)/剪刀(2)/布(3):"))​# 电脑 随机 出拳 - 假定电脑永远出石头computer = 1​# 比较胜负# 如果条件判断的内容太长,可以在最外侧的条件增加一对大括号# 再在每一个条件之间,使用回车,PyCharm 可以自动增加 8 个空格if ((player == 1 and computer == 2) or        (player == 2 and computer == 3) or        (player == 3 and computer == 1)):​    print("噢耶!!!电脑弱爆了!!!")elif player == computer:    print("心有灵犀,再来一盘!")else:    print("不行,我要和你决战到天亮!")​

四、while 循环

注意:1、while 语句以及缩进部分是一个 完整的代码块2、循环结束后,之前定义的计数器条件的数值是依旧存在的3、死循环:由于程序员的原因,忘记 在循环内部 修改循环的判断条件,导致循环持续执行,程序无法终止!4、大家在编写程序时,应该尽量养成习惯:除非需求的特殊要求,否则 循环 的计数都从 0 开始

while 语句基本语法

初始条件设置 —— 通常是重复执行的 计数器result = 0i = 0​# while 条件(判断 计数器 是否达到 目标次数):while i <= 5:    # 判断偶数    if i % 2 == 0:        条件满足时,做的事情1     print(i)    条件满足时,做的事情2    ...(省略)...         result += i            处理条件(计数器 + 1)     i += 1        print("循环结束后的 = %d" % result)        

循环嵌套

while 条件 1:    条件满足时,做的事情1    条件满足时,做的事情2    条件满足时,做的事情3    ...(省略)...        while 条件 2:        条件满足时,做的事情1        条件满足时,做的事情2        条件满足时,做的事情3        ...(省略)...            处理条件 2        处理条件 1
注意:# 向控制台输出内容结束之后,不会换行print("*", end="")​# 单纯的换行print("")  

break 和 continue

#举例: 1、break退出整个循环while True:    print(1)    break    print(2) 上面的代码会先输出1,然后遇到break,就退出当前循环,所以不再打印出2了。​# 2、continue退出当前循环while True:    print(1)    continue    print(2) 不停的输出1,永远不会输出2。 
  • break 某一条件满足时,退出循环,不再执行后续重复的代码;

  • continue 某一条件满足时,不执行后续重复的代码;

  break:即就是直接跳出循环。一旦发现 条件满足,整个循环结束,  continue:即就是跳到循环体条件上。只是排除某一个特定条件,    注意:  1、break 和 continue 只针对 当前所在循环 有效。  2、使用 continue 时,条件处理部分的代码,需要特别注意,不小心会出现 死循环

字符串中的转义字符

  • \t 在控制台输出一个 制表符,协助在输出文本时 垂直方向 保持对齐

  • \n 在控制台输出一个 换行符

制表符 的功能是在不使用表格的情况下在 垂直方向 按列对齐文本

转义字符描述
\\ 反斜杠符号
\' 单引号
\" 双引号
\n 换行
\t 横向制表符
\r 回车

练习1、九九乘法表

1> row 外循环-即每一行:完成 5 行内容的简单输出。2> col 内循环-即每行的每一列:分析每行内部的 * 应该如何处理?  - 每行显示的星星和当前所在的行数是一致的  - 嵌套一个小的循环,专门处理每一行中 列 的星星显示​# 定义起始行row = 1​while row <= 9:    # 在循环内部,再增加一个循环,实现每一行的 星星 打印     # 定义起始列    col = 1​    while col <= row:        # "\t" 可以在控制台输出一个制表符,协助在输出文本时对齐        print("%d * %d = %d" % (col, row, row * col), end="\t")​        # 列数 + 1        col += 1​    # 每一行输出完成后,再增加一个换行    print("")​    # 行数 + 1    row += 1

练习2、计算 0 ~ 100 之间 所有 偶数 的累计求和结果

  1. 编写循环 确认 要计算的数字

  2. 添加 结果 变量,在循环内部 处理计算结果

# 0. 最终结果result = 0​# 1. 计数器i = 0​# 2. 开始循环while i <= 100:​    # 判断偶数    if i % 2 == 0:        print(i)        result += i​    # 处理计数器    i += 1​print("0~100之间偶数求和结果 = %d" % result)​
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!