全国计算机等级考试二级Python语言程序设计模拟试卷B卷综合应用题

本文介绍了一个程序,用于统计《天龙八部》网络版文本中的汉字和标点符号频率,并使用jieba库进行词语统计,输出CSV格式的字符统计和词语统计结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

背景

《天龙八部》是著名作家金庸的代表作之一,历时4年创作完成。该作品气势磅礴,人物众多,非常经典。这里给出一个《天龙八部》的网络版本,文件名为”天龙八部-网络版.txt”。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

问题一及解答

问题

请编写程序,对这个《天龙八部》文本中出现的汉字和标点符号进行统计,字符与出现次数之间用冒号:分隔,输出保存到“天龙八部-汉字统计.txt”文件中,该文件要求采用 CSV 格式存储,参考格式如下(注意,不统计空格和回车字符):‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

天:100, 龙:110, 八:109, 部:10

(略)

解答

程序框图
Created with Raphaël 2.2.0 开始 以只读模式打开文本 天龙八部-网络版.txt, 并保存为行文本lines 遍历行本文lines, 是否达到 文本lines末尾? 结束 遍历列表line 元素elm,是否到达 列表line末尾? 移动到行文本的下一行line 字符elm是否不在 集合{' ', '\n', '\ufeff', '\u3000'}中? 利用字典stat的get方法 对字符elm进行计数; 或者直接根据字典数据stat[elm] 进行词频统计 移动到列表line中的下一个元素elm yes no yes no yes no
数据流图
文本 txt
读取文本 txt
列表类型 lines
遍历列表 lines
字符串 line
字符串 line
遍历字符串 lines
统计字符
elm个数
字典类型 stat
将字典转化
成列表 ls
列表 ls
列表 ls
将列表 ls写入
文本txt
文本 txt
程序代码
with open("天龙八部-网络版.txt", "r", encoding = "UTF-8") as fi:
    lines = fi.readlines()
    
stat = {}
for line in lines:
    for elm in line:
        if elm not in {' ', '\n', '\ufeff','\u3000'}:
     ###############方法一:利用字典的get方法进行词频统计###########
      ## stat[elm] = stat.get(elm,0) + 1
      ###############方法二:根据字典数据进行词频统计##############
            if elm in stat:
                stat[elm] += 1
            else:
                stat[elm] = 1
ls = []
for elm in stat:
    ls.append("{}:{}".format(elm,stat[elm]))
with open("天龙八部-汉字统计.txt", "w", encoding ="UTF-8") as fo:
    fo.write(",".join(ls))

问题二及解答

问题

请编写程序,对《天龙八部》文本中出现的中文词语进行统计,采用 jieba 库分词,词语与出现次数之间用冒号:分隔,输出保存到“天龙八部-词语统计.txt”文件中。参考格式如下(注意,不统计任何标点符号):‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

天龙:100, 八部:10

(略)

本题暂不支持自动评阅,print(‘ok’),即可得分

解答

程序框图
Created with Raphaël 2.2.0 开始 以只读模式打开文本 天龙八部-网络版.txt, 并保存为行文本lines 导入第三方库jieba 遍历行本文lines, 是否达到 文本末尾? 结束 利用第三方库jieba进行中文分词 并返回分词后的列表ls 遍历列表ls 元素——字符elm, 是否到达 列表末尾? 移动到行文本lines的下一行 字符elm是否不在 集合{' ', '\n', '\ufeff', '\u3000'}中? 利用字典stat的get方法 对字符elm进行计数; 或者直接根据字典stat数据 进行词频统计 移动到列表ls中的下一个元素 yes no yes no yes no
数据流图
文本 txt
读取文本 txt
列表类型 lines
遍历
字符串 line
字符串 line
对字符串 line
进行分词
分词后的列表 ls
统计字符串 elm
个数
字典类型 stat
字典类型 stat
将字典 stat转化
成列表 ls
列表 ls
将列表写入
文本 txt
文本 txt
程序代码
with open("天龙八部-网络版.txt", "r", encoding = "UTF-8") as fi:
    lines = fi.readlines()

from jieba import *

stat = {}
for line in lines:
    ls = lcut(line) # 利用第三方库jieba进行中文分词
    for elm in ls:
        if elm not in {"","\ufeff", ",","。","!","“","”",":","\n",\
                       "、"," ",':',"\u3000",",","","《","》",\
                       "·","(",")","?"}: # 如果不是标点符号,那么进行词频统计
            if elm in stat:
                stat[elm] += 1
            else:
                stat[elm] = 1

##############将词频统计以“词语:出现次数”进行显示##########
ls = []
for key in stat:
    ls.append("{}:{}".format(key,stat[key]))
###########################################################

with open("天龙八部-词语统计.txt", "w", encoding = "UTF-8") as fo:
    fo.write(",".join(ls))

知识点总结

注释:

  1. 学会构造字典进行字频统计。学会利用两种方法对字出现的次数进行计数:字典get方法以及直接根据字典数据的方法。
  2. 熟练利用保留字in、not in判定指定字符是否在字符串中。
  3. 学会利用字符串的join(iter)方法对迭代类型变量后的每一个元素加入字符串。注意该方法的返回类型是加入元素后的字符串
  4. 学会利用format对字符串进行格式化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值