王剑编程网

分享专业编程知识与实战技巧

Python 必背的 30 例源代码(含Python基础知识、爬虫和机器学习)

引言

在 Python 的编程世界里,代码是我们构建奇妙应用的基石。为何要背诵这些 Python 源代码呢?这就像是武林高手记住精妙的招式,在面对各种编程挑战时,这些经典代码能迅速成为我们的武器。对于初学者而言,它们是理解 Python 语法和逻辑的绝佳示例;对于有经验的开发者,它们是在复杂项目中快速搭建模块的灵感源泉。无论是构建网络爬虫来挖掘数据,还是运用机器学习算法解决实际问题,这些必背代码都能带来极大的便利,提高编程效率,让我们少走弯路,更快地实现功能。

一、基础语法示例

1. 简单的 Hello World

print("Hello, World!")

这是每个编程语言学习者都要接触的第一行代码,它展示了 Python 中 print 函数的基本用法,用于向控制台输出信息。

2. 变量定义与使用

name = "Python"
age = 30
print("I love", name, "and it's", age, "years old.")

这里定义了两个不同类型的变量,字符串类型的 name 和整数类型的 age,并通过 print 函数将它们组合输出,体现了 Python 中变量的灵活性。

3. 数据类型 - 列表操作

my_list = [1, 2, 3, 4, 5]
print("列表长度:", len(my_list))
my_list.append(6)
print("添加元素后的列表:", my_list)

此例展示了列表的基本操作,包括获取长度和添加元素,列表是 Python 中常用的数据结构之一。

4. 条件判断 - 判断数字正负

num = -5
if num > 0:
    print(num, "是正数")
elif num < 0:
    print(num, "是负数")
else:
    print(num, "是零")

通过 if - elif - else 语句实现条件判断,根据数字的值输出其正负性相关信息。

5. 循环 - 打印九九乘法表

for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{j} × {i} = {i * j}\t", end='')
    print()

这里使用嵌套的 for 循环来打印九九乘法表,展示了 for 循环和 range 函数的强大功能。

6. 函数定义 - 计算两个数的最大公约数

def gcd(a, b):
    while b!= 0:
        a, b = b, a % b
    return a

print("36和24的最大公约数:", gcd(36, 24))

定义了一个函数 gcd,使用辗转相除法计算两个数的最大公约数。

7. 字符串操作 - 字符串拼接与分割

text = "Hello,Python"
words = text.split(',')
new_text = ''.join(words)
print("分割后的单词:", words)
print("拼接后的字符串:", new_text)

展示了如何使用 split 方法将字符串分割成列表,以及使用 join 方法将列表中的字符串元素拼接成新的字符串。

8. 字典操作 - 创建和访问字典

my_dict = {"name": "Alice", "age": 25, "city": "New York"}
print("姓名:", my_dict["name"])
my_dict["job"] = "Engineer"
print("更新后的字典:", my_dict)

演示了字典的创建、元素访问和添加新元素的操作,字典是 Python 中用于存储键值对的数据结构。

9. 异常处理 - 处理除零错误

try:
    result = 10 / 0
except ZeroDivisionError:
    print("除数不能为零")

使用 try - except 语句捕获除零错误,保证程序在出现异常时不会崩溃。

10. 文件操作 - 读取文件内容

try:
    with open('test.txt', 'r') as file:
        content = file.read()
        print("文件内容:", content)
except FileNotFoundError:
    print("文件不存在")

通过 with 语句打开文件并读取其内容,如果文件不存在则捕获相应的异常。

二、爬虫示例

11. 使用 requests 库获取网页内容

import requests

url = "https://www.example.com"
response = requests.get(url)
if response.status_code == 200:
    print("网页内容:", response.text[:100])  # 打印前100个字符
else:
    print("请求失败,状态码:", response.status_code)

此例使用 requests 库向指定网址发送 GET 请求,获取网页内容,并检查请求是否成功。

12. 使用 BeautifulSoup 解析 HTML

from bs4 import BeautifulSoup
import requests

url = "https://www.example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
print("网页标题:", soup.title.string)

结合 requests 和 BeautifulSoup,获取网页内容并解析出标题,展示了 HTML 解析的基本方法。

13. 爬取网页中的所有链接

from bs4 import BeautifulSoup
import requests

url = "https://www.example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
for link in soup.find_all('a'):
    print("链接:", link.get('href'))

