python学习笔记
----
一. 注释
1. 单行注释(行注释):
a. 以 `#` 开头,`#` 右边的所有东西都被当做说明文字,而不是真正要执行的程序,只起到辅助说明作用。
b. 为了保证代码的可读性,`#` 后面建议先添加一个空格,然后再编写相应的说明文字。
c. **为了保证代码的可读性**,**注释和代码之间** 至少要有 **两个空格**
示例代码如下:
print("hello python") # 输出 `hello python`
2. 多行注释(块注释):
要在 Python 程序中使用多行注释,可以用 **一对 连续的 三个 引号**(单引号和双引号都可以)
示例代码如下:
"""
这是一个多行注释
在多行注释之间,可以写很多很多的内容……
"""
print("hello python")
二. 关于代码规范
1. Python 官方提供有一系列 PEP(Python Enhancement Proposals) 文档
其中第 8 篇文档专门针对 **Python 的代码格式** 给出了建议,也就是俗称的 **PEP 8**
文档地址:https://www.python.org/dev/peps/pep-0008/
谷歌有对应的中文文档:http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/
2. 任何语言的程序员,编写出符合规范的代码,是开始程序生涯的第一步
三. 算数运算符
1.
| 运算符 | 描述 | 实例 |
| :----: | :----: | ------------------------------------------ |
| + | 加 | 10 + 20 = 30 |
| - | 减 | 10 - 20 = -10 |
| * | 乘 | 10 * 20 = 200 |
| / | 除 | 10 / 20 = 0.5 |
| // | 取整除 | 返回除法的整数部分(商) 9 // 2 输出结果 4 |
| % | 取余数 | 返回除法的余数 9 % 2 = 1 |
| ** | 幂 | 又称次方、乘方,2 ** 3 = 8 |
2. 在 Python 中 `*` 运算符还可以用于字符串,计算结果就是字符串重复指定次数的结果
In [1]: "-" * 50
Out[1]: '----------------------------------------'
3. 算数运算符的优先级
a. 和数学中的运算符的优先级一致,在 Python 中进行数学计算时,同样也是:
**先乘除后加减**
同级运算符是 **从左至右** 计算
可以使用 `()` 调整计算的优先级
b. 以下表格的算数优先级由高到最低顺序排列
| 运算符 | 描述 |
| -------- | ---------------------- |
| ** | 幂 (最高优先级) |
| * / % // | 乘、除、取余数、取整除 |
| + - | 加法、减法 |
四. 变量
1. 在内存中创建一个变量,会包括:
1. 变量的名称
2. 变量保存的数据
3. 变量存储数据的类型
4. 变量的地址(标示)
2. 变量的类型
* 在 `Python` 中定义变量是 **不需要指定类型**(在其他很多高级语言中都需要)
* 数据类型可以分为 **数字型** 和 **非数字型**
* 数字型
* 整型 (`int`)
* 浮点型(`float`)
* 布尔型(`bool`)
* 真 `True` `非 0 数` —— **非零即真**
* 假 `False` `0`
* 复数型 (`complex`)
* 主要用于科学计算,例如:平面场问题、波动问题、电感电容等问题
* 非数字型
* 字符串
* 列表
* 元组
* 字典
3. 使用 `type` 函数可以查看一个变量的类型
In [1]: type(name)
4. ### 不同类型变量之间的计算
1) **数字型变量** 之间可以直接计算
* 在 Python 中,两个数字型变量是可以直接进行 算数运算的
* 如果变量是 `bool` 型,在计算时
* `True` 对应的数字是 `1`
* `False` 对应的数字是 `0`
2) 在 Python 中,字符串之间可以使用 `+` 拼接生成新的字符串
In [1]: first_name = "三"
In [2]: last_name = "张"
In [3]: first_name + last_name
Out[3]: '三张'
3) **字符串变量** 可以和 **整数** 使用 `*` 重复拼接相同的字符串
In [1]: "-" * 50
Out[1]: '--------------------------------------------------'
4) **数字型变量** 和 **字符串** 之间 **不能进行其他计算**
In [1]: first_name = "zhang"
In [2]: x = 10
In [3]: x + first_name
---------------------------------------------------------------------------
TypeError: unsupported operand type(s) for +: 'int' and 'str'
类型错误:`+` 不支持的操作类型:`int` 和 `str`
5. 变量的输入
1) #### input 函数实现键盘输入
* 在 Python 中可以使用 `input` 函数从键盘等待用户的输入
* 用户输入的 **任何内容** Python 都认为是一个 **字符串**
* 语法如下:
字符串变量 = input("提示信息:")
2) 类型转换函数
| 函数 | 说明 |
| -------- | --------------------- |
| int(x) | 将 x 转换为一个整数 |
| float(x) | 将 x 转换到一个浮点数 |
6. 变量的格式化输出
`%` 被称为 **格式化操作符**,专门用于处理字符串中的格式
* 包含 `%` 的字符串,被称为 **格式化字符串**
* `%` 和不同的 **字符** 连用,**不同类型的数据** 需要使用 **不同的格式化字符**
| 格式化字符 | 含义 |
| ---------- | ------------------------------------------------------------ |
| %s | 字符串 |
| %d | 有符号十进制整数,`%06d` 表示输出的整数显示位数,不足的地方使用 `0` 补全 |
| %f | 浮点数,`%.2f` 表示小数点后只显示两位 |
| %% | 输出 `%` |
语法格式如下:
print("格式化字符串" % 变量1)
print("格式化字符串" % (变量1, 变量2...))
7. 变量的命名
1) ## 0.1 标识符和关键字
### 1.1 标识符
> 标示符就是程序员定义的 **变量名**、**函数名**
> **名字** 需要有 **见名知义** 的效果,见下图:
* 标示符可以由 **字母**、**下划线** 和 **数字** 组成
* **不能以数字开头**
* **不能与关键字重名**
2) ### 关键字
* **关键字** 就是在 `Python` 内部已经使用的标识符
* **关键字** 具有特殊的功能和含义
* 开发者 **不允许定义和关键字相同的名字的标示符**
通过以下命令可以查看 `Python` 中的关键字
In [1]: import keyword
In [2]: print(keyword.kwlist)
3) 变量的命名规则
**注意** `Python` 中的 **标识符** 是 **区分大小写的**
1. 在定义变量时,为了保证代码格式,`=` 的左右应该各保留一个空格
2. 在 `Python` 中,如果 **变量名** 需要由 **二个** 或 **多个单词** 组成时,可以按照以下方式命名
1. 每个单词都使用小写字母
2. 单词与单词之间使用 **`_`下划线** 连接
* 例如:`first_name`、`last_name`、`qq_number`、`qq_password`
3. 驼峰命名法
* 当 **变量名** 是由二个或多个单词组成时,还可以利用驼峰命名法来命名
* **小驼峰式命名法**
* 第一个单词以小写字母开始,后续单词的首字母大写
* 例如:`firstName`、`lastName`
* **大驼峰式命名法**
* 每一个单词的首字母都采用大写字母
* 例如:`FirstName`、`LastName`、`CamelCase`
五. 判断(if)语句
1.
if 条件1:
条件1满足执行的代码
……
elif 条件2:
条件2满足时,执行的代码
……
elif 条件3:
条件3满足时,执行的代码
……
else:
以上条件都不满足时,执行的代码
……
2. `if` 的嵌套
if 条件 1:
条件 1 满足执行的代码
……
if 条件 1 基础上的条件 2:
条件 2 满足时,执行的代码
……
# 条件 2 不满足的处理
else:
条件 2 不满足时,执行的代码
# 条件 1 不满足的处理
else:
条件1 不满足时,执行的代码
六. 随机数的处理
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) # 该语句是错误的,下限必须小于上限
七. 循环
1. `while` 语句基本语法
初始条件设置 —— 通常是重复执行的 计数器
while 条件(判断 计数器 是否达到 目标次数):
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
...(省略)...
处理条件(计数器 + 1)
2. `while` 循环嵌套
while 条件 1:
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
...(省略)...
while 条件 2:
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
...(省略)...
处理条件 2
处理条件 1
3. ## break 和 continue
> `break` 和 `continue` 是专门在循环中使用的关键字
* `break` **某一条件满足时**,退出循环,不再执行后续重复的代码
* `continue` **某一条件满足时**,不执行后续重复的代码
> `break` 和 `continue` 只针对 **当前所在循环** 有效
4. **知识点** 对 `print` 函数的使用做一个增强
* 在默认情况下,`print` 函数输出内容之后,会自动在内容末尾增加换行
* 如果不希望末尾增加换行,可以在 `print` 函数输出内容的后面增加 `, end=""`
* 其中 `""` 中间可以指定 `print` 函数输出内容之后,继续希望显示的内容
* 语法格式如下:
# 向控制台输出内容结束之后,不会换行
print("*", end="")
# 单纯的换行
print("")
`end=""` 表示向控制台输出内容结束之后,不会换行
5. **字符串中的转义字符**
* `\t` 在控制台输出一个 **制表符**,协助在输出文本时 **垂直方向** 保持对齐
* `\n` 在控制台输出一个 **换行符**
> **制表符** 的功能是在不使用表格的情况下在 **垂直方向** 按列对齐文本
| 转义字符 | 描述 |
| -------- | ---------- |
| \\\\ | 反斜杠符号 |
| \\' | 单引号 |
| \\" | 双引号 |
| \n | 换行 |
| \t | 横向制表符 |
| \r | 回车 |
八. 函数基础
1. 函数的定义
定义函数的格式如下:
def 函数名():
函数封装的代码
……
2. 函数调用
调用函数很简单的,通过 `函数名()` 即可完成对函数的调用
3. 思考
* 能否将 **函数调用** 放在 **函数定义** 的上方?
* 不能!
* 因为在 **使用函数名** 调用函数之前,必须要保证 `Python` 已经知道函数的存在
* 否则控制台会提示 `NameError: name 'say_hello' is not defined` (**名称错误:say_hello 这个名字没有被定义**)
4. 代码示例
name = "小明"
# 解释器知道这里定义了一个函数
def say_hello():
print("hello 1")
print("hello 2")
print("hello 3")
print(name)
# 只有在调用函数时,之前定义的函数才会被执行
# 函数执行完成之后,会重新回到之前的程序中,继续执行后续的代码
say_hello()
print(name)
5. 函数的返回值
在函数中使用 `return` 关键字可以返回结果
代码示例:
def sum_2_num(num1, num2):
"""对两个数字的求和"""
return num1 + num2
# 调用函数,并使用 result 变量接收计算结果
result = sum_2_num(10, 20)
print("计算结果是 %d" % result)
6. ## 使用模块中的函数
> **模块是 Python 程序架构的一个核心概念**
* **模块** 就好比是 **工具包**,要想使用这个工具包中的工具,就需要 **导入 import** 这个模块
* 每一个以扩展名 `py` 结尾的 `Python` 源代码文件都是一个 **模块**
* 在模块中定义的 **全局变量** 、 **函数** 都是模块能够提供给外界直接使用的工具
* 可以 **在一个 Python 文件** 中 **定义 变量 或者 函数**
* 然后在 **另外一个文件中** 使用 `import` 导入这个模块
* 导入之后,就可以使用 `模块名.变量` / `模块名.函数` 的方式,使用这个模块中定义的变量或者函数
====