python 代码调试软件
Python各类图像库的图片读写方式总结
Python学习手册 笔记
python_tutorials 教程 较全 待整合
python实现的全部算法
教程
以撸代码的形式学习Python
鱼C 零基础入门学习Python
鱼C 《极客首选之Python》
Python抓取股票信息
关于Python的面试题 Python语言特性 操作系统 数据库 网络 编程题 红黑树
HackerRank刷题之路—Python
python 学习线性代数
SWIG实现python对c++封装
TensorFlow技术内幕(四):TF中的混合编程
Python在教育方面的资源列表
python 面向对象编程
python cuda gpu编程
Python多线程编程
python 马尔科夫模型
59个编写高质量Python代码
集体智慧编程 python实现 收集并分析用户的数据和反馈信息,以便创造新的用户价值和商业价值
商业爬虫项目
清华大学 anaconda 软件包 site-page
pip安装包 在线下载后传到离线环境 使用 pip install xxx.whl安装
Python Pocket Reference
内容完整精要,覆盖Python 2和Python 3。内容也与时俱进,提纲挈领的组织。是手册,也是检验对Python的体系化理解的好方法。
Python Cookbook 3rd 中文版
Python进阶读物,包含各种常用场景下的Python代码,使得读者可以写出更加Pythonic的代码。
《Python Parallel Programming Cookbook》中文版
结合Python讨论了线程、进程和异步编程三种模型,是Python并行编程不错的参考书籍。
Effective-Python
59个编写高质量Python代码
源码安装 https://www.python.org/ftp/python/
tar -zxvf Python-3.7.0.tgz
mkdir /usr/local/python3
执行配置文件,编译,编译安装
cd Python-3.7.0
./configure --prefix=/usr/local/python3
make && make install
报错:No module named '_ctypes'
安装 libffi-dev https://packages.ubuntu.com/xenial/libffi-dev
pip 也安装好了
可以去
pip安装包 在线下载后传到离线环境 使用 pip install xxx.whl安装 下载pip安装包 使用pip安装python包
下载
下载
ActiveState 上有很多用户提供的 Python 代码,这些代码能够完成固定的任务;
O’Reilly 根据这些资料出版过一本《Python Cookbook》,但是这本书上并没有列出所有有用的代码。
因此,这里为用户收集一些有用的功能的 Python 代码,为用户提供方便。activestate 原地址为: http://code.activestate.com/recipes/langs/python/。
系列文章:
菜谱 1:创建一个唯一的 SESSION ID http://www.pythonpub.com/article/1502
菜谱 2:发送普通文本邮件 http://www.pythonpub.com/article/1503
菜谱 3:发送 HTML 形式的邮件 http://www.pythonpub.com/article/1504
菜谱 4:发送带图片的邮件 http://www.pythonpub.com/article/1505
菜谱 5:发送带附件的邮件 http://www.pythonpub.com/article/1506
菜谱 6:群发邮件 http://www.pythonpub.com/article/1507
菜谱 7:发送混合邮件 http://www.pythonpub.com/article/1508
菜谱 8:支持简单命令行 http://www.pythonpub.com/article/1509
菜谱 9:SOUNDEX 算法 http://www.pythonpub.com/article/1510
菜谱 10:统计单词出现的频率 http://www.pythonpub.com/article/1511
菜谱 11:使用列表实现循环数据结构 http://www.pythonpub.com/article/1512
菜谱 12:使用 UDP 数据包发送消息 http://www.pythonpub.com/article/1513
菜谱 13:在文件中搜索以及替换文本 http://www.pythonpub.com/article/1514
菜谱 14:从.ZIP文件中读取数据 http://www.pythonpub.com/article/1515
Vector.py
class Vector:
# 双下划线开头结尾的函数,定义为类的内置函数
# 类构造函数
def __init__(self, lst):
self._values = lst
# [] 下标方式会调用的函数
def __getitem__(self, index):
"""取向量的第index个元素"""
return self._values[index]
# len(类对象) 会执行的函数
def __len__(self):
"""返回向量长度(有多少个元素)"""
return len(self._values)
#
def __repr__(self):
return "Vector({})".format(self._values)
# 展开成字符串
def __str__(self):
return "({})".format(", ".join(str(e) for e in self._values))
main_vector.py
import Vector
if __name__ == "__main__":
vec = Vector([5, 2]) # 构造类对象
print(vec) # 展开成字符串后打印??
print("len(vec) = {}".format(len(vec))) # 向量长度
print("vec[0] = {}, vec[1] = {}".format(vec[0], vec[1]))#获取每一个对象
增加向量函数操作,加减乘等运算
class Vector:
# 构造函数
def __init__(self, lst):
self._values = list(lst)
def __add__(self, another):
"""向量加法,返回结果向量"""
# 确保 两向量长度相等
assert len(self) == len(another), \
"Error in adding. Length of vectors must be same."
# return Vector([a + b for a, b in zip(self._values, another._values)])
return Vector([a + b for a, b in zip(self, another)]) # 注意获取 两个对象内的元素的形式!!!!!!!
def __sub__(self, another):
"""向量减法,返回结果向量"""
assert len(self) == len(another), \
"Error in subtracting. Length of vectors must be same."
return Vector([a - b for a, b in zip(self, another)])
def __mul__(self, k):
"""返回 数量乘法 的结果向量:self * k"""
return Vector([k * e for e in self])
def __rmul__(self, k):
"""返回 数量乘法 的结果向量:k * self"""
return self * k
def __pos__(self):
"""返回 向量取正 的结果向量"""
return 1 * self
def __neg__(self):
"""返回 向量取负 的结果向量"""
return -1 * self
def __iter__(self):
"""返回向量的 迭代器"""
return self._values.__iter__()
def __getitem__(self, index):
"""取向量的第index个元素"""
return self._values[index]
def __len__(self):
"""返回向量长度(有多少个元素)"""
return len(self._values)
def __repr__(self):
return "Vector({})".format(self._values)
def __str__(self):
return "({})".format(", ".join(str(e) for e in self._values))
# classmethod 装饰器,不需要实例化类对象,即可实现该函数
@classmethod
def zero(cls, dim):
"""返回一个dim维的零向量"""
return cls([0] * dim)
向量运算测试
from playLA.Vector import Vector
if __name__ == "__main__":
vec = Vector([5, 2]) # 构造类对象
print(vec)
print("len(vec) = {}".format(len(vec)))
print("vec[0] = {}, vec[1] = {}".format(vec[0], vec[1]))
vec2 = Vector([3, 1])
print("{} + {} = {}".format(vec, vec2, vec + vec2))
print("{} - {} = {}".format(vec, vec2, vec - vec2))
print("{} * {} = {}".format(vec, 3, vec * 3))# 向量数乘
print("{} * {} = {}".format(3, vec, 3 * vec))
print("+{} = {}".format(vec, +vec))# 向量取正
print("-{} = {}".format(vec, -vec))# 向量取负
# 定义0向量
zero2 = Vector.zero(2)
print(zero2)
print("{} + {} = {}".format(vec, zero2, vec + zero2))
向量归一化
class Vector:
# ...其他函数省略
EPSILON = 1e-8
# 默认向量 数量除法
def __truediv__(self, k):
"""返回数量除法的结果向量:self / k"""
return (1 / k) * self
def norm(self):
"""返回向量的模"""
# sqrt(x1^2 + ... + xn^2)
# ** 为乘方标号
return math.sqrt(sum(e**2 for e in self))
def normalize(self):
"""返回向量的单位向量"""
if self.norm() < EPSILON:
raise ZeroDivisionError("Normalize error! norm is zero.")
return Vector(self._values) / self.norm()
# return 1 / self.norm() * Vector(self._values)
# return Vector([e / self.norm() for e in self])
# 测试
vec = Vector([5, 2])
vec2 = Vector([3, 1])
zero2 = Vector.zero(2)
print("norm({}) = {}".format(vec, vec.norm()))
print("norm({}) = {}".format(vec2, vec2.norm()))
print("norm({}) = {}".format(zero2, zero2.norm()))
print("normalize {} is {}".format(vec, vec.normalize()))
print(vec.normalize().norm())
print("normalize {} is {}".format(vec2, vec2.normalize()))
print(vec2.normalize().norm())
# 会发生错误
try:
zero2.normalize()
except ZeroDivisionError:
print("Cannot normalize zero vector {}.".format(zero2))
向量点乘
class Vector:
# ...其他函数省略
def dot(self, another):
"""向量点乘,返回结果标量"""
assert len(self) == len(another), \
"Error in dot product. Length of vectors must be same."
# 对应位置元素相乘后,积相加
return sum(a * b for a, b in zip(self, another))
# 测试
vec = Vector([5, 2])
vec2 = Vector([3, 1])
print(vec.dot(vec2))
numpy 中的向量
import numpy as np
if __name__ == "__main__":
print(np.__version__)
# np.array 基础
lst = [1, 2, 3]
lst[0] = "Linear Algebra"
print(lst)
vec = np.array([1, 2, 3])
print(vec)
# vec[0] = "Linear Algebra"
# vec[0] = 666
# print(vec)
# np.array的创建
print(np.zeros(5))
print(np.ones(5))
print(np.full(5, 666))
# np.array的基本属性
print(vec)
print("size =", vec.size)
print("size =", len(vec))
print(vec[0])
print(vec[-1])
print(vec[0: 2])
print(type(vec[0: 2]))
# np.array的基本运算
vec2 = np.array([4, 5, 6])
print("{} + {} = {}".format(vec, vec2, vec + vec2))
print("{} - {} = {}".format(vec, vec2, vec - vec2))
print("{} * {} = {}".format(2, vec, 2 * vec))
print("{} * {} = {}".format(vec, vec2, vec * vec2))
print("{}.dot({}) = {}".format(vec, vec2, vec.dot(vec2)))
print(np.linalg.norm(vec))
print(vec / np.linalg.norm(vec))
print(np.linalg.norm(vec / np.linalg.norm(vec)))
# zero3 = np.zeros(3)
# print(zero3 / np.linalg.norm(zero3))
import Vector
class Matrix:
def __init__(self, list2d):
# 每个元素是一个行向量
self._values = [row[:] for row in list2d]
def row_vector(self, index):
"""返回矩阵的第index个行向量"""
return Vector(self._values[index])
def col_vector(self, index):
"""返回矩阵的第index个列向量"""
return Vector([row[index] for row in self._values])
def __getitem__(self, pos):
"""返回矩阵pos位置的元素"""
r, c = pos
return self._values[r][c]
def size(self):
"""返回矩阵的元素个数"""
r, c = self.shape()
return r * c
def row_num(self):
"""返回矩阵的行数"""
return self.shape()[0]
__len__ = row_num
def col_num(self):
"""返回矩阵的列数"""
return self.shape()[1]
def shape(self):
"""返回矩阵的形状: (行数, 列数)"""
return len(self._values), len(self._values[0])
def __repr__(self):
return "Matrix({})".format(self._values)
__str__ = __repr__
# 测试
matrix = Matrix([[1, 2], [3, 4]])
print(matrix)
print("matrix.shape = {}".format(matrix.shape()))
print("matrix.size = {}".format(matrix.size()))
print("len(matrix) = {}".format(len(matrix)))
print("matrix[0][0] = {}".format(matrix[0, 0]))
实现矩阵的基本操作
import Vector
class Matrix:
# 其他函数省略
@classmethod
def zero(cls, r, c):
"""返回一个r行c列的零矩阵"""
return cls([[0] * c for _ in range(r)])
@classmethod
def identity(cls, n):
"""返回一个n行n列的单位矩阵"""
# 其他部分为0
m = [[0]*n for _ in range(n)]
# 对角线上为1
for i in range(n):
m[i][i] = 1;
return cls(m)
def __add__(self, another):
"""返回两个矩阵的加法结果"""
assert self.shape() == another.shape(), \
"Error in adding. Shape of matrix must be same."
# 二维矩阵,对应位置元素相加
return Matrix([[a + b for a, b in zip(self.row_vector(i), another.row_vector(i))]
for i in range(self.row_num())])
def __sub__(self, another):
"""返回两个矩阵的减法结果"""
assert self.shape() == another.shape(), \
"Error in subtracting. Shape of matrix must be same."
# 二维矩阵,对应位置元素相减
return Matrix([[a - b for a, b in zip(self.row_vector(i), another.row_vector(i))]
for i in range(self.row_num())])
# 矩阵数乘
def __mul__(self, k):
"""返回矩阵的数量乘结果: self * k"""
return Matrix([[e * k for e in self.row_vector(i)]
for i in range(self.row_num())])
def __rmul__(self, k):
"""返回矩阵的数量乘结果: k * self"""
return self * k
def __truediv__(self, k):
"""返回数量除法的结果矩阵:self / k"""
return (1 / k) * self
def __pos__(self):
"""返回矩阵取正的结果"""
return 1 * self
def __neg__(self):
"""返回矩阵取负的结果"""
return -1 * self
# 测试
matrix = Matrix([[1, 2], [3, 4]])
matrix2 = Matrix([[5, 6], [7, 8]])
print(matrix2)
print("add: {}".format(matrix + matrix2))
print("subtract: {}".format(matrix - matrix2))
print("scalar-mul: {}".format(2 * matrix))
print("scalar-mul: {}".format(matrix * 2))
print("zero_2_3: {}".format(Matrix.zero(2, 3)))
# 单位阵
I = Matrix.identity(2)
print(I)
print("A.dot(I) = {}".format(matrix.dot(I)))
print("I.dot(A) = {}".format(I.dot(matrix)))
矩阵和矩阵的乘法 以及 矩阵转置
import Vector
class Matrix:
# 其他函数省略
def dot(self, another):
"""返回矩阵乘法的结果"""
if isinstance(another, Vector):
# 矩阵 和 向量 的乘法
# 矩阵 列数量 == 向量长度
assert self.col_num() == len(another), \
"Error in Matrix-Vector Multiplication."
# 矩阵每一行为向量,变成 向量*向量
return Vector([self.row_vector(i).dot(another) for i in range(self.row_num())])
if isinstance(another, Matrix):
# 矩阵1 和 矩阵2 的乘法
# 矩阵1列数 == 矩阵2行数
assert self.col_num() == another.row_num(), \
"Error in Matrix-Matrix Multiplication."
# 矩阵1 每一行 分别* 矩阵2 每一列
# 矩阵2 每一列 for j in range(another.col_num())
# 矩阵1 每一行 for i in range(self.row_num())
return Matrix([[self.row_vector(i).dot(another.col_vector(j)) for j in range(another.col_num())]
for i in range(self.row_num())])
def T(self):
"""返回矩阵的转置矩阵"""
return Matrix([[e for e in self.col_vector(i)]
for i in range(self.col_num())])
# 测试
T = Matrix([[1.5, 0], [0, 2]])
p = Vector([5, 3])
print("T.dot(p) = {}".format(T.dot(p)))
P = Matrix([[0, 4, 5], [0, 0, 3]])
print("T.dot(P) = {}".format(T.dot(P)))
print("A.dot(B) = {}".format(matrix.dot(matrix2)))
print("B.dot(A) = {}".format(matrix2.dot(matrix)))
# 转置
print("P.T = {}".format(P.T()))
numpy矩阵
import numpy as np
if __name__ == "__main__":
# 矩阵的创建
A = np.array([[1, 2], [3, 4]])
print(A)
# 矩阵的属性
print(A.shape)
print(A.T)
# 获取矩阵的元素
print(A[1, 1])
print(A[0])
print(A[:, 0])
print(A[1, :])
# 矩阵的基本运算
B = np.array([[5, 6], [7, 8]])
print(A + B)
print(A - B)
print(10 * A)
print(A * 10)
print(A * B)
print(A.dot(B))
p = np.array([10, 100])
print(A + p)
print(A + 1)
# 点乘
print(A.dot(p))
# 单位矩阵
I = np.identity(2)
print(I)
print(A.dot(I))
print(I.dot(A))
# 逆矩阵
invA = np.linalg.inv(A)
print(invA)
print(invA.dot(A))
print(A.dot(invA))
# C = np.array([[1, 2, 3], [4, 5, 6]])
# np.linalg.inv(C)
矩阵 平移 和旋转
import matplotlib.pyplot as plt
import Matrix
import Vector
import math
if __name__ == "__main__":
points = [[0, 0], [0, 5], [3, 5], [3, 4], [1, 4],
[1, 3], [2, 3], [2, 2], [1, 2], [1, 0]]
x = [point[0] for point in points]
y = [point[1] for point in points]
plt.figure(figsize=(5, 5))
plt.xlim(-10, 10)
plt.ylim(-10, 10)
plt.plot(x, y)
# plt.show()
P = Matrix(points)
# 矩阵表示的是一个 空间变换
# https://github.com/Ewenwan/Mathematics#矩阵线性变换-1
# T = Matrix([[2, 0], [0, 1.5]])
# T = Matrix([[1, 0], [0, -1]])
# T = Matrix([[-1, 0], [0, 1]])
# T = Matrix([[-1, 0], [0, -1]])
# T = Matrix([[1, 0.5], [0, 1]])
# T = Matrix([[1, 0], [0.5, 1]])
# 纯旋转
theta = math.pi / 3
T = Matrix([[math.cos(theta), math.sin(theta)], [-math.sin(theta), math.cos(theta)]])
P2 = T.dot(P.T())
plt.plot([P2.col_vector(i)[0] for i in range(P2.col_num())],
[P2.col_vector(i)[1] for i in range(P2.col_num())])
plt.show()
import Matrix
import Vector
# A*x = b
class LinearSystem:
def __init__(self, A, b):
assert A.row_num() == len(b), "row number of A must be equal to the length of b"
self._m = A.row_num()
self._n = A.col_num()
assert self._m == self._n # TODO: no this restriction
self.Ab = [Vector(A.row_vector(i).underlying_list() + [b[i]])
for i in range(self._m)]
def _max_row(self, index, n):
best, ret = self.Ab[index][index], index
for i in range(index + 1, n):
if self.Ab[i][index] > best:
best, ret = self.Ab[i][index], i
return ret
def _forward(self):
n = self._m
for i in range(n):
# Ab[i][i]为主元
max_row = self._max_row(i, n)
self.Ab[i], self.Ab[max_row] = self.Ab[max_row], self.Ab[i]
# 将主元归为一
self.Ab[i] = self.Ab[i] / self.Ab[i][i] # TODO: self.Ab[i][i] == 0?
for j in range(i + 1, n):
self.Ab[j] = self.Ab[j] - self.Ab[j][i] * self.Ab[i]
def _backward(self):
n = self._m
for i in range(n - 1, -1, -1):
# Ab[i][i]为主元
for j in range(i - 1, -1, -1):
self.Ab[j] = self.Ab[j] - self.Ab[j][i] * self.Ab[i]
def gauss_jordan_elimination(self):
self._forward()
self._backward()
def fancy_print(self):
for i in range(self._m):
print(" ".join(str(self.Ab[i][j]) for j in range(self._n)), end=" ")
print("|", self.Ab[i][-1])
Talk is cheap. Show me the code.–Linus Torvalds
**第 0000 题:**将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。
类似于图中效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gsqWpYc1-1691788660817)(http://i.imgur.com/sg2dkuY.png?1)]
第 0001 题:做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)?
第 0002 题:将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中。
**第 0003 题:**将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中。
**第 0004 题:**任一个英文的纯文本文件,统计其中的单词出现的个数。
**第 0005 题:**你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小。
**第 0006 题:**你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。
**第 0007 题:**有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。
第 0008 题:一个HTML文件,找出里面的正文。
第 0009 题:一个HTML文件,找出里面的链接。
第 0010 题:使用 Python 生成类似于下图中的字母验证码图片
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EdGBln0f-1691788660818)(http://i.imgur.com/aVhbegV.jpg)]
第 0011 题: 敏感词文本文件 filtered_words.txt,里面的内容为以下内容,当用户输入敏感词语时,则打印出 Freedom,否则打印出 Human Rights。
北京
程序员
公务员
领导
牛比
牛逼
你娘
你妈
love
sex
jiangge
第 0012 题: 敏感词文本文件 filtered_words.txt,里面的内容 和 0011题一样,当用户输入敏感词语,则用 星号 * 替换,例如当用户输入「北京是个好城市」,则变成「**是个好城市」。
第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片
第 0014 题: 纯文本文件 student.txt为学生信息, 里面的内容(包括花括号)如下所示:
{
"1":["张三",150,120,100],
"2":["李四",90,99,95],
"3":["王五",60,66,68]
}
请将上述内容写到 student.xls 文件中,如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZO3GWszs-1691788660819)(http://i.imgur.com/nPDlpme.jpg)]
第 0015 题: 纯文本文件 city.txt为城市信息, 里面的内容(包括花括号)如下所示:
{
"1" : "上海",
"2" : "北京",
"3" : "成都"
}
请将上述内容写到 city.xls 文件中,如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TyyWvUD8-1691788660819)(http://i.imgur.com/rOHbUzg.png)]
第 0016 题: 纯文本文件 numbers.txt, 里面的内容(包括方括号)如下所示:
[
[1, 82, 65535],
[20, 90, 13],
[26, 809, 1024]
]
请将上述内容写到 numbers.xls 文件中,如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0lyWPqZ8-1691788660819)(http://i.imgur.com/iuz0Pbv.png)]
第 0017 题: 将 第 0014 题中的 student.xls 文件中的内容写到 student.xml 文件中,如
下所示:
{
"1" : ["张三", 150, 120, 100],
"2" : ["李四", 90, 99, 95],
"3" : ["王五", 60, 66, 68]
}
第 0018 题: 将 第 0015 题中的 city.xls 文件中的内容写到 city.xml 文件中,如下所示:
{
"1" : "上海",
"2" : "北京",
"3" : "成都"
}
第 0019 题: 将 第 0016 题中的 numbers.xls 文件中的内容写到 numbers.xml 文件中,如下
所示:
[
[1, 82, 65535],
[20, 90, 13],
[26, 809, 1024]
]
第 0020 题: 登陆中国联通网上营业厅 后选择「自助服务」 --> 「详单查询」,然后选择你要查询的时间段,点击「查询」按钮,查询结果页面的最下方,点击「导出」,就会生成类似于 2014年10月01日~2014年10月31日通话详单.xls 文件。写代码,对每月通话时间做个统计。
第 0021 题: 通常,登陆某个网站或者 APP,需要使用用户名和密码。密码是如何加密后存储起来的呢?请使用 Python 对密码加密。
阅读资料 用户密码的存储与 Python 示例
阅读资料 Hashing Strings with Python
阅读资料 Python’s safest method to store and retrieve passwords from a database
第 0022 题: iPhone 6、iPhone 6 Plus 早已上市开卖。请查看你写得 第 0005 题的代码是否可以复用。
第 0023 题: 使用 Python 的 Web 框架,做一个 Web 版本 留言簿 应用。
阅读资料:Python 有哪些 Web 框架
第 0024 题: 使用 Python 的 Web 框架,做一个 Web 版本 TodoList 应用。
第 0025 题: 使用 Python 实现:对着电脑吼一声,自动打开浏览器中的默认网站。
例如,对着笔记本电脑吼一声“百度”,浏览器自动打开百度首页。
关键字:Speech to Text
参考思路:
1:获取电脑录音–>WAV文件
python record wav
2:录音文件–>文本
STT: Speech to Text
STT API Google API
3:文本–>电脑命令