在 Python 中创建引言生成器

17 Mar 2025 | 5 分钟阅读

任务: 用户输入一个标签,Python 程序根据该标签必须能够一个接一个地生成名言。如果程序找不到带有给定标签的任何名言,则必须打印“找不到带有给定标签的名言”。

解决方案

我们需要为这项任务使用一个数据集。该数据集必须包含名言和可以与每条名言关联的标签。然后,程序可以搜索数据集以查找用户指定的标签,如果找到任何名言,则可以打印该名言。我们可以在互联网上找到许多数据集,这些数据集由各个网站(如 github、kaggle 等)上的开发人员上传。

在本教程中,我们将使用 Kaggle 的一个数据集。以下是查找方法:

  1. 转到 Google 搜索并搜索“名言数据集”。
  2. 您可以找到提供不同数据集的不同网站。
    Create a Quote Generator in Python
  3. 我们选择了 Kaggle 的第一个数据集。
    Create a Quote Generator in Python
  4. Kaggle 是一个在线社区,汇集了开发人员、机器学习爱好者和数据科学家,他们在项目中进行协作并分享他们的作品。正如您所看到的,Quotes 数据集是由社区中的一位开发人员贡献的,我们可以轻松下载并用于我们的项目。
  5. 点击下载并等待它下载,这是一个大文件,所以可能需要一些时间。
    Create a Quote Generator in Python
  6. 向下滚动,您可以在 Kaggle 上找到数据集的详细信息。现在,打开下载的文件。
  7. 这是一个 .json 文件。使用文本编辑器打开 .json 文件。

JSON 文件

JSON 是“JavaScript Object Notation”的缩写。它是一种独立于语言的标准数据格式。它用于各种数据应用,特别是 Web 应用程序和服务器之间的数据交换。它源自 JavaScript,因此得名。它使用人类可读的文本来存储和传输数据。数据以键值对的形式排列。 .json 文件可以导入 Excel 以获得结构化的表格格式。

以下是名言数据集中的两条名言:

现在,如果我们尝试理解文件的底层表结构:

名言作者标签受欢迎程度类别
不要因为结束而哭泣,因为发生而微笑Dr. Seussattributed-no-source, 哭, 哭泣, 经验, 快乐, 喜悦, 生活, misattributed-dr-seuss, 乐观, 悲伤, 微笑, 微笑0.15566615566615566生活
我是一个自私、不耐烦又有点没安全感的人。我会犯错,我会失控,有时也很难相处。但如果你无法在我最糟糕的时候承受我,那么你肯定不配在我最好的时候拥有我。Marilyn Monroeattributed-no-source, 最好的, 生活, 爱, 错误, 失控, 真相, 最坏的0.12912212912212911生活
  • 确保您正在编写代码的 Python 文件和包含数据集的 json 文件位于同一文件夹中。
  • 否则,请在代码中提供 json 文件的完整路径。

现在,我们将编写一个程序来读取 json 文件,使用用户指定的标签过滤出名言,按最受欢迎程度排序,然后逐一打印最受欢迎的名言。

代码

输出

Enter a tag:happiness
Popularity:  0.15566615566615566
Quote:  Don't cry because it's over, smile because it happened.

Next(Y/N):Y

Popularity:  0.025575025575025574
Quote:  Love is that condition in which the happiness of another person is essential to your own.

Next(Y/N):Y

Popularity:  0.01855001855001855
Quote:  Time you enjoy wasting is not wasted time.

Next(Y/N):Y

Popularity:  0.01366001366001366
Quote:  It's so hard to forget pain, but it's even harder to remember sweetness. We have no scar to show for happiness. We learn so little from peace.

Next(Y/N):N

说明

  1. 第一行导入 json 模块,该模块用于从文件加载 JSON 数据。
  2. with 语句以读取模式打开 quotes.json 文件,并将其赋值给变量 file。encoding 参数设置为 "utf-8",以确保如果文件包含非 ASCII 字符,则能正确读取。
  3. json.load() 函数用于解析文件中的 JSON 数据并将其转换为 Python 对象。
  4. input() 函数用于提示用户输入一个标签。
  5. 创建一个名为 dictionary 的字典,用于存储具有用户输入的标签的名言及其受欢迎程度分数。
  6. 一个循环遍历 data 对象中的每一条名言。如果名言具有用户输入的标签,则将受欢迎程度分数和名言文本添加到 dictionary 对象中。
  7. 如果 dictionary 对象为空(即找不到具有指定标签的任何名言),则会显示一条消息通知用户。
  8. 如果 dictionary 对象不为空,则按降序对受欢迎程度分数进行排序,并将排序后的名言逐一显示给用户。
  9. 在显示每条名言后,将提示用户输入“Y”显示下一条名言,或输入“N”退出程序。如果用户输入“Y”,循环将继续到下一条名言。如果用户输入“N”,则会中断循环并退出程序。