跟着我学Python进阶篇:01.试用Python完成一些简单问题
往期文章
跟着我学Python基础篇:01.初露端倪
跟着我学Python基础篇:02.数字与字符串编程
跟着我学Python基础篇:03.选择结构
跟着我学Python基础篇:04.循环
跟着我学Python基础篇:05.函数
跟着我学Python基础篇:06.列表
跟着我学Python基础篇:07.文本
跟着我学Python基础篇:08.集合和字典
目录
- 往期文章
- 前言
- 1. 图形:简单绘图
- 1.1 创建窗口
- 1.2 线和多边形
- 2. 使用Sympy进行符号处理
- 2.1 操作表达式
- 2.1.1化简表达式
- 2.1.2 展开表达式
- 2.1.3 因式分解表达式
- 2.1.4 求导数
- 2.1.5 求积分
- 2.2 求解方程
- 2.2.1 求解一元方程
- 2.2.2求解多元方程
- 2.2.3 求解高阶多项方程
- 2.2.4 求解三角方程
- 2.2.5 求解指数方程
- 2.3 画函数图像
- 3. 随机数的生成和模拟
- 3.1 模拟掷骰子
- 3.2 模拟打靶
- 3.3 生成随机密码
前言
在基础篇,我们已经掌握了Python中的一些基础的语法规则,那么在进阶篇中,我们将在更深度一些的层次上,去学习和了解Python。
1. 图形:简单绘图
matplotlib是一个用于创建高质量图形的Python库。它可以用于绘制各种类型的图形,包括线图、散点图、条形图、直方图、饼图等。matplotlib提供了丰富的图形定制选项,允许用户自定义各种元素,如标签、标题、轴标签、颜色、线型等。此外,matplotlib还可以与numpy、pandas等其他Python库一起使用,以便更轻松地处理和可视化数据。
1.1 创建窗口
import matplotlib.pyplot as plt# 创建一个图形窗口
fig = plt.figure()# 可选:设置窗口的大小和标题
fig.set_size_inches(6, 4) # 设置窗口大小为6x4英寸
fig.suptitle('My Window') # 设置窗口标题# 显示窗口
plt.show()
我们首先使用plt.figure()创建了一个图形窗口对象fig。然后,我们可以使用fig.set_size_inches()和fig.suptitle()来设置窗口的大小和标题。
1.2 线和多边形
import matplotlib.pyplot as plt# 创建一个图形窗口
fig = plt.figure()# 可选:设置窗口的大小和标题
fig.set_size_inches(6, 4) # 设置窗口大小为6x4英寸
fig.suptitle('My Window') # 设置窗口标题# 绘制折线图
x = [1, 2, 3, 4, 5]
y = [5, 4, 3, 2, 1]
plt.plot(x, y)# 显示窗口
plt.show()
我们首先创建了一个图形窗口,并设置了窗口的大小和标题。然后使用plt.plot()函数绘制了一个折线图,最后使用plt.show()函数显示图形窗口。你可以根据需要在窗口中绘制不同类型的图形。
import matplotlib.pyplot as plt# 数据
x = ['A', 'B', 'C', 'D']
y = [10, 15, 7, 12]# 创建一个图形窗口
fig = plt.figure()# 绘制柱状图
plt.bar(x, y)# 显示图形
plt.show()
我们定义了两个列表x和y,分别表示柱状图的横轴和纵轴数据。然后创建一个图形窗口,使用plt.bar()函数绘制柱状图。最后使用plt.show()函数显示图形窗口。
import matplotlib.pyplot as plt# 数据
x = ['A', 'B', 'C', 'D']
y = [10, 15, 7, 12]# 颜色
colors = ['red', 'green', 'blue', 'orange']# 创建一个图形窗口
fig = plt.figure()# 绘制柱状图并填充颜色
plt.bar(x, y, color=colors)# 显示图形
plt.show()
定义了一个colors列表,其中每个元素对应柱状图中每个柱子的颜色。然后创建一个图形窗口,使用plt.bar()函数绘制柱状图,并通过color参数指定填充颜色。最后使用plt.show()函数显示图形窗口。你可以根据实际需求调整x、y和colors的值,以及使用其他参数来自定义柱状图的样式,如宽度、边框颜色等。
2. 使用Sympy进行符号处理
sympy包提供了大量的函数可以计算更多公式的值,包括微积分。让我们来感受一下。
2.1 操作表达式
2.1.1化简表达式
`Sympy可以将表达式自动化简为最简形式。以下是一个例子:
import sympy# 定义符号变量x和y
x, y = sympy.symbols('x y')# 定义表达式
expr = 2*x + x - x**2# 化简表达式
simplified_expr = sympy.simplify(expr)# 输出化简后的表达式
print(simplified_expr)
在这个例子中,我们定义了一个表达式2*x + x - x**2,使用sympy.simplify()函数将其化简为最简形式,并将结果存储在变量simplified_expr中。最后,我们使用print()函数输出化简后的表达式。
2.1.2 展开表达式
Sympy可以将表达式展开为多项式。以下是一个例子:
import sympy# 定义符号变量x和y
x, y = sympy.symbols('x y')# 定义表达式
expr = (x + y)**2# 展开表达式
expanded_expr = sympy.expand(expr)# 输出展开后的表达式
print(expanded_expr)
在这个例子中,我们定义了一个表达式(x + y)**2,使用sympy.expand()函数将其展开为多项式,并将结果存储在变量expanded_expr中。最后,我们使用print()函数输出展开后的表达式。
2.1.3 因式分解表达式
将表达式因式分解为乘积形式。以下是一个例子:
import sympy# 定义符号变量x和y
x, y = sympy.symbols('x y')# 定义表达式
expr = x**2 - y**2# 因式分解表达式
factored_expr = sympy.factor(expr)# 输出因式分解后的表达式
print(factored_expr)
在这个例子中,我们定义了一个表达式x2 - y2,使用sympy.factor()函数将其因式分解为x + y)*(x - y)的乘积形式,并将结果存储在变量actored_expr中。最后,我们使用print()函数输出因式分解后的表达式。
2.1.4 求导数
Sympy
可以对表达式求导数。以下是一个例子:
import sympy# 定义符号变量x和y
x, y = sympy.symbols('x y')# 定义表达式
expr = x**3 + 2*x**2 + x# 对表达式求导
derivative_expr = sympy.diff(expr, x)# 输出求导后的表达式
print(derivative_expr)
在这个例子中,我们定义了一个表达式x3 + 2*x2 + x,使用sympy.diff()函数对其求导,并将结果存储在变量derivative_expr中。最后,我们使用print()函数输出求导后的表达式。
2.1.5 求积分
import sympy# 定义符号变量x和y
x, y = sympy.symbols('x y')# 定义表达式
expr = x**3 + 2*x**2 + x# 对表达式求积分
integral_expr = sympy.integrate(expr, x)# 输出求积分后的表达式
print(integral_expr)
在这个例子中,我们定义了一个表达式x3 + 2*x2 + x,使用sympy.integrate()函数对其求积分,并将结果存储在变量integral_expr中。最后,我们使用print()函数输出求积分后的表达式。
2.2 求解方程
2.2.1 求解一元方程
import sympy# 定义符号变量x
x = sympy.symbols('x')# 定义方程
equation = sympy.Eq(x**2 - 4, 0)# 求解方程
solutions = sympy.solve(equation, x)# 输出方程的解
print(solutions)
我们定义了一个一元方程x**2 - 4 = 0,使用sympy.solve()函数来求解方程,并将结果存储在变量solutions中。最后,我们使用print()函数输出方程的解。
2.2.2求解多元方程
import sympy# 定义符号变量x和y
x, y = sympy.symbols('x y')# 定义方程组
equations = [sympy.Eq(x + y, 5),sympy.Eq(2*x - y, 1)
]# 求解方程组
solutions = sympy.solve(equations, (x, y))# 输出方程组的解
print(solutions)
我们定义了一个多元方程组,包含两个方程x + y = 5和2*x - y = 1。我们使用sympy.solve()函数来求解方程组,并将结果存储在变量solutions中。最后,我们使用print()函数输出方程组的解。
2.2.3 求解高阶多项方程
import sympy# 定义符号变量x
x = sympy.symbols('x')# 定义高阶多项式方程
equation = x**4 - 6*x**3 + 11*x**2 - 6*x# 求解方程
solutions = sympy.solve(equation, x)# 输出方程的解
print(solutions)
高阶多项式方程x4 - 6*x3 + 11x**2 - 6x,使用sympy.solve()函数求解方程,并将结果存储在变量solutions中。最后,我们使用print()函数输出方程的解。
2.2.4 求解三角方程
import sympy# 定义符号变量x
x = sympy.symbols('x')# 定义三角方程
equation = sympy.sin(x) - sympy.cos(x)# 求解方程
solutions = sympy.solve(equation, x)# 输出方程的解
print(solutions)
我们定义了一个三角方程sin(x) - cos(x),使用sympy.solve()函数求解方程,并将结果存储在变量solutions中。最后,我们使用print()函数输出方程的解。
2.2.5 求解指数方程
import sympy# 定义符号变量x
x = sympy.symbols('x')# 定义指数方程
equation = sympy.exp(x) - 2**x# 求解方程
solutions = sympy.solve(equation, x)# 输出方程的解
print(solutions)
2.3 画函数图像
import sympy
from sympy.plotting import plot# 定义符号变量x
x = sympy.symbols('x')# 定义函数
f = x**2# 绘制函数图像
p = plot(f, (x, -5, 5), show=False)# 设置标题和坐标轴标签
p.title = 'Function Graph'
p.xlabel = 'x'
p.ylabel = 'y'# 显示图像
p.show()
我们定义了一个函数f(x) = x**2,使用sympy库的plot()函数来绘制函数的图像。第一个参数是要绘制的函数,第二个参数是函数自变量的范围。plot()函数还有许多其他参数可以用来定制图像,例如线条颜色、线条样式等。
最后,我们设置了标题和坐标轴标签,并使用show()函数显示图像。
注意,sympy库的绘图功能相对于专业的绘图库可能较为简单,因此对于绘制复杂的图像,建议使用更专业的绘图库,例如matplotlib。
3. 随机数的生成和模拟
3.1 模拟掷骰子
import pygame
import sys
import random
import timepygame.init()WINDOW_SIZE = (400, 400)
screen = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption("Rolling Dice Animation")DICE_POINTS = {1: [(200, 200)],2: [(170, 170), (230, 230)],3: [(170, 170), (200, 200), (230, 230)],4: [(170, 170), (230, 230), (170, 230), (230, 170)],5: [(170, 170), (230, 230), (170, 230), (230, 170), (200, 200)],6: [(170, 170), (230, 230), (170, 230), (230, 170), (170, 200), (230, 200)],
}def draw_dice(number):screen.fill((255, 255, 255))pygame.draw.rect(screen, (0, 0, 0), (150, 150, 100, 100))for point in DICE_POINTS[number]:pygame.draw.circle(screen, (255, 0, 0), point, 10)pygame.display.flip()def roll_dice_animation():current_number = 1for _ in range(30):draw_dice(current_number)current_number = random.randint(1, 6)time.sleep(0.1)return current_numberdef main():while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()result = roll_dice_animation()print(f"Dice rolled: {result}")time.sleep(1) # 停留一秒,显示掷出的点数if __name__ == "__main__":main()
3.2 模拟打靶
import pygame
import sys
import randompygame.init()WINDOW_SIZE = (400, 400)
screen = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption("Target Shooting Simulation")TARGET_RADIUS = 50 # 调整靶子半径
TARGET_COLOR = (255, 0, 0)
BACKGROUND_COLOR = (255, 255, 255)shots = []def draw_target():pygame.draw.circle(screen, TARGET_COLOR, (200, 200), TARGET_RADIUS)def draw_shots():for shot in shots:pygame.draw.circle(screen, (0, 255, 0), shot[0], 5)font = pygame.font.Font(None, 36)text = font.render(str(shot[1]), True, (0, 255, 0))screen.blit(text, (shot[0][0] - 10, shot[0][1] - 20))def calculate_score(distance):max_distance = TARGET_RADIUSmin_distance = 0normalized_distance = max(0, min((max_distance - distance) / max_distance, 1))score = int(normalized_distance * 10)return scoredef main():clock = pygame.time.Clock()while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: # 左键点击mouse_x, mouse_y = pygame.mouse.get_pos()distance = ((mouse_x - 200) ** 2 + (mouse_y - 200) ** 2) ** 0.5if distance <= TARGET_RADIUS:score = calculate_score(distance)print(f"Hit! Score: {score}")shots.append(((mouse_x, mouse_y), score))screen.fill(BACKGROUND_COLOR)draw_target()draw_shots()pygame.display.flip()clock.tick(60)if __name__ == "__main__":main()
3.3 生成随机密码
import random
import stringdef generate_password(length=12):characters = string.ascii_letters + string.digits + string.punctuationpassword = ''.join(random.choice(characters) for _ in range(length))return password# 生成一个默认长度为12的密码
password = generate_password()
print("Generated Password:", password)
相关文章:

跟着我学Python进阶篇:01.试用Python完成一些简单问题
往期文章 跟着我学Python基础篇:01.初露端倪 跟着我学Python基础篇:02.数字与字符串编程 跟着我学Python基础篇:03.选择结构 跟着我学Python基础篇:04.循环 跟着我学Python基础篇:05.函数 跟着我学Python基础篇&#…...
neo4j-Py2neo使用
neo4j-Py2neo(一):基本库介绍使用 py2neo的文档地址:https://neo4j-contrib.github.io/py2neo/ py2neo的本质是可以采用两种方式进行操作,一种是利用cypher语句,一种是使用库提供的DataTypes,Data类的实例需要和远程…...

uint29传输格式
前言 不知道谁想出来的。 反正我是想不到。 我看网上也没人讲这个。 写篇博客帮一下素未谋面的网友。 uint29 本质上是网络传输的时候,借用至多4字节Bytes,表达29位的无符号整数。 读8位数字,判断小于128? 是的话,返回末7位…...

Linux:终端定时自动注销
这样防止了,当我们临时离开电脑这个空隙,被坏蛋给趁虚而入 定几十秒或者分钟,如果这个时间段没有输入东西那么就会自动退出 全局生效 这个系统中的所有用户生效 vim /etc/profile在末尾加入TMOUT10 TMOUT10 这个就是10 秒,按…...

STM32F103RCT6开发板M3单片机教程06--定时器中断
前言 除非特别说明,本章节描述的模块应用于整个STM32F103xx微控制器系列,因为我们使用是STM32F103RCT6开发板是mini最小系统板。本教程使用是(光明谷SUN_STM32mini开发板) STM32F10X定时器(Timer)基础 首先了解一下是STM32F10X…...

数据库故障Waiting for table metadata lock
场景:早上来发现一个程序,链接mysql数据库有点问题,随后排查,因为容器在k8s里面。所以尝试重启了pod没有效果 一、重启pod: 这里是几种在Kubernetes中重启Pod的方法: 删除Pod,利用Deployment重建 kubectl delete pod mypodDepl…...

Springboot数据校验与异常篇
一、异常处理 1.1Http状态码 HTTP状态码是指在HTTP通信过程中,服务器向客户端返回的响应状态。它通过3位数字构成,第一个数字定义了响应的类别,后两位数字没有具体分类作用。以下是常见的HTTP状态码及其含义: - 1xx(信…...
第三十六章 XML 模式的高级选项 - 创建子类型的替换组
文章目录 第三十六章 XML 模式的高级选项 - 创建子类型的替换组创建子类型的替换组将子类限制在替换组中 第三十六章 XML 模式的高级选项 - 创建子类型的替换组 创建子类型的替换组 XML 模式规范还允许定义替换组,这可以是创建选择的替代方法。语法有些不同。无需…...

堆与二叉树(上)
本篇主要讲的是一些概念,推论和堆的实现(核心在堆的实现这一块) 涉及到的一些结论,证明放到最后,可以选择跳过,知识点过多,当复习一用差不多,如果是刚学这一块的,建议打…...
HBase查询的一些限制与解决方案
Apache HBase 是一个开源的、非关系型、分布式数据库,它是 Hadoop 生态系统的一部分,用于存储和处理大量的稀疏数据。HBase 在设计上是为了提供快速的随机读写能力,但与此同时,它也带来了一些查询上的限制: 没有SQL支持…...
软件开发 VS Web开发
我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 目录 介绍: 角色和职责: 软件开发人员: Web开发人员: 技能: 软件开发人员: Web开发人…...

基于Springboot的旅游网站设计与实现(论文+调试+源码)
项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…...

【从零开始学习--设计模式--策略模式】
返回首页 前言 感谢各位同学的关注与支持,我会一直更新此专题,竭尽所能整理出更为详细的内容分享给大家,但碍于时间及精力有限,代码分享较少,后续会把所有代码示例整理到github,敬请期待。 此章节介绍策…...

条款6:若不想使用编译器自动生成的函数,就该明确拒绝
有些场景我们不需要编译器默认实现的构造函数,拷贝构造函数,赋值函数,这时候我们应该明确的告诉编译器,我们不需要,一个可行的方法是将拷贝构造函数和赋值函数声明为private。 class HomeForSale { ... }; HomeForSal…...

零基础也能制作家装预约咨询小程序
近年来,随着互联网的快速发展,越来越多的消费者倾向于使用手机进行购物和咨询。然而,许多家装实体店却发现自己的客流量越来越少,急需一种新的方式来吸引顾客。而开发家装预约咨询小程序则成为了一种利用互联网技术来解决这一问题…...

Mybatis的插件运⾏原理,如何编写⼀个插件?
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…...
C++复合数据类型:字符数组|读取键盘输入|简单读写文件
文章目录 字符数组(C风格字符串)读取键盘输入使用输入操作符读取单词读取一行信息getline使用get读取一个字符 读写文件 字符数组(C风格字符串) 字符串就是一串字符的集合,本质上其实是一个“字符的数组”。 在C中为了…...

Windows11环境下配置深度学习环境(Pytorch)
目录 1. 下载安装Miniconda2. 新建Python3.9虚拟环境3. 下载英伟达驱动4. 安装CUDA版Pytorch5. CPU版本pytorch安装6. 下载并配置Pycharm 1. 下载安装Miniconda 下载安装包:镜像文件地址 将Miniconda相关路径添加至系统变量的路径中。 打开Anaconda Powershell Pr…...

泛型深入理解
泛型的概述 泛型:是JDK5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检查。 泛型的格式:<数据类型>; 注意:泛型只能支持引用数据类型。 集合体系的全部接口和实现类都是支持泛型的使用的。 泛型的…...

Linux内核模块
文章目录 一、内核模块介绍二、模块讲解1、最简模块代码:2、模块三要素3、常用操作命令3.1、 lsmod:显示已加载模块状态3.2、 insmod:载入模块3.3、rmmod:卸载模块3.4、dmesg:显示信息3.5、modinfo:显示ker…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...