python量化学习路线(第一章python相关语法)
简介
本文讲解的是,python与量化相关语法,通过大量的练习题进行学习。
题目
以下是一些Python语法和库的练习题,可以供你进行练习:
Python语法练习题
- 写出一个函数来判断某个字符串是否是回文。
代码注释如下:
# 判断是否为回文数
def is_palindrome(s):
return s == s[::-1]
这是一个函数,名为is_palindrome
,输入参数为字符串s
。它的作用是判断输入的字符串是否为回文(palindrome)。
在Python中,可以使用[::-1]
对字符串进行反转操作。反转后得到的字符串与原来的字符串相等,就说明原字符串是回文。
运行结果如下所示:
# 测试
print(is_palindrome("abcba")) # True
print(is_palindrome("abcccba")) # True
print(is_palindrome("abccdba")) # False
输出结果中,第一个和第二个测试均返回True,说明输入字符串是回文;第三个测试返回False,说明输入字符串不是回文。
- 编写一个程序,将列表中的所有偶数移动到列表末尾并保持原有顺序。
代码注释如下:
# 将列表中的偶数移到末尾并保持奇数顺序不变
def move_even_numbers(nums):
# 列表推导式,筛选出所有的奇数
odd_nums = [n for n in nums if n % 2 == 1]
# 列表推导式,筛选出所有的偶数
even_nums = [n for n in nums if n % 2 == 0]
# 返回一个新的列表,先将奇数末尾追加偶数
return odd_nums + even_nums
这是一个函数,名为move_even_numbers
,输入参数为一个列表nums
。它的作用是将输入列表中的所有偶数移动到列表末尾并保持原有顺序,并返回一个新的列表。
函数使用了两个列表推导式,odd_nums
和even_nums
分别筛选出给定列表中的奇数和偶数。在Python中,可以使用%
求模运算符来判断一个数是奇数还是偶数。然后将奇数和偶数组合起来,并返回一个新的列表。
运行结果如下所示:
# 测试
print(move_even_numbers([1, 3, 2, 4, 7, 6])) # [1, 3, 7, 2, 4, 6]
print(move_even_numbers([2, 4, 6, 1, 3, 5])) # [1, 3, 5, 2, 4, 6]
第一个测试输入列表为[1, 3, 2, 4, 7, 6]
,输出结果为[1, 3, 7, 2, 4, 6]
。其中奇数部分的顺序不变,偶数组分会附在末尾,且偶数部分保持了原有顺序。
第二个测试输入列表为[2, 4, 6, 1, 3, 5]
,输出结果为[1, 3, 5, 2, 4, 6]
,同上述分析。
- 写一个计算器程序,从控制台输入两个数字和操作符(+,-,*,/),然后输出结果。
代码注释如下:
# 计算输入数字之间的四则运算结果,支持浮点数
num1 = float(input("请输入第一个数字:"))
num2 = float(input("请输入第二个数字:"))
operator = input("请输入运算符:")
if operator == "+":
result = num1 + num2
elif operator == "-":
result = num1 - num2
elif operator == "*":
result = num1 * num2
elif operator == "/":
result = num1 / num2
# 输出计算结果
print("结果为:", result)
这是一个控制台程序,它首先从用户获取两个数字和运算符,并输出计算结果。支持输入浮点数。
使用float()
内置函数将控制台输入的字符串类型转换成浮点型数据类型便于四则运算操作,而不会出现计算结果错误的情况。
对于支持加、减、乘、除4种运算操作,在满足条件时执行对应运算,并将结果存储在变量result
中。最终使用print()
函数将结果输出到控制台。
运行结果示例如下:
请输入第一个数字:3.14
请输入第二个数字:2.71828
请输入运算符:+
结果为: 5.85828
以上示例演示了求一组小数的和运算,其它三种基本的四则运算类似,读者可自行尝试验证。
- 编写一个程序,接受用户输入并输出前N个斐波那契数列数字。
代码注释如下:
# 生成斐波那契数列,列表中包括 n 项
def generate_fibonacci_sequence(n):
# 如果 n=1,则只有一项:[1]
if n == 1:
return [1]
# 如果 n=2,则有两项:[1, 1]
elif n == 2:
return [1, 1]
# 如果 n>2,则先添加前两项 [1, 1],之后用循环追加新的项
else:
seq = [1, 1]
for i in range(2, n):
seq.append(seq[i-1] + seq[i-2])
return seq
n = int(input("请输入您需要生成的斐波那契数列数字个数:"))
print(generate_fibonacci_sequence(n))
这是一个字符串控制台程序,在此程序中,我们定义了generate_fibonacci_sequence
函数,可以根据用户输入的数字,生成斐波那契数列。
如果输入数字为1,则返回[1]
;如果输入数字为2,则返回[1,1]
,其他情况下,我们定义seq列表变量初始值为[1,1]
,然后循环计算并将新值追加到这个列表,并在最后返回seq列表。
在程序中我们使用input
内置函数从控制台获取数据输入。运行程序时,提示用户输入要生成的斐波那契数列的项数,然后打印生成的斐波那契数列到控制台。
运行示例如下:
请输入一个数字:10
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
以上示例演示了如何使用输入的数字来生成相应数量斐波那契序列。
Python库练习题
- 使用numpy库进行矩阵运算,计算矩阵相加、矩阵相减和矩阵乘法操作。
代码注释如下:
# 导入NumPy模块库
import numpy as np
# 创建矩阵a和b
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
# 计算矩阵a + b,将结果存储在矩阵c中
c = a + b
# 计算矩阵a - b,将结果存储在矩阵d中
d = a - b
# 计算矩阵a × b,将结果存储在矩阵e中
e = a.dot(b)
# 打印三个矩阵
print("矩阵a:")
print(a)
print("矩阵b:")
print(b)
print("矩阵a + b:")
print(c)
print("矩阵a - b:")
print(d)
print("矩阵a × b:")
print(e)
这段代码使用了NumPy库来执行矩阵计算。首先通过np.array()
创建了两个矩阵a
和b
。接着,用+
、-
、dot()
分别计算矩阵加、减及乘,并将它们的结果分别保存在c
、d
、e
矩阵中。
最后,print()
函数将矩阵a、b、c、d和e打印输出到控制台。在计算过程中,需要注意到两个矩阵的行列数需满足要求。
输出结果是这样的:
矩阵a:
[[1 2]
[3 4]]
矩阵b:
[[5 6]
[7 8]]
矩阵a + b:
[[ 6 8]
[10 12]]
矩阵a - b:
[[-4 -4]
[-4 -4]]
矩阵a × b:
[[19 22]
[43 50]]
以上示例演示了如何使用NumPy来进行数组和矩阵计算。
- 使用pandas库读取并处理.csv文件,统计其中每一列的平均值、中位数和标准差。
代码注释如下:
# 导入Pandas库
import pandas as pd
# 从 CSV 文件中读取数据
df = pd.read_csv("data.csv")
# 循环遍历 Pandas DataFrame 的每一列,并计算均值、中位数和标准差,并输出结果
for col in df.columns:
mean = df[col].mean()
median = df[col].median()
std_dev = df[col].std()
print(f"{
col}:平均值={
mean}, 中位数={
median}, 标准差={
std_dev}")
这段代码使用了Pandas库读取CSV文件中的数据,并以列作为操作对象进行标准化处理。
其中,pd.read_csv()
函数以CSV格式读取起始于data.csv文件的数据。接下来的循环遍历语句会针对程序读入的每一个列数据(由df.columns
储存),打印计算所得的平均值(mean)、中位数(median)和标准差(std_dev)。
运行以上代码,输出结果示例看起来是这样的:
A:平均值=1.5, 中位数=1.5, 标准差=0.8728715609439695
B:平均值=2.5, 中位数=2.5, 标准差=0.8728715609439697
C:平均值=4.5, 中位数=4.5, 标准差=0.8728715609439683
以上示例演示了如何使用Pandas库的DataFrame对象,并计算每列均值、中位数和标准差等统计量。
- 对matplotlib库进行练习,使用折线图绘制两个函数的图像。
代码注释如下:
# 导入Matplotlib库和NumPy库
import matplotlib.pyplot as plt
import numpy as np
# 计算x、y1,和y2数组
# x是0到10之间拥有100个值的等差数列
# y1 = sin(x)
# y2 = cos(x)
x = np.linspace(0, 10, num=100)
y1 = np.sin(x)
y2 = np.cos(x)
# 绘制两个函数图像
# 给每个曲线分别指定标签和颜色
plt.plot(x, y1, label="sin(x)")
plt.plot(x, y2, label="cos(x)")
# 添加x轴和y轴标签以及标题
plt.xlabel("X轴")
plt.ylabel("Y轴")
plt.title("函数图像")
# 显示图例,即在图像中区分出标签代表的函数
plt.legend()
# 显示图像
plt.show()
以上代码使用了Matplotlib(Python数据可视化库)和NumPy计算库,首先构建了一个包含一定数量点的等间距数列,再用这些点的横坐标值生成正弦值和余弦值数组。
然后通过plt
对象绘制这两个数组的关系(两条函数曲线),并为这两个函数分配相对应的标签。
接着,设置x轴和y轴标签和图像标题。最后,调用show()
方法展示图像。
运行程序,会弹出一个窗口,显示绘图结果。此示例中,两条函数曲线在图像的x轴区间[0,10]上分别显示出正弦和余弦函数沿着该区间所绘制出来的曲线,而每一条曲线的颜色、标签均已经被指定并对应着图例。