原文:AskPython Blog
协议:CC BY-NC-SA 4.0
原文:https://www.askpython.com/python/examples/depth-first-iterative-deepening-dfid
你好读者,这篇文章让我们了解了到底什么是深度优先迭代深化(DFID)也称为迭代深化搜索(IDS)。它的优点、应用和 python 实现。
深度优先迭代深化是一种迭代搜索技术,结合了深度优先搜索 (DFS)和广度优先搜索 (BFS)的优点。
当搜索图形表示中的特定节点时,广度优先搜索需要大量空间,因此增加了空间复杂度,深度优先搜索花费更多的时间,因此这种搜索策略具有更多的时间复杂度,并且深度优先搜索不总是找到最便宜的路径。为了克服深度优先搜索和宽度优先搜索的所有这些缺点,实现了深度优先迭代深化搜索。
DFID 会先扩展给定深度的所有节点,然后再扩展更深的任何节点。这样就保证了找到从起点到目标状态的最短路径或最优解。DFID 算法的工作原理如图所示
Dfid
在任何给定时间,它都在执行 DFS,并且从不搜索深度超过“d”的内容。因此,它使用的空间是 O(d)。DFID 的缺点是它在到达目标深度之前执行了浪费的合成。
- 输入:开始和目标状态
- 局部变量:找到
- 方法
- 初始化 d = 1,发现=假
- while (FOUND = False) do
- 从起点到深度 d 执行 DFS。
- 如果获得了目标状态,则发现=真,否则丢弃在深度 d 的搜索中生成的节点。
- d = d + 1
- 如果 FOUND = true,则返回深度。
- 停止
实施图
DFIDS 的功能
深度优先迭代深化搜索用于为给定的问题陈述寻找最优解或最适合的路径。当提供大的状态空间并且没有提及关于解的深度的信息时,优选使用这种搜索策略。以下是 DFIDS 的一些应用
- 人工智能和数据科学-分析网络
- 用独特的解决方案解谜(例如:数独)
- 检测图中的圈。
- 排序有向无环图
- n 皇后问题
在本文中,我们深入研究了深度优先迭代深化搜索,它的重要性和它的实现。
原文:https://www.askpython.com/python/examples/depth-first-search-algorithm
亲爱的读者,在本文中,我将带你了解深度优先搜索(DFS)的概念。这是一个图的概念,是很多竞争性编码考试中常见的问题。因此,让我们看看如何使用 Python 创建一个 DFS 遍历。
深度优先搜索是一种利用堆栈数据结构遍历图形和树的算法。深度优先搜索的概念来源于“深度”这个词。该树遍历到一个分支的深度,然后返回到其余的节点。
考虑一个空的“堆栈”,它包含每次迭代访问的节点。我们在这里的任务如下:
- 从根节点开始,将其推送到堆栈上。
- 检查树的任何相邻节点,并选择一个节点。
- 遍历所选节点的整个分支,并将所有节点推入堆栈。
- 在到达分支的末端(没有更多相邻节点)即第 n 个叶节点时,向后移动一步并寻找第 n-1 个节点的相邻节点。
- 如果第 n-1 个节点有相邻的节点,则遍历这些分支并将节点推送到堆栈上。
让我们看看下面的示例图:
Example Graph
是根节点。既然 A 被访问了,我们就把它推到堆栈上。
我们转到分支 A-B,B 没有被访问,所以我们转到 B,把 B 推送到栈上。
现在,我们已经到达 A-B 分支的末尾,我们移动到第 n-1 个节点 A。我们现在将查看 A 的相邻节点 S。访问 S 并将其推送到堆栈上。现在,您必须遍历 S-C-D 分支,直到深度即到达 D,并将 S、C、D 标记为已访问。
因为 D 没有其他相邻节点,所以移回 C,遍历其相邻分支 E-H-G 到深度,并将它们推送到堆栈上。
到达 D 时,只有一个相邻节点 ie F 没有被访问。把 F 也推到堆栈上。
这个堆栈本身就是 DFS 的遍历。
你一定知道,有很多方法来表示一个图,也就是邻接表和邻接矩阵。
所以在下面的例子中,我为图中的每个节点定义了一个邻接表。
注意:这个邻接表可以由用户输入,不需要硬编码。
现在,我们将定义我们的 DFS 函数,它接受 3 个参数作为输入——图(邻接表)、一个节点和一个被访问节点的列表。
如果当前节点未被访问,即不在已访问列表中,将其标记为已访问,并将其添加到已访问列表中。
移动到下一个节点,然后递归地将这个节点传递给 DFS 函数。这样,每个节点移动到一定深度,并将其打印为 DFS 输出。
上述代码的输出如下:
我希望你已经学习了这篇关于 DFS 算法的教程,并且能够理解代码和例子。一定要用你身边的纸和笔来尝试,以便更好地理解这些遍历。
原文:https://www.askpython.com/python/examples/depth-first-search-in-a-graph
深度优先搜索是一种遍历技术,在这种技术中,我们遍历一个图并精确地打印一次顶点。在本文中,我们将研究并实现 python 中遍历图的深度优先搜索。
推荐阅读:用 Python 实现一个图
在深度优先搜索中,我们从任意一个顶点开始,遍历图中的每个顶点一次。对于每个选定的顶点,我们首先打印该顶点,然后移动到它的一个邻居,打印它,然后移动到它的一个邻居,依此类推。这个过程一直持续到遍历完所有顶点。当使用深度优先搜索遍历一个图时,看起来我们是在从所选顶点开始遍历所有顶点的路径上移动。
从下面的例子可以清楚地理解这一点。
Graph Implementation In Python- Askpython
如果我们从 0 开始以深度优先的方式访问上图,我们将按照 0 –> 3 –> 4 –> 5 –> 2 –> 1 的顺序处理顶点。也可能有替代遍历。如果我们在 3 之前处理 1,而我们在 0,那么图的 BFS 遍历将看起来像:0 –> 1 –> 3-> 4-> 2-> 5。
由于我们对深度优先搜索有了一个总体的概念,我们现在将为图的 DFS 遍历制定算法。这里,我们将假设图的所有顶点都可以从起始顶点到达。
假设我们已经得到了一个邻接表表示的图和一个起始顶点。现在我们必须以深度优先搜索的方式遍历图形。
我们将首先打印起始顶点的值,然后我们将移动到它的一个邻居,打印它的值,然后移动到它的一个邻居,等等,直到图形的所有顶点都被打印出来。
因此,我们的任务是打印图的顶点,从第一个顶点开始,直到每个顶点都按顺序遍历。为了实现这个概念,我们将使用后进先出技术,即堆栈来处理图形。此外,我们将使用一个访问过的顶点列表来检查顶点是否在过去被遍历过,这样就不会有顶点被打印两次。
我们将打印一个顶点,将其添加到访问过的顶点列表中,并将其邻居放入堆栈中。然后,我们会从栈中一个一个的取出顶点,打印出来后添加到访问过的列表中,然后我们会把它们的邻居放入栈中。下面是描述整个过程的图的深度优先搜索遍历算法。
现在我们已经熟悉了这些概念和算法,我们将实现图的深度优先搜索算法,然后我们将执行上面例子中给出的图的算法。
输出:
如果你还不能理解代码的执行,这里有一个修改的 DFS 算法解释每一步。
输出:
在本文中,我们看到了图的深度优先搜索遍历算法背后的基本概念,设计了算法,然后用 python 实现了它。请继续关注更多内容丰富的文章。
原文:https://www.askpython.com/python/examples/depth-map-stereo-images
在本教程中,我们将看看如何使用 OpenCV 包在 Python 中从立体图片制作深度图。但首先,让我们掌握一下立体图片和图像深度的概念。
当我们走路或跑步时,我们观察到离我们近的物体比离我们远的物体移动得快。这种潜在的效应被称为“视差”
这种现象可以用来从任何景象获得几何信息。我们可以从不同的角度,从同一个竞技场的许多照片中估计各种各样的事情,其中之一是组件的空隙。
这个距离被称为图像的深度,这些图片被称为立体图像。我们现在可以通过研究这些渲染图之间的点的跨度来确定这些区域与相机的距离。
让我们从导入用例所需的库开始。我们将使用 numpy 库、 OpenCV 和 matplotlib 进行绘图。
现在让我们加载立体图像。
Stereo Image 1
Stereo Image 2
将使用方法来生成深度图。我们可以根据需要调整设置。numDisparities 接受最大为 255(可被 16 整除)的数字,但 blockSize 接受最大为 25 的值。
Depthmap Image Output
我们可以使用深度图来计算深度。这包括相机安排和他们与图片差异的相互作用。这超出了本教程的范围,因此我们不能继续下去。
这就完成了关于如何使用 OpenCV 在 Python 中从立体图片构建深度图的教程。由于您必须通过分析选择适当的地图参数,因此大部分工作仍由您来完成。
恭喜你!您刚刚学习了如何使用 OpenCV 包在 Python 中从立体图片制作深度图。希望你喜欢它!😇
喜欢这个教程吗?无论如何,我建议你看一下下面提到的教程:
- 使用直方图可视化图像中的颜色–Python OpenCV
- 使用 OpenCV 绘制形状——完整的操作指南
- 使用网络摄像头和 Python OpenCV[简易指南]进行实时素描
- 使用 OpenCV 的 Python 信用卡读卡器
感谢您抽出时间!希望你学到了新的东西!!😄
原文:https://www.askpython.com/python/examples/derivatives-in-python-sympy
Python 中如何计算导数?在本文中,我们将使用 Python SymPy 库来研究衍生品。
导数是微积分的基本工具。这对于优化带有梯度下降的损失函数非常有用在机器学习中仅仅因为导数才成为可能。
假设我们有一个依赖于 x 的函数 y = f(x ),那么这个函数的求导意味着函数值 y 随着 x 的变化而变化的速率。
这绝不是一篇关于衍生品基本面的文章,不可能。微积分是一种不同的野兽,需要特别注意。我想你对微积分有一定的了解。本文旨在演示如何使用 Sympy 库来区分函数。
Python SymPy 库是为符号数学而创建的。SymPy 项目旨在成为一个全功能的计算机代数系统(CAS),同时保持代码简单易懂。让我们看看如何使用 SymPy 在 Python 中计算导数。
1.使用 PIP 安装 SymPy
SymPy 的用途不仅仅是计算导数,但现在,我们将专注于导数。让我们使用 PIP 来安装 SymPy 模块。
2.用 SymPy diff()求解微分
对于微分,SymPy 为我们提供了方法来输出函数的导数。
- 假设我们有一个函数: f ( x ) = x
- 函数 w.r.t x 的导数: f’(x) = 2x
让我们看看如何使用 SymPy diff()函数来实现这一点。
声明一个符号类似于说我们的函数有一个变量’ x '或者简单地说函数依赖于 x。
3.用 Python 求解导数
SymPy 有函数来计算接受符号和函数作为参数的函数的导数。让我们看一个用辛比函数计算导数的例子。
输出:4
我们可以用某些规则来计算可微函数的导数。
一些最常见的规则是:
- 权力规则
- 乘积规则
- 链式法则
- 商数法则
让我们深入研究如何实际使用 sympy 来计算一般微分规则所隐含的导数。
1.权力规则
一般情况下:f’(x^n ) = nx^((n-1))
举个例子,我们有这样一个函数:f(x) = x⁵
它的导数将是:f '(x)= 5x^((5-1))= 5x⁴
Power Rule Output
2.乘积规则
设 u(x)和 v(x)是可微函数。那么函数 u(x)v(x)的乘积也是可微的。
例如:f(x) = exp(x)*cos(x)
Product Rule Output
3.链式法则
链式法则计算函数合成的导数。
- 比方说,我们有一个函数 h(x) = f( g(x))
- 然后根据链式法则:h′(x)= f′(g(x))g′(x)
- 例如:f(x) = cos(x2)
这个过程也可以推广到商法则。现在很明显,只有函数发生了变化,而应用程序流程保持不变,剩下的由库自己处理。
Chain Rule Output
我们上面看到的例子只有一个变量。但是我们更有可能遇到不止一个变量的函数。这种导数通常被称为偏导数。
多变量函数的偏导数是在所有其他变量保持不变的情况下对一个变量的导数。
举例:
我们来部分区分一下 Python w.r.t x 中的上述导数。
Partial Differentiation w.r.t X
当变量个数大于 1 时,我们使用方法。现在,对 Python 中的导数进行部分 w . r . t . y .微分
Partial Differentiation w.r.t Y
代码完全相似,但是现在 y 作为输入参数被传递到方法中。
我们可以选择先对函数 w . r . t . x,再对 y,进行部分求导。
Partial Differentiation w.r.t X And Y
这篇文章绝不是一门关于导数或如何用 Python 求解导数的课程,而是一篇关于如何利用 python SymPy 包对函数进行微分的文章。衍生品是令人敬畏的,你肯定应该得到它背后的想法,因为它们在机器学习和其他领域发挥着至关重要的作用。
- Python 中的微积分
- NumPy 线性代数
- Python 线性回归
- Python 中的 3D 绘图
- Python 熊猫教程
- SymPy 官方页面
- 衍生品维基百科页面
原文:https://www.askpython.com/python-modules/detecting-corners-in-python-opencv
嘿伙计们!在本教程中,我们将教你如何使用 Python 的 OpenCV 包来识别图像中的角点。OpenCV 中的算法可用于检测图像中的角点。
拐角是在其局部附近具有两个主导的和相对的边缘方向的位置。换句话说,角可以定义为两条边的交点,其中一条边代表图像亮度的急剧变化。
CornerDetect Demo
角点是图像中最重要的部分,它们有时被称为兴趣点,因为它们对平移、旋转和光照不敏感。
步骤 1:导入所有必需的模块/库
步骤 2:加载图像并转换成灰度图像
下一步涉及使用 cv2.imread 函数加载图像,该函数将采用需要加载的图像的路径。为了使处理更容易,我们将使用 cv2.cvtColor 函数将图像转换为灰度图像。
我们将借助 matplotlib 库的 plt.imshow 方法来显示图像。
Sample Shape CornerDetection
步骤 3:检测图像的角点
Shi-Tomasi 方法被cv2 . goodfeaturestotrack()函数用来确定图像中 N 个最强的角。
步骤 4:绘制角点
在每个角落,我们的目标是使用下面提到的代码片段绘制一个简单的红点。并在最后部分绘制最终的角点检测图像。
Detect Cornes Output 1
Detect Cornes Output 2
恭喜你!您刚刚学习了如何使用 OpenCV 构建 python 程序来检测图像的角点。希望你喜欢它!😇
喜欢这个教程吗?无论如何,我建议你看一下下面提到的教程:
- Python 中的球体特征检测
- 使用 Python 进行颜色检测–初学者参考
- Python:检测轮廓
- 使用 Python 进行图像边缘检测
感谢您抽出时间!希望你学到了新的东西!!😄
原文:https://www.askpython.com/python/examples/detecting-parkinsons-disease
你好,学习伙伴!今天,我们正在使用 Python 基于一些预先获得的信息构建一个基本的 ML 模型来检测帕金森病。
因此,让我们首先了解帕金森病和我们将用于我们模型的数据集,可以在这里找到。我们将在我们的项目中使用文件。
帕金森病是一种中枢神经系统疾病,会影响身体的运动。到目前为止,这种疾病还没有切实可行的治疗方法。
任何项目的第一步都是将所有必要的模块导入我们的项目。我们需要一些基本模块,如 numpy 、 pandas 和 matplotlib 来分别准备、加载和绘制数据。
然后我们还需要一些 sklearn 模型和函数,用于训练和估计精度。最后但同样重要的是,我们将使用库。
XGBoost 库是一个基于决策树的梯度推进模型,旨在提高系统的速度和精度。
下一步是将我们之前下载的数据加载到与代码文件相同的文件夹中。同样,我们使用 pandas 模块,其代码如下所示。
程序的输出显示了数据集的前五行,该数据集总共由 24 列和 195 个数据点组成。下一步是将标签和数据相互分离。
下面提到了相同的代码。这里的标签列是状态列。
下一步是缩放-1 和+1 之间的所有数据点。我们将使用最小最大缩放器来转换特征,并将它们作为参数缩放到给定的范围。函数有助于拟合数据,然后对其进行转换/标准化。
不需要缩放标签,因为它们已经只有两个值,即 0 和 1。相同的代码如下所示。
下一步是根据 80-20 法则将数据分为训练和测试数据,其中 80%的数据用于训练,其余 20%用于测试。
我们将使用 sklearn 模块的函数来实现同样的功能。代码如下所述。
我们的数据现在已经准备好接受训练并适合 xbg 分类器。为此,我们将创建一个分类器对象,然后将训练数据放入分类器。
相同的代码如下所示。
输出显示了分类器的全部训练信息,现在我们准备好对测试数据进行预测,然后获得准确性。
下一步也是最后一步是获得测试数据集的预测,并估计我们模型的准确性。完成同样工作的代码如下所示。
运行代码后,我们知道这个模型已经超过了精度,这很好,对吗?!所以我们走吧!我们建立了自己的帕金森病分类器。
在本教程中,我们学习了如何根据各种因素检测个体中帕金森病的存在。
对于这个项目,我们使用 xgb 分类器进行快速准确的检测。模型给了我们超过的准确率,太棒了!
感谢您的阅读!
原文:https://www.askpython.com/python/examples/detection-removal-outliers-in-python
读者朋友们,你们好!在我们的数据处理和分析系列中,今天我们将看看 Python 中的异常值检测和移除。
所以,让我们开始吧!
在深入探讨离群值的概念之前,让我们先了解一下原始数据的来源。
提供给系统的原始数据通常是通过调查和从网络上的实时操作中提取数据而生成的。这可能引起数据的变化,并且在记录数据时存在测量误差的可能性。
这是离群值出现的时候。
离群值是远离数据集的其余数据值的一个点或一组数据点。也就是说,它是出现在数据集中数据值总体分布之外的数据点。
异常值只可能出现在连续值中。因此,异常值的检测和移除仅适用于回归值。
基本上,离群值似乎偏离了数据元素的整体适当且结构良好的分布。可以认为是出现在远离类别或总体的异常分布。
理解了离群值的概念后,现在让我们在接下来的小节中关注删除离群值的需要。
如上所述,异常值是远离通常数据分布的数据点,并对整体数据分布产生以下影响:
- 影响数据的整体标准偏差。
- 处理数据的总体平均值。
- 将数据转换成倾斜形式。
- 导致机器学习模型的精度估计出现偏差。
- 影响数据集的分布和统计。
由于上述原因,在对数据集建模之前,有必要检测并去除异常值。
可以通过以下方法检测数据集中的异常值:
- Z 分数
- 散点图
- 四分位距(IQR)
在本文中,我们将实现 IQR 方法来检测和处理异常值。
IQR 是四分位数范围的缩写。它测量数据值的统计离差,作为总体分布的度量。
IQR 分别相当于第一个四分位数(Q1)和第三个四分位数(Q3)之差。
这里,Q1 指的是第一个四分位数,即 25%,Q3 指的是第三个四分位数,即 75%。
我们将使用箱线图来检测和可视化数据集中存在的异常值。
箱线图以四分位数的形式描述了数据的分布,由以下部分组成
- Q1-25%
- Q2-50%
- Q3-75%
- 下限/晶须
- 上须/束缚
BoxPlot
位于下限以下和上限以上的任何数据点都被视为异常值。
现在让我们实现箱线图来检测下例中的异常值。
举例:
最初,我们已经将数据集导入到环境中。你可以在这里找到数据集。
此外,我们将变量分为数值和分类值。
我们在数字变量上使用应用箱线图,如下所示:
Detection Of Outlier-BoxPlot
如上所述,变量“风速”包含位于下限以上的异常值。
现在是处理异常值的时候了,这些异常值是我们在上一节中使用箱线图检测到的。
使用 IQR,我们可以遵循以下方法用空值替换异常值:
- 计算第一个和第三个四分位数(Q1 和第三季度)。
- 进一步,评估四分位距, IQR = Q3-Q1 。
- 估计下界,下界= Q1*1.5
- 估计上界,上界= Q3*1.5
- 用空值替换位于下限和上限之外的数据点。
因此,我们使用来计算 Q1 和 Q3 的值。此外,我们已经用作为空值的替换了异常值。
用 nan 替换了异常值后,现在让我们使用下面的代码检查空值或缺失值的总和:
数据集中每一列的空值/异常值的总数:
现在,我们可以使用以下任何技术来处理空值:
- 用平均值、中值或 Knn 估算值估算缺失值。
- 删除空值(如果比例相对较小)
这里,我们将使用函数删除空值
处理完异常值后,现在让我们检查数据集中是否存在缺失值或空值:
输出—
因此,数据集中存在的所有异常值都已被检测和处理(移除)。
到此,我们就结束了这个话题。如果你遇到任何问题,欢迎在下面评论。
更多与 Python 相关的文章。敬请关注,在那之前,祝你学习愉快!!🙂
原文:https://www.askpython.com/python/examples/diabetes-prediction-in-python
嘿伙计们!在本教程中,我们将学习如何使用深度学习技术在 Python 中使用 Keras 的深度学习 API 来构建糖尿病预测。
为此,我们将利用一个可用的数据集,并构建一个深度神经网络架构。数据集可在 这里 下载。
您可以在下载数据集后研究它,您会注意到它被分为 0 和 1。让我们继续用 TensorFlow 和 Keras 在 Python 中实现我们的模型。
我希望您已经在本地系统上安装了所有的库。如果没有,不用担心,你可以打开 Google Colab,和我一起练习这一课。
步骤 1–导入模块
现在,让我们将必要的 Python 库导入到笔记本中。
Keras API 已经包括 Python 的 TensorFlow 深度学习包,这在糖尿病预测挑战中至关重要。
步骤 2–加载数据集
我们现在准备开始导入数据集。在下一段代码中,我们导入数据集并使用 head()方法获取前五个数据点。
Diabetes Dataset Top5
步骤 3–重命名列
你可能已经意识到这些专栏毫无意义,对吗?现在让我们重命名列名。
又念:头()在熊猫
Renamed Columns Diabetes Dataset Top5
步骤 4–分离输入和输出
X 和 Y 值看起来有点像这样:
Input N Output Diabetes Dataset
我们将数据集分为输入数据集和目标数据集,这意味着前八列将作为模型的输入要素,最后一列将作为目标类。
步骤 5–训练-测试数据分割
下一步包括将训练和测试分成数据,然后将数据标准化,使以后的计算更简单。
步骤 6–建立模型
我们从使用一个随机种子生成一个伪随机数并将其设置到 tf 图开始。然后,我们将使用顺序模型,以及模型中的一些丢弃层,以避免数据的过度拟合。
步骤 7–模型的训练和测试
现在,让我们继续训练我们的模型,然后在测试数据集上拟合模型。
你会意识到,将训练 200 个时代的模型,并使用二元交叉熵损失函数和 SGD 优化器。
恭喜你!您刚刚学习了如何使用 Python 编程语言构建糖尿病预测器。希望你喜欢它!😇
喜欢这个教程吗?无论如何,我建议你看一下下面提到的教程:
- 利用 Python 预测股价
- 用 Python 进行加密价格预测
- 利用 Python 进行股票价格预测
- Python 中的票房收入预测——简单易行
感谢您抽出时间!希望你学到了新的东西!!😄
原文:https://www.askpython.com/python/diagnose-fever-in-python
嘿编码器!在本教程中,我们将了解一个常见的 Python 编程问题,你能使用 Python 编程语言诊断发烧吗?
发烧是指体温高于正常水平。正常体温因人而异,但通常在 98.6 华氏度(37 摄氏度)左右。发烧不是一种疾病。这通常是一个迹象,表明你的身体正在努力对抗疾病或感染。
我们将首先询问用户,他们输入的温度是摄氏度还是华氏度。这可以对决策产生重大影响。现在我们将检查输入是 C 还是 F,或者是否有错误的输入。
让我们一个接一个地寻找最终的代码。第一块是输入的温标为“C”时。在这种情况下,用户可以输入温度,如果温度大于或等于 37.8,则该人发烧。否则,这个人没有发烧。为了更好的诊断,温度被转换为浮动。看看下面的代码。
下一个模块是当输入为‘F’时。在这种情况下,阈值温度为 98.6。其余同上。接受输入并将输入转换为浮点以便更好地分析。请看下面的代码片段。
我们遇到的最后一个障碍是用户输入错误。在这种情况下,一个简单的语句作为输出被打印出来。看看下面的代码。
在本教程中,我们学习了如何使用 Python 编程语言来诊断发烧。如果你喜欢这个教程,我相信你也会喜欢下面的!
- Python 中的天气应用| Tkinter–GUI
- Python Tkinter:摄氏到华氏转换器
- Python:将数字转换成文字
- Python 中的误差线介绍
感谢您的阅读!编码快乐!😁
原文:https://www.askpython.com/python/examples/dice-roll-simulation
让我们使用 Python tkinter 库创建一个骰子滚动模拟代码。我们都喜欢玩像蛇和梯子这样的棋盘游戏,卢多是我们最喜欢的一个。但是如果你没有骰子或者你把它丢在什么地方了呢?对于每个兴奋地想一起玩的人来说,这是一个重要的心情放松。但是,如果您已经掌握了 python 编程技能,那该怎么办呢?
Python 提供了各种包来设计图形用户界面。Tkinter 是用于构建 GUI 应用程序的最流行、最常见、最快速、最易于使用的 Python 包。
它提供了一个强大的面向对象的接口,并且易于使用。同样,你开发一个应用程序;您可以在任何平台上使用它,这减少了在 Windows、Mac 或 Linux 上使用应用程序所需的修改。
这个框架为 Python 用户提供了一种使用 Tk 工具包中的小部件创建 GUI 元素的简单方法。
Tk 小部件可以用于构建按钮、菜单、数据字段等。在 Python 应用程序中。
为了让掷骰子模拟程序成功运行并构建 GUI,您必须导入 python tkinter 库。
如果尚未使用 pip 软件包管理器安装在您的系统上:
这是程序的完整代码。我们将在下面分解各个部分,以帮助您更好地理解代码。
最初,我们用 python 导入必要的库。为了访问随机模块,我们将添加到我们程序的顶部。将 Tkinter 中所有公开的对象导入到您当前的名称空间中。
- root = Tk( ) : 根窗口被创建。根窗口是我们程序中的一个主要应用程序窗口。它有一个标题栏和边框。这些是由窗口管理器提供的。它必须在创建任何其他小部件之前创建。
- root . geometry(" 400×400 "):方法设置窗口的大小并将其定位在屏幕上。这两个参数是窗口的宽度和高度。
我们现在将定义函数 roll( ) 来创建骰子滚动模拟。现在我们将创建一个骰子变量,在其中我们将存储该字符串的所有 ASCII 字符的列表。
然后,我们将收集标签。
方法返回一个从指定序列中随机选择元素的列表。l1.pack()是一个几何管理器,它在将部件放入父部件之前将部件组织成块。
root.mainloop( ) :最后,我们进入主循环。事件处理从这一点开始。主循环从窗口系统接收事件,并将它们分派给应用程序小部件。当我们点击标题栏的关闭按钮时,它被终止。
我们希望您喜欢今天与我们一起构建掷骰子模拟应用程序。更多类似这样有趣的教程,继续关注 AskPython。
原文:https://www.askpython.com/python/string/dictionary-to-a-string
在本教程中,我们将讨论在 Python 中将字典转换成字符串的不同方法。
字典是一个 Python 对象,用于以键:值格式存储数据。键及其对应的值由冒号(:)分隔。字典中的每个键:值对由逗号(,)分隔。Python 中的字典总是用大括号{}括起来。
Python 字典是一种无序的数据结构,不像 Python 中的列表或元组。我们可以通过使用相应的键直接访问 Python 字典的任何值。让我们看看如何通过 Python 代码创建字典。
输出:
一个字符串也是一个 Python 对象,它是最常用的数据结构,用于存储一系列字符。在 Python 中,包含在单引号、双引号或三引号中的任何内容都是字符串。在 Python 中,单引号和双引号可以互换使用来表示单行字符串,而三引号用于存储多行字符串。让我们通过 Python 代码创建一个字符串。
输出:
在 Python 中,有多种方法可以将字典转换成字符串。让我们来讨论一些最常用的方法/途径。
1.使用 str()函数
在这个将字典转换为字符串的方法中,我们将简单地将字典对象传递给函数。
输出:
2.使用 json.dumps()函数
在这个将字典转换成字符串的方法中,我们将把字典对象传递给函数。为了使用函数,我们必须导入 JSON 模块,这是 Python 中的一个内置包。
输出:
3.使用空字符串和 for 循环
在这个将字典转换成字符串的方法中,我们将简单地通过使用一个 循环遍历字典对象来访问字典的键。然后我们访问对应于每个键的值,并将 key: value 对添加到一个空字符串中。
输出:
4.使用空字符串、for 循环和 items()函数
在这个将字典转换成字符串的方法中,我们将首先通过使用一个循环和函数遍历字典对象来访问 key:value 对。然后,我们将每个键:值对添加到一个空字符串中。
输出:
5.使用 for 循环、items()和 str.join()函数
在这个将字典转换为字符串的方法中,我们将使用一个循环遍历字典对象,并添加键&的值。然后我们将使用函数将所有的键:值对连接在一起作为一个单独的字符串。
输出:
在 Python 中,我们还可以将 dictionary 对象的键和值转换成两个独立的字符串,而不是将键:值对转换成一个字符串。我们一个一个来讨论吧。
首先,我们将讨论将 dictionary 对象的键转换成字符串的不同方法。
1.使用空字符串和 for 循环
输出:
2.使用 for 循环和 str.join()函数
输出:
现在让我们讨论将 dictionary 对象的值转换为字符串的不同方法。
1.使用空字符串和 for 循环
输出:
2.使用 for 循环和 str.join()函数
输出:
在本教程中,我们学习了用 Python 将字典转换成字符串的不同方法。我们还学习了如何将 dictionary 对象的键和值转换成两个独立的字符串。希望你已经理解了上面讨论的东西,并将自己尝试这些。
原文:https://www.askpython.com/python-modules/pandas/dictionary-to-dataframe
你好。在本教程中,我们将讨论从 Python 中的字典创建一个 Pandas DataFrame 对象的不同方法。那么,我们开始吧。
在 Python 中,我们可以很容易地从 Python 字典中创建 Pandas DataFrame 对象。让我们一个接一个地从列表字典中学习创建熊猫数据框架的不同方法。
1.使用 pd。DataFrame()函数
在这个方法中,我们将首先创建一个 Python 列表字典,并将其传递给函数。最后,函数返回一个 pandas DataFrame 对象,其中包含来自列表字典的数据。让我们通过 Python 代码来实现这一点。
输出:
2.使用 DataFrame.from_dict()函数
像前面的方法一样,这里我们也将首先创建一个列表的 Python 字典,但是将它传递给函数。最后,函数返回一个 Pandas DataFrame 对象,其中包含来自列表字典的数据。让我们看看如何通过 Python 代码实现这一点。
输出:
在 Python 中,我们还可以从字典列表中创建一个熊猫 DataFrame 对象。在这个方法中,我们首先创建一个 Python 字典列表,并将其传递给函数。然后,函数返回一个 Pandas DataFrame 对象,其中包含字典列表中的数据。让我们看看如何通过 Python 代码从字典列表创建一个 DataFrame。
输出:
在 Python 中,我们甚至可以从 Python 范围的字典中创建 Pandas DataFrame 对象。在这个方法中,我们首先使用 Python 中的函数创建一个范围字典,并将其传递给函数。然后函数返回一个熊猫 DataFrame 对象,其中包含来自范围字典的数据。让我们看看如何通过 Python 代码从 Python 范围的字典创建数据帧。
输出:
在 Python 中,我们可以从带有用户定义索引的字典中创建 Pandas DataFrame 对象。在这个方法中,我们首先创建一个 Python 字典,并将其与索引列表一起传递给函数。然后,函数返回一个 Pandas DataFrame 对象,其中包含来自字典的数据和来自传递的索引列表的索引。我们来看看如何通过 Python 代码实现。
输出:
在本教程中,我们学习了从 Python 字典创建熊猫 DataFrame 对象的不同方法。希望你已经理解了上面讨论的东西,并准备探索和学习更多关于熊猫数据框对象。敬请关注我们!
原文:https://www.askpython.com/python/examples/difference-between-equal-to-and-is
操作符和在 Python 中执行非常相似的任务,但是它们彼此非常不同,并且处理一个非常有趣的概念:Python 如何在内存中存储变量。
简单来说,
- 检查两个操作数的值,如果相同,则返回,否则返回。
- 检查两个操作数的对象 ID,如果相同则返回。
但是什么是对象 ID 呢?每个对象在内存中被分配一个 ID,两个变量可以指向同一个对象,这给了它们相同的对象 ID。
让我们用列表来看看它们的区别:
输出:
在上面的例子中,最初,内存中有两个列表,但是它们拥有完全相同的值。
- 比较数值,因此运算返回。
- 但是检查它们是否指向同一个对象,这些列表实际上是不同的对象,所以返回。
- 在这之后,我们使等于,这使得指向所指向的地方,于是,返回。
所有这些对于整数来说是非常不同的,为了理解这一点,我们需要知道对象是如何存储在内存中的。
我们需要理解 Python 中对象的内存分配,以便在本教程中更进一步。
让我们举一个例子:
在这里,我们知道保存了值 10,但是它是如何存储在内存中的呢?在 Python 中,每个对象在内存中都有四个部分:
- Size–对于每个对象,保留 4 个字节来保存对象的大小。
- 引用计数–对于每个对象,保留 8 个字节,用于保存指向该对象的变量数量。所有这些对象都有这个对象的对象 ID。
- 对象类型–对于每个对象,保留 8 个字节,用于保存表示对象类型的信息。
- 对象值–另外 8 个字节为每个对象保留,它们保存对象的实际值。
现在,在上面的列表中,对象值和引用计数是这次讨论的重点。
因此,对于,内存中有一个对象,其对象值为 10,引用计数为 1,这意味着该对象的值为 10,有一个变量指向它,在我们的例子中是。
现在让我们像这样声明另一个变量:
现在,内存中会发生一件非常有趣的事情,不会有新的对象被创建,也会指向所指向的地方,对象的引用计数会增加到 2。
因此,和将具有相同的对象 ID,输出将是:
但是如果我们这样做呢?
在上面的示例中,输出将是:
Python 认为从-5 到 256 的整数是常用的整数,因此这些整数的对象总是预定义的,您不能从内存中删除这些对象。
所以在 Python 代码的开始,所有这些对象的引用计数都是零,但是如果任何变量的值都在-5 到 256(包括-5 和 256)之间,那么就不会创建新的对象,所有的变量都会指向已经存在的对象。
所以在上面的代码中,10 的对象已经在内存中了,前两行只是创建了指向同一个对象的变量。
因此,对于下面的代码:
输出将是:
这是因为 python 会在每次声明整数时为超出该范围的整数创建新的实例。注意,如果我们已经做了,那么无论的值是多少,它们都将指向同一个对象。
在本教程中,我们看到了和之间的区别,以及如何有助于发现两个变量是否指向同一个内存位置。
我们还看到了从-5 到 256 的整数是如何缓存在内存中的,因为它们被认为是常用的(像和这样的字符也被类似地缓存),在这个范围内具有相同值的两个变量将指向同一个对象。
原文:https://www.askpython.com/python/examples/difference-between-is-and-double-equals
嘿伙计们!,我们都知道 Python 有一些大多数解释语言没有的好处。其中一些是我们在进行数学计算时使用的灵活性概念。这样做的时候,我们会对操作符和关键字产生一些混淆。现在,在这篇文章中,我们的目的是得到相同的区别。是和的双等号运算符。那么,让我们开始吧。
任何编程语言中的运算符都是基础背后的主要基本概念。Python 中有以下运算符:
- 逻辑:执行逻辑计算
- 和
- 或者
- 不
- 算术:进行基本的算术计算
- + :加法
- –:乘法
- / :除法
- % :取模(返回余数)
- /:地板除法运算符(返回浮点除法的整数值)
- 指数:计算数的幂和异或值
- :电源
- ^ :异或
现在,我们将比较这些关键字,并尝试跟踪它们在操作上的差异。
“==” 运算符
让我们以两个变量为例。每个变量都有不同的值。假设 a 有 20,b 有 30。现在,我们都知道他们是不平等的。但是,计算机如何识别这一点呢?为此,我们只使用了 double equal-to 运算符。让我们举一个代码例子:
代码:
输出:
这里我们可以说明,等于的主要作用是检查值是否相同。对于一个复杂的例子,我们也可以用函数来检查:
代码检查一个数的平方根 :
输出:
这里我们比较两个函数返回的值。它们返回的值是相同的,但是在解释器中两者的标识是不同的。
输出:
这里的双重等于运算符显示了不同的性质。当我们比较它们的身份时,它将返回 false。它返回 false,因此我们使用“is”操作符来解决这个问题。
是关键字
该关键字用于值的比较以及对象引用。当我们创建任何类的对象时,它是保存每个类的属性的实例。对于每一个新创建的对象,解释器都给它们分配一个新的身份。
数字示例
输出:
正如我们所见,两者都是 10,但一个是浮点数,另一个是整数。所以,让这些值看起来相似,对象类型可以不同
数据结构示例
在这个例子中,我们有两个列表 a 和 b。它们都包含相同的元素值。但是,当我们尝试使用关键字 “is” 来比较它们时,结果令人惊讶。
输出:
说明:
- 两个列表都与具有相同的类别。
- 但是,主要问题是分配给 l1 的存储块不同于 l1 的存储块。
- 是操作符,检查我们创建的对象的内存位置。
- 每个对象的内存块分配是不同的。这使得为返回假值。
例如使用 NumPy 阵列
代码:
输出:
NumPy 数组也是如此。两个阵列是相同的,但是分配给它们的内存是不同的。他们的 id 不一样。所以,我们得到假。
例如一个类
输出:
说明:
这两个类具有相同的属性、相同的功能以及相同的参数。值得注意的区别是,它们通过内存引用是不同的。所以,通过这个代码实验得出的结论是:对于更有效的代码可测试性来说,关键字比 == 操作符更有用。
double 等于只检查值,但是,检查的值和引用。因此,本文向我们讲述了 Python 中“is”和“==”之间的区别,以及我们如何在 Python 编程中有效地使用这两个概念,并使我们的代码更加健壮。
参考
- https://docs.python.org/3/library/keyword.html
- https://stack overflow . com/questions//how-the-is-keyword-implemented-in-python
原文:https://www.askpython.com/python/difference-between-python-list-vs-array
嘿,伙计们!希望你们都过得好。在本文中,我们将详细关注 Python 列表和数组之间的差异。
Python 列表和 Python 数组之间的主要区别在于,列表是 Python 标准包的一部分,而对于数组,需要导入“数组”模块。Python 中的列表用一些例外情况代替了数组数据结构。
众所周知,数据结构是用来有效存储数据的。
在这种情况下,一个列表可以将异构数据值存储到其中。也就是说,不同数据类型的数据项可以容纳在一个 Python 列表中。
举例:
输出:
另一方面,数组存储同类元素,即它们存储属于同一类型的元素。
举例:
输出:
Python 将“列表”作为内置的数据结构。这就是为什么列表不需要在 Python 中声明。
另一方面,Python 中的数组需要声明。我们可以使用以下技术声明一个数组:
阵列模块
NumPy 模块
在执行数学运算时,数组占了上风。 NumPy 模块为我们提供了数组结构来存储数据值并方便地操作它们。
数组示例:
输出:
与列表不同,在列表中执行的操作不会反映到结果中,如下面的列表操作示例所示。
在这里,我们尝试将常量值(5)与列表相乘,这不会反映输出中的任何内容。因为列表不能对任何数据值进行直接的数学运算。
所以,如果我们想用列表中的元素乘以 5,我们必须分别用列表中的每个元素乘以 5。
列表示例:
输出:
Python 列表是一种内置的数据结构,可以非常容易和有效地调整大小。
另一方面,在调整数组内存大小时,数组的性能很差。相反,我们将不得不把数组复制到另一个数组中来缩放和调整它的大小。
到此,我们就结束了这个话题。如果你遇到任何问题,欢迎在下面评论。
在那之前,学习愉快!!
- Python 数组 vs List — StackOverflow
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/pythonbc/80955.html