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

背景

《命运》和《寻梦》都是著名科幻作家倪匡的科幻作品。这里给出一个《命运》和《寻梦》的网络版本,文件名为“命运-网络版.txt”和“寻梦-网络版.txt”。

问题一及其解答

问题

请编写程序,对这两个文本中出现的字符进行统计,字符与出现次数之间用冒号:分隔,将两个文件前 100 个最常用字符分别输出保存到“命运-字符统计.txt”和“寻梦-字符统计.txt”文件中,该文件要求采用 CSV 格式存储,参考格式如下(注意,不统计回车字符):‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

命:90, 运:80, 寻:70, 梦:60‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬(略)

解答

总程序框图
Created with Raphaël 2.2.0 开始 子程序1:统计文件中字符个数 子程序2:对字符个数进行排序 子程序3:将排序后的字符保存在文件中 结束
子程序1
Created with Raphaël 2.2.0 开始子程序1 以只读方式打开文件, 并保存为行文本列表lines 初始化字典stat 循环遍历行文本列表lines 的元素——字符串line, 是否到达行文本lines末尾 进入子程序2 循环遍历字符串line的 元素——字符elm,是否 达到字符串line的末尾 移动到行文本列表lines的 下一个字符串元素line elm是否为字典的键 将字典中键elm的值加1 移动到字符串line的下一个键elm 将字典中键elm的值设置为0 yes no yes no yes no
子程序2
Created with Raphaël 2.2.0 开始子程序2 删除字典键stat为“\n”的键值对 利用list函数将字典stat转化成列表ls0 利用list方法对列表ls0进行排序 循环遍历列表ls0 的元素——元组(k,v), 是否达到 列表ls0的末尾 进入子程序3 格式化字符串k:v 将字符串k:v添加到列表ls中 移动到列表ls0的下一个元组(k,v) yes no
子程序3
Created with Raphaël 2.2.0 开始子程序3 以只写方式打开文件 在列表ls的元素间加入逗号 并将列表ls写入文件 结束总程序
数据流图
文本 txt
读入文本 txt
行文本列表 lines
将列表 lines转化
成字符串 line
字符串 line
字符串 line
将字符串 line转化
成字符 elm
字符 elm
对字符 elm进行统计
并保存为字典 stat
字典 stat
字典 stat
利用 list函数将字典
stat转化成列表 ls0
列表 ls0
对列表 ls0进行格式化
格式化后的列表 ls0
格式化后的列表 ls0
在列表 ls0元素间
插入逗号
改变格式后
的列表 ls0
将列表 ls0保存到
文本 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 in stat:
##            stat[elm] +=1
##        else:
##            stat[elm] = 0
        stat[elm] = stat.get(elm,0)+1

del stat['\n']
ls0 = list(stat.items())
ls0.sort(key = lambda x:x[1], reverse = True)

ls = []
##for i in range(100):
##    k,v = ls0[i]
##    ls.append("{}:{}".format(k,v))

for (k,v) in ls0:
##    k,v = ls0[i]
    ls.append("{}:{}".format(k,v))

with open("寻梦-字符统计.txt",'w',encoding='UTF-8') as fo:
    fo.writelines(",".join(ls[0:100]))

print(",".join(ls[0:10]))

问题二及其解答

问题

请编写程序,对“命运-字符统计.txt”和“寻梦-字符统计.txt”中出现的相同字符打印输出。“相同字符.txt”文件中,字符间使用逗号分隔。

解答

总程序框图
Created with Raphaël 2.2.0 开始 子程序1: 读取文本“命运-字符统计.txt” 和“寻梦-字符统计.txt”, 并保存为行列表ls和ls1 子程序2: 利用函数GetWordList() 提取列表ls和ls1中 的字符,并保存在ls2和ls3中。 子程序3: 查找ls2和ls3列表中的相同字符, 并将相同字符存储在ls4中。 结束
子程序1
Created with Raphaël 2.2.0 开始子程序1 以只读方式打开文件 “命运-字符统计.txt”和“命运-字符统计.txt”, 并保存为行文本列表ls和ls1 进入子程序2
子程序2
Created with Raphaël 2.2.0 开始子程序2 输入列表InputList,截取长度length 初始化列表WordList 循环变量i是否小于 截取长度length 将标记flag设置为True 循环变量j是否小于列表 InputList[i]长度 InputList[i][j]的元素 ——字符是否为“:” 将标记flag设置为False 标记flag是否为True 将WordList的元素 ——字符增加到列表中 移动到输入字符串InputList[i] 的下一个元素 移动到输入列表InputList 的下一个元素 输出包含字符的列表WordList 进入子程序3 yes no yes no yes no yes no
子程序3
Created with Raphaël 2.2.0 开始子程序3 循环遍历列表 ls2的元素 ——字符char, 是否达到列表 ls2的末尾 结束 将char增加到列表ls4中 移动到列表ls3的下一个元素 yes no
数据流图
文本 txt
读入文本 txt,
并以逗号进行分割
列表 ls,ls1
利用函数
GetWordList
将输入列表
InputList
转化成 WordList
列表 WordList
列表 WordList
收集相同字符
并保存在列表 ls4
列表 ls4
将列表 ls4保存到
文本 txt
文本 txt
程序代码
with open("命运-字符统计.txt","r",encoding="UTF-8") as fi:
    ls = fi.readline().split(",")
with open("寻梦-字符统计.txt","r",encoding="UTF-8") as fi1:
    ls1 = fi1.readline().split(",")
         
def GetWordList(InputList,length):
    WordList = []
    for i in range(length):
        flag = True
        for j in range(len(InputList[i])):
            if InputList[i][j]==':':
                flag = False
            if flag == True:
                WordList.append(InputList[i][j])
    return WordList

ls2 = GetWordList(ls,100)
ls3 = GetWordList(ls1,100)
    
ls4 = []
for char in ls2:
    if char in ls3:
        ls4.append(char)

with open("相同字符.txt","w",encoding="UTF-8") as fo:
    fo.writelines(",".join(ls4))

知识点总结

在这里插入图片描述

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值