Python实训题目(1)实现文本中的词频统计和排序

目录

目录

目录

题目

题干解析

功能

函数说明

各部分代码功能分析

选项解析

选项A

选项B

选项C

选项D

知识点笔记

1. 字符串方法join()的基本用法

2. 列表方法append()的基本用法

3. 字典方法values()的基本用法

4. 函数list()的基本用法

5. 函数sort()的基本用法

(1) 基本排序

(2) 降序排序

(3) 使用key进行自定义排序

① 按字符串长度排序

② 按绝对值排序

③ 按对象的属性排序

(4) 综合使用key和reverse排序

(5) 对元组列表排序

(6) 与sorted()函数对比

6. 字典项的引用与赋值


题目

题目来自https://edu.csdn.net/skill/practice/python-3-5/29?language=python&materialId=17346

一个正式的项目一般都有对应的代码规范,代码规范约定了如何在项目中编写代码。一般来说,个人开发可以使用任何自己喜欢的代码规范,但是在团队开发中,一般要遵循团队约定的代码规范。

不同的编程语言,都有一些著名的代码规范。例如著名的K&R是指《The C Programming Language》一书的作者Kernighan和Ritchie二人,这是世界上第一本介绍C语言的书,而K&R风格即指他们在该书中书写代码所使用的风格。

Google 有一个代码风格指引:Google Style Guides,里面包含了大部分主流编程语言的编码规范。以下Python三引号字符串摘录该规范的核心描述:

google_style_guide = '''
Every major open-source project has its own style guide: a set of conventions (sometimes arbitrary) about how to write code for that project. It is much easier to understand a large codebase when all the code in it is in a consistent style.

“Style” covers a lot of ground, from “use camelCase for variable names” to “never use global variables” to “never use exceptions.” This project (google/styleguide) links to the style guidelines we use for Google code. If you are modifying a project that originated at Google, you may be pointed to this page to see the style guides that apply to that project.

This project holds the C++ Style Guide, C# Style Guide, Swift Style Guide, Objective-C Style Guide, Java Style Guide, Python Style Guide, R Style Guide, Shell Style Guide, HTML/CSS Style Guide, JavaScript Style Guide, TypeScript Style Guide, AngularJS Style Guide, Common Lisp Style Guide, and Vimscript Style Guide. This project also contains cpplint, a tool to assist with style guide compliance, and google-c-style.el, an Emacs settings file for Google style.
'''

CodeChina上有一个中文镜像仓库:zh-google-styleguide,可以看到 Google Python 代码风格指引十分简短:python_style_rules

此外,Python 官方代码风格文档是:PEP8。你会问PEP是什么?PEP是Python Enhancement Proposals的缩写。一个PEP是一份为Python社区提供各种增强功能的技术规格,也是提交新特性,以便让社区指出问题,精确化技术文档的提案。

实际的开发中可以通过配置开发环境的插件来辅助自动化检查代码风格。下面的Python三引号字符串描述了一组相关信息:

python_style_guides = '''
* Python 代码风格指南',
    * [google-python-styleguide_zh_cn](https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules /)
    * [PEP8](https://legacy.python.org/dev/peps/pep-0008/)
* 代码风格和自动完成工具链
    * 基本工具
        * [pylint](https://pylint.org/)
        * [autopep8](https://pypi.org/project/autopep8/)
    * Visual Studio Code Python 开发基本插件
        * Pylance
        * Python Path
        * Python-autopep8
'''

请编写一段单词统计Python代码,统计上述两个Python三引号字符串里英文单词的词频。要求:

单词请忽略大小写
使用数组splits = ['\n', ' ', '-', ':', '/', '*', '_', '(', ')', '"', '”', '“',']','[',',','.','\n']来切割单词
输出词频最高的5个单词和词频信息。

基本代码框架如下:

# -*- coding: UTF-8 -*-
def top_words(splits, text, top_n=5):
    i = 0
    word_dict = {}
    chars = []
    while i < len(text):
        c = text[i]
        if c in splits:
            # 过滤掉分隔字符串
            while i+1 < len(text) and text[i+1] in splits:
                i += 1
            word = ''.join(chars).lower()

            # 统计词频
            # TODO(You): 请在此添加代码

            chars = []
        else:
            chars.append(c)

        i += 1

    word_list = list(word_dict.values())
    top_n = min(top_n, len(word_list))
    word_list.sort(key=lambda word_info: word_info['count'], reverse=True)
    return word_list[0:top_n]

if __name__ == '__main__':
    google_style_guide = ...
    python_style_guides = ...
    splits = [' ', '-', ':', '/', '*', '_', '(', ')', '"', '”', '“', ',', '.', '\n']

    tops = top_words(splits, google_style_guide+python_style_guides)

    print('单词排行榜')
    print('--------')
    i = 0
    while i < len(tops):
        top = tops[i]
        word = top['word']
        count = top['count']
        print(f'{i+1}. 单词:{word}, 词频:{count}')
        i += 1

预期的输出结果为:

单词排行榜
--------
1. 单词:style, 词频:23
2. 单词:guide, 词频:16
3. 单词:to, 词频:9
4. 单词:python, 词频:9
5. 单词:project, 词频:8

以下选项是对代码中TODO部分的多种实现,你能找出以下实现错误的选项吗?

你可能感兴趣的:(Python实训题目(1)实现文本中的词频统计和排序)