Python第八章作业

本文介绍了如何使用Python编程统计给定文本文件(如TheOldManandtheSea.txt)前n行中特定字母(如qwertyuiop...)的出现次数,按降序排列并考虑大小写。涉及到了文件操作、读取、字符串处理和字典排序的技术。

第一关统计字母数量

1.1 任务描述

读取附件是一篇英文短文,请编写程序统计这篇短文前 n 行中每一个英文字母出现的次数,结果按次数降序排列,次数相同时,按字母表顺序输出。若 n 值大于短文行数,输出整篇文章中每一个英文字母出现的次数(大写字母按小写字母统计

1.2 设计思路

因为我们要统计.txt文件的信息 所以我们就要对它进行文件操作,打开读取关闭等。题目要求前n行每个英文字符的出现的次数,我们就想到输入一个变量n来控制读取的行数

def openFile(fileName, n):
    ls = []
    mystr=""
    with open(fileName, 'r', encoding='utf-8') as data:
        for i in range(n):
            # ls.append(data.readline().lower())
            mystr +=data.readline().lower()
    #     ls = [data.readline().lower() for i in range(n)]
    # return ls
    return mystr

with open 的用法 with open(文件路径,模式,编码格式)as 文件名,它与f = open(文件路径,模式,编码格式)的区别 前者当走出with open 代码块时可以自动close掉文件,而f = open()要自己写close。

文件的读取就三个函数 一个是f.read() 不指定参数就是读完,指定参数就是读多少个字符
在这里插入图片描述
在这里插入图片描述

另外一个是f.readline() 和 f.readlines(), f.readlines() 是读完所有行,他们的返回值都是字符串哦。

在这里插入图片描述

f.readline() 每调用一次读一行,那么我们是不是可以调用n次这个函数就可以读取n行了

def openFile(fileName, n):
    mystr=""
    with open(fileName, 'r', encoding='utf-8') as data:
        for i in range(n):
            mystr +=data.readline().lower()
    return mystr

因为题目说都当成小写字母统计所以用了f.readline()。lower方法 把这些字符串拼接起来

def statistics(txt,s):
    # dic = {}
    # for x in mystr:
    #     if x in s:
    #         dic[x] = dic.get(x,0) + 1
    dic ={x: mystr.count(x) for x in s}
    return dic

定义一个 空字典,和字母表如果 x(mystr的元素在字母表中)对应建的值加一 返回字典 dic[x] = dic.get(x,0) + 1 dic。get(a,b)方法 a是键 b是默认值

 def sort(dic):
    ls = sorted(dic.items(), key = lambda item : (-item[1],item[0]))
    return ls

dic.items()得到所有的键和值,因为是值的逆序所以是-item[1],同时要满足当次数一样是字母小的在前面所以lamba 表达式是key = lambda item : (-item[1],item[0]

1.4 总的代码实现

def openFile(fileName, n):
    ls =[]
    with open(fileName, 'r', encoding = 'utf-8') as data:
        # for i in range(n):
        #     ls.append(data.readline().lower())
        ls =[data.readline().lower() for i in range(n)]
    return ls
def statistics(txt,s):
    mystr = ' '.join(txt)
    # dic = {}
    # for x in mystr:
    #     if x in s:
    #         dic[x] = dic.get(x,0) + 1
    dic ={x: mystr.count(x) for x in s}
    return dic
def sort(dic):
    ls = sorted(dic.items(), key = lambda item : (-item[1],item[0]))
    return ls
        
fileName ="step2/The Old Man and the Sea.txt"
s = 'qwertyuiopasdfghjklzxcvbnm'
n = int(input())
txt = openFile(fileName, n)
dic = statistics(txt,s)
ls = sort(dic)
for x in ls:
    # print(f'{x[0]}的数量是{x[1]:>3}个')
    print('{} 的数量是 {:>3} 个'.format(x[0],x[1]))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值