Python 数学建模基础语法与常用库应用指南
一、基础语法
1. 标识符
由字母、数字、下划线组成,不能以数字开头,且区分大小写。单下划线开头的(_foo),表明是不能直接访问的类属性;双下划线开头的(__foo),代表类的私有成员;双下划线开头和结尾的(__foo__),用于特殊方法标识。
2. 保留字符
像 and、if 等关键词,不能用作标识符。
3. 行和缩进
Python 利用缩进来表示代码块,同一代码块内,缩进的空格数必须保持一致。建议使用单个制表符、两个或四个空格,严禁混用。
a = 1
if a == 1:
print(a)
print("true")
print("a 是等于 1 的")
print("go")
4. 注释
单行注释以 # 开头;多行注释使用三个单引号'''或三个双引号"""。
5. print 输出
默认情况下,print 会换行输出。在变量末尾加上逗号(,),可实现不换行输出(Python 2 风格,建议统一为 Python 3)。
x = "a"
y = "b"
# 换行输出
print(x)
print(y)
print('---------')
# 不换行输出
print(x, end='')
print(y, end='')
在同一行书写多个语句时,使用分号(;)进行分隔。
6. 代码组
缩进相同的一组语句构成代码组。if、while 等复合语句,首行以关键字开头,以冒号结束,后续的代码组构成子句。
二、基本数据类型
(一)、变量赋值
1.1 无需类型声明
Python 中的变量赋值不需要类型声明。每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
等号 = 用来给变量赋值。等号运算符左边是一个变量名,等号运算符右边是存储在变量中的值。
counter = 100 # 赋值整型变量
miles = 1000.0 # 浮点型
name = "John" # 字符串
print(counter)
print(miles)
print(name)
1.2 多种赋值方式
- 单个变量赋值:通过
等号,直接将值赋予变量。如 miles = 1000.0,将浮点型数据 1000.0 赋给变量 miles。 - 多个变量赋相同值:使用
a = b = c = 1的形式,系统会创建一个值为 1 的整型对象,让 a、b、c 三个变量同时指向这一内存空间。 - 多个变量赋不同值:采用
a, b, c = 1, 2, "john"的方式,可分别将不同类型的值,对应地赋给多个变量。
(二)、标准数据类型
2.1 数字(Numbers)
2.1.1 不可变类型
数字数据类型用于存储数值。值得注意的是,当数字变量的值发生改变时,系统会为其分配新的对象。
2.1.2 支持类型
int(有符号整型):主要用于表示整数,如 10、-786 等。float(浮点型):用于表示带有小数部分的数值,如 0.0、15.20 等。complex(复数):由实部和虚部组成,书写形式为 a + bj。
2.1.3 删除对象引用
可使用 del 语句删除数字对象的引用。例如,del var1 可删除变量 var1 的引用。
2.2 字符串(String)
2.2.1 组成与索引
字符串由数字、字母、下划线等字符组成。在字符串中,索引从左至右默认从 0 开始,从右至左默认从 -1 开始。
2.2.2 切片操作
借助 [头下标:尾下标] 的方式,可对字符串进行切片操作,从而截取子字符串。需要注意的是,截取的结果包含头下标对应的字符,但不包含尾下标对应的字符。(包头不包尾)
2.2.3 运算符
字符串类型支持多种运算符:
- 连接运算符(+):将两个字符串连接成一个新的字符串。
- 重复运算符(*):将字符串重复指定次数。
(三)、数据类型的转换
a = 100
print(type(a))
b = 100.9
print(type(b))
c = True
print(type(c))
type() 打印数据类型的函数。
3.1 隐式类型转换——自动完成
# 隐式转换
ab = a + b
print(type(ab))
3.2 显式类型转换——使用类型函数来转换
# 强制转换
ab = a + int(b)
print(type(ab))
ab = int(a + b)
print(type(ab))
就是在想要转换的变量前面加一个类型标识。
(四)、复合数据类型
4.1 列表
-
基本概念:列表是一种有序、可变的数据类型,可以存储任意类型的数据,元素之间用逗号分隔,整体用方括号
[]包裹。append()方法在列表末尾添加一个元素。insert()方法在指定位置插入一个元素。- 使用
del语句删除指定位置的元素。 pop()方法删除并返回指定位置的元素(默认删除最后一个)。remove()方法删除指定值的第一个匹配项。
-
注意点:
- 索引不能超出列表范围,否则会抛出
IndexError异常。 - 列表的切片操作(如
fruits[1:3])会返回一个新的列表。
- 索引不能超出列表范围,否则会抛出
fruits = ['apple', 'banana', 'cherry']
numbers = [1, 2, 3, 4, 5]
mixed = [1, 'hello', True, [1, 2, 3]]
# 删除元素
del fruits[2]
removed = fruits.pop(1)
fruits.remove('pear')
# 添加元素
fruits.append('pear')
fruits.insert(1, 'grape')
# 修改元素
fruits[1] = 'orange'
# 访问元素
print(fruits[0])
4.2 元组
- 基本概念:元组是一种有序、不可变的数据类型,元素之间用逗号分隔,整体用圆括号
()包裹。虽然不可变,但元组内如果包含可变对象(如列表),可变对象本身是可以修改的。 - 注意点:由于元组不可变,所以没有添加、删除、修改元素的方法。元组在需要保证数据不被意外修改的场景下很有用,并且相比列表,元组的访问速度更快。
point = (1, 2)
fruits = ('apple', 'banana', 'cherry')
single = (1,) # 单个元素的元组需要逗号
4.3 集合(set)
- 基本概念:集合是一种无序、可变、不重复的数据类型,元素之间用逗号分隔,整体用花括号
{}包裹(注意:创建空集合需用set(),因为{}创建的是空字典)。 - 注意点:集合中的元素必须是不可变的,所以不能包含列表等可变对象。集合常用于快速判断元素是否存在、去除重复元素以及进行集合运算。
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
print(set1 | set2) # 并集
print(set1 & set2) # 交集
print(set1 - set2) # 差集
# 删除元素
numbers.remove(3)
numbers.discard(9)
# 添加元素
numbers.add(5)
numbers.update([6, 7, 8])
4.4 字典(dict)
- 基本概念:字典是一种无序的、可变的数据类型,以键值对(key-value)的形式存储数据。键必须是唯一且不可变的(如字符串、数字、元组),值可以是任意数据类型。
- 注意点:
- 键的唯一性:字典中键必须唯一,后出现的相同键会覆盖前面的值。
- 键的不可变性:键只能使用不可变数据类型,如不能使用列表作为键。
- 性能优势:字典查找速度快,适合大规模数据的快速查询场景。
person = {'name': 'Alice', 'age': 25}
info = dict(name='Bob', age=30)
# 遍历字典
for key in person.keys():
print(key)
for value in person.values():
print(value)
for key, value in person.items():
print(key, value)
# 删除元素
del person['height']
age = person.pop('age')
# 修改和添加元素
person['age'] = 26
person['height'] = 165
# 访问字典元素
print(person['name'])
print(person.get('height', '暂无数据'))
三、运算符
1. 算术运算符
算术运算符主要用于执行基本的数学运算,涵盖加、减、乘、除等操作。
| 运算符 | 描述 | 示例及结果 |
|---|---|---|
| + | 加法 | 5 + 3 结果为 8 |
| - | 减法 | 5 - 3 结果为 2 |
| * | 乘法 | 5 * 3 结果为 15 |
| / | 除法 | 5 / 3 结果为 1.666... |
| % | 取模 | 5 % 3 结果为 2 |
| ** | 幂运算 | 5 ** 3 结果为 125 |
| // | 取整除 | 5 // 3 结果为 1 |
2. 比较运算符
比较运算符用于对两个值进行大小或相等关系的比较,其运算结果为布尔类型(True 或 False)。
| 运算符 | 描述 | 示例及结果 |
|---|---|---|
| == | 判断相等 | 5 == 3 结果为 False |
| != | 判断不相等 | 5 != 3 结果为 True |
| > | 大于 | 5 > 3 结果为 True |
| < | 小于 | 5 < 3 结果为 False |
| >= | 大于等于 | 5 >= 3 结果为 True |
| <= | 小于等于 | 5 <= 3 结果为 False |
3. 赋值运算符
| 运算符 | 等价操作 | 示例 |
|---|---|---|
| += | a = a + b | a = 5; a += 3 -> 8 |
| -= | a = a - b | a = 5; a -= 3 -> 2 |
| *= | a = a * b | a = 5; a *= 3 -> 15 |
| /= | a = a / b | a = 5; a /= 3 -> 1.66... |
| %= | a = a % b | a = 5; a %= 3 -> 2 |
| **= | a = a ** b | a = 5; a **= 3 -> 125 |
| //= | a = a // b | a = 5; a //= 3 -> 1 |
4. 逻辑运算符
| 运算符 | 描述 | 示例及结果 |
|---|---|---|
| and | 逻辑与 | True and False 结果为 False |
| or | 逻辑或 | True or False 结果为 True |
| not | 逻辑非 | not True 结果为 False |
5. 位运算符
| 运算符 | 描述 | 示例及结果 |
|---|---|---|
| & | 按位与 | a & b 结果为 12 |
| ^ | 按位异或 | a ^ b 结果为 49 |
| ~ | 按位取反 | ~a 结果为 -61 |
| << | 左移 | a << 2 结果为 240 |
| >> | 右移 | a >> 2 结果为 15 |
6. 成员运算符
| 运算符 | 描述 | 示例及结果 |
|---|---|---|
| in | 判断存在 | 3 in my_list 结果为 True |
| not in | 判断不存在 | 6 not in my_list 结果为 True |
7. 身份运算符
| 运算符 | 描述 | 示例及结果 |
|---|---|---|
| is | 判断同一对象 | a is b 结果为 True |
| is not | 判断不同对象 | a is not c 结果为 True |
8. 运算符优先级
| 运算符类型 | 优先级从高到低 |
|---|---|
| 算术运算符 | ** > ~、+、- > *、/、%、// > +、- |
| 位运算符 | <<、>> > & > ^、 |
| 比较运算符 | ==、!=、>、<、>=、<= |
| 逻辑运算符 | not > and > or |
result = 3 + 5 * 2 # 先执行乘法,再执行加法,结果为 13
result = (3 + 5) * 2 # 先执行括号内的加法,再执行乘法,结果为 16
四、判断与循环
1. 判断
if 语句
if condition:
# 条件为 True 时执行的代码块
pass
if - else 语句
if condition:
pass
else:
pass
if - elif - else 语句
if condition1:
pass
elif condition2:
pass
else:
pass
2. 循环语句
for 循环
for item in iterable:
# 针对每个 item 执行的代码块
pass
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
print(fruit)
while 循环
while condition:
# 条件为 True 时执行的代码块
pass
循环控制语句
- break:用于立即终止循环。
- continue:用于跳过当前循环的剩余代码,直接开始下一次循环。
五、函数
(一)、函数基础
1. 定义函数
在 Python 中,使用 def 关键字定义函数。
def add(a, b):
return a + b
2. 调用函数
result = add(3, 5)
print(result)
(二)、函数参数
1. 默认参数
def greet(name, message="Hello"):
print(f"{message}, {name}!")
greet("Alice")
greet("Bob", "Hi")
2. 可变参数
*args:收集多个位置参数,封装成元组。**kwargs:收集多个关键字参数,封装成字典。
def print_args(*args):
for arg in args:
print(arg)
def print_kwargs(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
(三)、匿名函数
square = lambda x: x ** 2
print(square(4))
(四)、函数作为对象
def operate(a, b, func):
return func(a, b)
def multiply(a, b):
return a * b
result = operate(3, 4, multiply)
print(result)
六、文件操作
(一)、文件操作基础
1. 打开文件
file = open('example.txt', 'r')
2. 读取文件
with open('example.txt', 'r') as file:
content = file.read()
print(content)
3. 写入文件
with open('example.txt', 'w') as file:
file.write('这是新写入的内容')
(二)、上下文管理器
with open('example.txt', 'r') as file:
content = file.read()
print(content)
(三)、二进制文件操作
with open('image.jpg', 'rb') as input_file:
with open('new_image.jpg', 'wb') as output_file:
data = input_file.read()
output_file.write(data)
七、模块导入与应用
1. Numpy:数值计算的基石
1.1 安装 Numpy
pip install numpy
1.2 导入 Numpy
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(arr)
2. Pandas:数据处理的利器
2.1 安装 Pandas
pip install pandas
2.2 导入 Pandas
import pandas as pd
data = pd.read_csv('example.csv')
print(data.head())
3. Matplotlib:数据可视化大师
3.1 安装 Matplotlib
pip install matplotlib
3.2 导入 Matplotlib
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.show()
4. 多模块协同使用
案例:分析学生成绩数据
假设有一份学生成绩的 CSV 文件,包含学生姓名、各科成绩等信息。我们将使用 Pandas 读取数据,Numpy 进行数据计算,Matplotlib 绘制成绩分布图表。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_csv('scores.csv')
# 计算平均成绩
data['Average'] = np.mean(data[['Math', 'Science', 'English']], axis=1)
# 绘制平均成绩分布直方图
plt.hist(data['Average'], bins=10, edgecolor='black')
plt.xlabel('Average Score')
plt.ylabel('Number of Students')
plt.title('Distribution of Average Scores')
plt.show()