在解析网页的基础上,使用 find_all 方法找出所有的 标签,并获取其 href 属性,即网页中的链接。

14. 模拟登录网页(以简单表单登录为例)

import requests

login_url = "https://www.example.com/login"
data = {"username": "user", "password": "pass"}
session = requests.Session()
response = session.post(login_url, data=data)
if response.status_code == 200:
    print("登录成功")
else:
    print("登录失败")

使用 requests 库的 Session 对象模拟用户登录过程,通过向登录网址发送 POST 请求并传递用户名和密码数据。

15. 设置请求头进行爬虫(避免反爬虫机制)

import requests

url = "https://www.example.com"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
    print("请求成功,使用自定义请求头")
else:
    print("请求失败")

通过设置 User - Agent 等请求头信息,模拟浏览器请求,提高爬虫的成功率,绕过一些简单的反爬虫机制。

三、机器学习示例

16. 使用 Scikit - learn 加载鸢尾花数据集

from sklearn.datasets import load_iris

iris = load_iris()
print("数据集特征:", iris.data[:5])
print("数据集标签:", iris.target[:5])

利用 Scikit - learn 库的 load_iris 函数加载鸢尾花数据集,并查看部分数据的特征和标签。

17. 数据预处理 - 标准化数据

from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler

iris = load_iris()
scaler = StandardScaler()
scaled_data = scaler.fit_transform(iris.data)
print("标准化后的数据:", scaled_data[:5])

在机器学习中,数据标准化很重要。这里使用 StandardScaler 对鸢尾花数据集的特征数据进行标准化处理。

18. 使用 K - Nearest Neighbors 算法进行分类(简单示例)

from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2)
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
print("预测准确率:", knn.score(X_test, y_test))

使用 K - Neighbors Neighbors 分类器对鸢尾花数据集进行分类,包括数据划分、模型训练和评估预测准确率。

19. 使用决策树算法进行分类

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2)
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
print("决策树预测准确率:", clf.score(X_test, y_test))

类似地,使用决策树算法对鸢尾花数据集进行分类任务,展示了不同机器学习算法的应用。

20. 使用线性回归模型(以简单数据为例)

import numpy as np
from sklearn.linear_model import LinearRegression

X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])
model = LinearRegression()
model.fit(X, y)
print("预测值:", model.predict([[6]]))

使用 LinearRegression 模型拟合简单的线性关系数据,并进行预测。

21. 交叉验证评估模型(以决策树为例)

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score

iris = load_iris()
clf = DecisionTreeClassifier()
scores = cross_val_score(clf, iris.data, iris.target, cv=5)
print("交叉验证得分:", scores)
print("平均得分:", scores.mean())

通过交叉验证方法更全面地评估决策树模型的性能,减少过拟合的影响。

22. 模型保存与加载(以 K - Nearest Neighbors 模型为例)

from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from joblib import dump, load

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2)
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
dump(knn,'model.joblib')
loaded_knn = load('model.joblib')
print("加载模型后的预测准确率:", loaded_knn.score(X_test, y_test))

使用 joblib 库保存和加载训练好的 K - Neighbors Neighbors 模型,方便模型的复用。

23. 处理文本数据 - 词袋模型(简单示例)

from sklearn.feature_extraction.text import CountVectorizer

texts = ["I love Python", "Python is great", "I like programming"]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
print("词袋模型矩阵:", X.toarray())
print("词汇表:", vectorizer.vocabulary_)

使用 CountVectorizer 构建词袋模型,将文本数据转换为向量形式,这在自然语言处理中经常用到。

24. 使用朴素贝叶斯算法进行文本分类(简单示例)

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB

newsgroups_data = fetch_20newsgroups(subset='train')
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(newsgroups_data.data)
y = newsgroups_data.target
model = MultinomialNB()
model.fit(X, y)
test_data = ["This is a computer science article"]
test_X = vectorizer.transform(test_data)
print("预测类别:", model.predict(test_X)[0])

结合文本数据处理和朴素贝叶斯算法进行简单的文本分类任务。

25. 深度学习示例 - 使用 Keras 构建简单神经网络(手写数字识别)

import numpy as np
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import to_categorical

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape((-1, 784)) / 255.0
x_test = x_test.reshape((-1, 784)) / 255.0
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

model = Sequential()
model.add(Dense(64, activation='relu', input_dim=784))
model.add(Dense(10, activation='softmax'))

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5, batch_size=32)
loss, accuracy = model.evaluate(x_test, y_test)
print("测试准确率:", accuracy)

