创建一个Python语言的名言生成器

创建一个Python语言的名言生成器

任务:用户输入一个标签,根据该标签,Python程序必须能够逐个生成名言。如果程序无法找到任何具有给定标签的名言,则必须打印“未找到具有给定哈希标记的名言”。

解决方案

对于此任务,我们需要使用一个数据集。数据集必须包含名言和可以与每个名言相关联的标签。然后,程序可以搜索用户指定的标签的数据集,如果找到任何名言,它可以打印名言。我们可以在互联网上找到很多数据集,这些数据集由各个网站的开发人员上传,例如Github、Kaggle等。

在本教程中,我们将使用来自kaggle的数据集。以下是如何查找它的方法:

  1. 访问Google搜索并搜索“Quotes dataset”。

  2. 您可以找到不同的网站提供不同的数据集:

    创建一个Python语言的名言生成器

  3. 我们选择了Kaggle上的第一个数据集:

    创建一个Python语言的名言生成器

  4. Kaggle是一个在线开发人员、机器学习爱好者和数据科学家社区,他们在项目中进行协作并分享自己的作品。正如您所观察到的,名言数据集是由社区中的一位开发人员贡献的,我们可以轻松地下载并用于我们的项目。

  5. 单击“下载”并等待其下载,它是一个大文件,可能需要一些时间。

    创建一个Python语言的名言生成器

  6. 向下滚动,您可以在kaggle中找到数据集的详细信息。现在,打开已下载的文件。

  7. 它是一个.json文件。使用文本文档打开.json文件。

JSON文件:

JSON代表“JavaScript对象表示法”。它是一种独立于语言的标准数据格式。它在各种数据应用程序中使用,特别是在Web应用程序和服务器之间进行数据交换时使用。它源自JavaScript,因此名称为 JSON。它使用易于阅读的文本来存储和传输数据。数据以属性值对的形式排列。可以将.json文件导入Excel以获取结构化表格格式。

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

[
  {
    "Quote": "Don't cry because it's over, smile because it happened.",
    "Author": "Dr. Seuss",
    "Tags": [
      "attributed-no-source",
      "cry",
      "crying",
      "experience",
      "happiness",
      "joy",
      "life",
      "misattributed-dr-seuss",
      "optimism",
      "sadness",
      "smile",
      "smiling "
    ],
    "Popularity": 0.15566615566615566,
    "Category": "life"
  },
  {
    "Quote":
      "I'm selfish, impatient and a little insecure. I make mistakes, I am out of control and at times hard to handle. But if you can't handle me at my worst, then you sure as hell don't deserve me at my best.",
    "Author": "Marilyn Monroe",
    "Tags": [
      "attributed-no-source",
      "best",
      "life",
      "love",
      "mistakes",
      "out-of-control",
      "truth",
      "worst "
    ],
    "Popularity": 0.12912212912212911,
    "Category": "life"
  },
?.
]

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

名称 名言 作者 标签 流行度 类别
1 不要因为结束而哭泣,微笑吧,因为它曾经发生过 Dr. Seuss 归因于无来源,哭泣,经历,幸福,喜悦,生活,误归于Dr.Seuss,乐观,悲伤,微笑 0.15566615566615566 生活
2 我很自私、不耐烦,有点不安全。我会犯错,我失控,在某些时候难以掌控。但是,如果你不能应对我最坏的状态,那么你肯定不配拥有我最好的状态。 Marilyn Monroe 归因于无来源,最好,生活,爱情,错误,失控,真相,最坏 0.12912212912212911 生活
  • 确保您编写代码的Python文件和包含数据集的Json文件在同一个文件夹中。
  • 如果没有,请在代码中提供json文件的完整路径。

现在,我们将编写一个程序来读取json文件,使用用户指定的标签对其进行过滤,根据最大流行度对其进行排序,然后逐个打印最受欢迎的名言:

代码

import json
with open('quotes.json', encoding="utf-8") as file:
    data = json.load(file)
tag = input('Enter a tag:')
dictionary = {}
for quote in data:
    if tag in quote["Tags"]:
        dictionary[quote["Popularity"]]=quote["Quote"]
if(len(dictionary)==0):
    print("Sorry, we couldn't find any quote with given tag")
else:
    keys = list(dictionary.keys())
    keys.sort(reverse=True)
    sorted_dict = {i: dictionary[i] for i in keys}
    for i in sorted_dict:
        print("Popularity: ", i)
        print("Quote: ",sorted_dict[i])
        print()
        a = input("Next(Y/N):")
        print()
        if(a=="Y"):
            continue
        else:
            break

输出

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语句以读取模式打开名言.json文件,并将其分配给变量file。编码参数设置为“utf-8”,以确保如果文件包含非ASCII字符,则正确读取文件。
  3. 使用json.load()函数解析来自文件的JSON数据并将其转换为Python对象。
  4. 使用input()函数提示用户输入标签。
  5. 创建一个名为dictionary的字典,用于存储具有用户输入的标签的名言以及它们的流行度得分。
  6. 循环迭代每个名言数据对象。如果名言具有用户输入的标签,则会将流行度得分和名言文本添加到dictionary对象中。
  7. 如果dictionary对象为空(即找不到具有指定标签的名言),则显示信息以通知用户。
  8. 如果dictionary对象不为空,则按降序对流行度得分进行排序,并逐个向用户显示排序后的名言。
  9. 在显示每个名言后,提示用户输入“Y”以显示下一个名言或输入“N”退出程序。如果用户输入“Y”,则继续循环到下一个名言。如果用户输入“N”,则中断循环,程序退出。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python 教程