使用 Keras 构建一个简单的神经网络来识别手写数字,包括数据预处理、模型构建、编译和训练评估。

26. 深度学习中的数据增强(以图像数据为例)

import numpy as np
from keras.preprocessing.image import ImageDataGenerator
from keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
datagen = ImageDataGenerator(rotation_range=10, width_shift_range=0.1, height_shift_range=0.1)
augmented_data = datagen.flow(x_train, y_train, batch_size=32)
for i in range(5):
    batch_x, batch_y = next(augmented_data)
    print("增强后的数据批次形状:", batch_x.shape)

在深度学习中,数据增强可以增加数据量和多样性。这里以 MNIST 图像数据为例,使用 ImageDataGenerator 对数据进行旋转和平移等增强操作。

27. 使用 TensorFlow 构建简单的线性回归模型

import tensorflow as tf

x = tf.constant([[1], [2], [3], [4], [5]], dtype=tf.float32)
y = tf.constant([2, 4, 6, 8, 10], dtype=tf.float32)
weights = tf.Variable(tf.random.normal([1, 1]))
bias = tf.Variable(tf.zeros([1]))
learning_rate = 0.01

for i in range(100):
    with tf.GradientTape() as tape:
        predictions = tf.matmul(x, weights) + bias
        loss = tf.reduce_mean(tf.square(predictions - y))
    gradients = tape.gradient(loss, [weights, bias])
    weights.assign_sub(learning_rate * gradients[0])
    bias.assign_sub(learning_rate * gradients[1])

print("训练后的权重:", weights.numpy())
print("训练后的偏差:", bias.numpy())

使用 TensorFlow 实现简单的线性回归模型,通过梯度下降算法训练模型的权重和偏差。

28. 使用 PyTorch 构建简单的神经网络(以线性回归为例)

import torch
import torch.nn as nn
import torch.optim as optim

x = torch.tensor([[1], [2], [3], [4], [5]], dtype=torch.float32)
y = torch.tensor([2, 4, 6, 8, 10], dtype=torch.float32)
model = nn.Linear(1, 1)
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

for epoch in range(100):
    optimizer.zero_grad()
    outputs = model(x)
    loss = criterion(outputs, y)
    loss.backward()
    optimizer.step()

print("训练后的权重:", model.weight.data)
print("训练后的偏差:", model.bias.data)

使用 PyTorch 构建线性回归模型,包括定义模型、损失函数和优化器,并进行训练。

29. 超参数调整(以 K - Nearest Neighbors 算法为例)

from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV

iris = load_iris()
parameters = {'n_neighbors': [1, 3, 5, 7]}
knn = KNeighborsClassifier()
grid_search = GridSearchCV(knn, parameters, cv=5)
grid_search.fit(iris.data, iris.target)
print("最佳参数:", grid_search.best_params_)
print("最佳得分:", grid_search.best_score_)

通过 GridSearchCV 对 K - Neighbors Neighbors 算法的 n_neighbors 参数进行调整,找到最佳参数组合以提高模型性能。

30. 模型融合(以投票法为例)

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import VotingClassifier
from sklearn.model_selection import train_test_split

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2)

# 定义三个不同的基模型
clf1 = LogisticRegression()
clf2 = DecisionTreeClassifier()
clf3 = KNeighborsClassifier()

# 使用投票法融合模型
voting_clf = VotingClassifier(estimators=[('lr', clf1), ('dt', clf2), ('knn', clf3)], voting='hard')
voting_clf.fit(X_train, y_train)
print("模型融合后的预测准确率:", voting_clf.score(X_test, y_test))

此例展示了模型融合的一种方法 —— 投票法。通过将逻辑回归、决策树和 K - 近邻这三个不同的模型进行融合,综合它们的预测结果来提高整体的预测准确率。在实际应用中,模型融合可以发挥各个模型的优势,提升模型的泛化能力和稳定性。

结束语

以上30 例 Python 源代码只是 Python 编程世界中的冰山一角,但它们涵盖了从基础语法到高级应用如爬虫和机器学习等重要领域。背诵这些代码并不是目的,而是一种手段。通过理解和记忆这些代码,你可以深入掌握 Python 的编程思想和技巧,能够在实际项目中迅速找到解决方案的灵感。无论是应对日常的数据处理任务,还是深入探索人工智能的前沿领域,这些代码都将成为你编程之旅中的得力助手。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言