【头歌-Python】Python第八章作业(初级)

第1关:统计字母数量

任务描述

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

输入格式

输入一个正整数 n

输出格式

分行输出每个字母的数量,数量占3个字符宽度,居右对齐(参考示例输出)

示例 1

  • 输入:
10
  • 输出:
e 的数量是 179 个
a 的数量是 125 个
t 的数量是 121 个
h 的数量是 116 个
o 的数量是 101 个
s 的数量是  92 个
i 的数量是  91 个
n 的数量是  88 个
d 的数量是  77 个
r 的数量是  60 个
l 的数量是  49 个
f 的数量是  46 个
w 的数量是  45 个
m 的数量是  41 个
y 的数量是  40 个
u 的数量是  35 个
c 的数量是  32 个
b 的数量是  29 个
g 的数量是  20 个
k 的数量是  19 个
p 的数量是  13 个
v 的数量是   9 个
q 的数量是   1 个
x 的数量是   1 个
j 的数量是   0 个
z 的数量是   0 个

本作业各关涉及的文件下载链接如下:

CBOOK.csv
university.csv
info.csv
成绩单.csv
admit2.csv
score1034.json
The Old Man and the Sea.txt
The Great Learning.txt

参考代码

n = int(input())
dic = {} 
f = open("step2/The Old Man and the Sea.txt", "r")
for i, line in enumerate(f): 
    if i >= n: 
        break
    for c in line.lower(): 
        if c.isalpha(): 
            dic[c] = dic.get(c, 0)+1  

l = sorted(dic.items(), key=lambda x: (-x[1], x[0]))
for k,v in l:
    print("{} 的数量是 {:>3} 个".format(k, v)) 
for c in 'abcdefghijklmnopqrstuvwxyz':
    if c not in dic:
        print(f"{c} 的数量是 {0:>3} 个")

第2关:统计文章字符数

任务描述

读取附件中的文件(utf-8编码),统计并输出文章的前 n 行里共有多少字符(标点符号及换行符按字符统计),以及有多少个不重复的字符?
The Great Learning.txt

输入格式

输入一个正整数 n

输出格式

在一行中输出文章的前 n 行里共有多少字符和有多少个不重复的字符,中间用一个空格分隔

示例 1

  • 输入:1000
  • 输出:2484 432

参考代码

with open('step3/The Great Learning.txt', 'r', encoding='utf-8') as f:
    num = int(input())
    txt = ''.join(f.readlines()[:num])
    print(len(txt), len(set(txt)))

第3关:查询高校信息

任务描述

# 以下代码的作用是:
# 打开文件,创建一个名为Uname的对象,Uname.readlines()的作用是将文件内容逐行读取到列表中
# 文件的每行为一个以‘\n’结尾的字符串,做为列表ls的一个元素
# 列表ls的第一个元素ls[0]的内容是:'序号,学校名称,学校标识码,主管部门,所在地,办学层次,备注\n'
with open('university.csv','r',encoding='utf-8') as Uname:
    ls = Uname.readlines()
# print(ls)
# 输出:['序号,学校名称,学校标识码,主管部门,所在地,办学层次,备注\n', 
#        '1,北京大学,4111010001,教育部,北京市,本科,\n',
#        '2,中国人民大学,4111010002,教育部,北京市,本科,\n',
#        '3,清华大学,4111010003,教育部,北京市,本科,\n',
#        ……
#      ]

附件 ‘university.csv’ 中包含北京主要高校的序号、学校名称、学校标识码、主管部门、所在地、办学层次、备注等信息,以逗号分隔符。 参考提示代码,将文件内容逐行读取到列表中,根据用户输入的学校名,查询学校信息并输出。
university.csv

输入格式

输入一个学校名称

输出格式

输出学校详细信息(注意:行末不得有多余的换行)

示例 1

  • 输入:
北京大学
  • 输出:
序号,学校名称,学校标识码,主管部门,所在地,办学层次,备注
1,北京大学,4111010001,教育部,北京市,本科,

参考代码

with open('step4/university.csv', 'r', encoding='utf-8') as f:
    txt = f.readlines()
    s = input().strip()
    print(txt[0].strip())
    for line in txt:
        if s in line.split(',')[1]:
            print(line)
            break

第4关:查询高校名

任务描述

# 以下代码的作用是:
# 打开文件,创建一个名为Uname的对象,Uname.readlines()的作用是将文件内容逐行读取到列表中
# 文件的每行为一个以‘\n’结尾的字符串,做为列表ls的一个元素
# 列表ls的第一个元素ls[0]的内容是:'序号,学校名称,学校标识码,主管部门,所在地,办学层次,备注\n'
with open('university.csv','r',encoding='utf-8') as Uname:
    ls = Uname.readlines()
print(ls)

输出:

['序号,学校名称,学校标识码,主管部门,所在地,办学层次,备注\n', 
 '1,北京大学,4111010001,教育部,北京市,本科,\n',
'2,中国人民大学,4111010002,教育部,北京市,本科,\n',
 '3,清华大学,4111010003,教育部,北京市,本科,\n',
 ……
 ]

附件’university.csv’中包含北京主要高校的序号、学校名称、学校标识码、主管部门、所在地、办学层次、备注等信息,以逗号分隔符。
参考提示代码,将文件内容逐行读取到列表中,根据用户输入一个关键字,查询学校名称包含用户输入关键字的学校名并输出。
university.csv

输入格式

输入一个关键字

输出格式

包含关键字的全部学校名

示例

  • 输入:
中央
  • 输出:
中央财经大学
中央音乐学院
中央美术学院
中央戏剧学院
中央民族大学

参考代码

with open('step5/university.csv', 'r', encoding='utf-8') as f:
    name = input()
    for line in f.readlines():
        names = line.split(',')[1]
        if name in names:
            print(names)

第5关:通讯录读取

任务描述

info.csv
读取附件中的csv文件(通讯录信息),放入字典中(后两项以列表形式做为字典的值),并依次输出其中的信息。文件内数据不需要修改,输出时数据之间以空格间隔。

  • 编码格式使用utf-8
  • 输入‘A’时,按行输出文件信息
  • 输入‘D’时,直接输出字典内容
  • 输入其他数据时,输出“ERROR”

输入格式

输入一个字符

输出格式

张自强 12652141777 材 料
庚同硕 14388240417 自动化
王 岩 11277291473 文 法
杨 彪 18807390227 材 料
姚梦雪 14101628144 文 法
黄国宝 19439017361 材 料
麦啟聪 18844865547 信 息
陈天润 14622379485 材 料
项子烜 14226176598 文 法
任晋宏 15076627604 信 息
王玉云 11128829508 文 法
周佳乐 10826074903 文 法

输入输出示例

示例1:

  • 输入:A
  • 输出:
张自强 12652141777 材 料
.....

示例2:
输出:D
输出:

{'张自强': ['12652141777', '材\u3000料'], '庚同硕': ['14388240417', '自动化'],...}

参考代码

s = input()
if s not in 'AD':
    print('ERROR')   
else:
    with open('step6/info.csv', 'r', encoding='utf-8') as f:
        if s == 'A':
            print(f.read().replace(',', ' '))
        else:
            dic = {}
            for line in f.readlines():
                l = line.strip().split(',')
                dic[l[0]] = l[1:]
            print(dic)

第6关:JSON转列表

任务描述

读取附件中的JSON文件,转为列表输出。
score1034.json

输入格式

输入一个正整数 n

输出格式

输出列表的前n个元素,格式如示例所示

示例

  • 输入:
2
  • 输出:
[['姓名', '学号', 'C', 'C++', 'Java', 'Python', 'C#', '总分'], ['刘雨', '0121701100507', '20', '20', '20', '16', '20', '96']]

参考代码

import json

with open('step7/score1034.json', 'r', encoding='utf-8') as f:
    txt = json.loads(f.read())
    data = [['姓名', '学号', 'C', 'C++', 'Java', 'Python', 'C#', '总分']]
    for dic in txt:
        data.append(list(dic.values()))
    n = int(input())
    print(data[:n])

第7关:利用数据文件统计成绩

任务描述

利用附件中的成绩数据进行成绩统计,根据总分进行升序排序后,输出总分最低分和最高分,按总分升序输出前n名同学和后n名同学成绩信息(n为非负数,当n大于数据行数时,按实际行数输出),输出每题的平均成绩。
(注:数据文件中最后一列是总分,第4-9列每列为一道题的成绩,打开与关闭文件代码已经给出)
成绩单.csv

输入格式

输入一个正整数

输出格式

参考示例

示例

  • 输入:
2
  • 输出:
最低分0分,最高分30分

[['12529', '朱佳年', '0121701100203', '0', '0', '0', '0', '0', '0', '0'], ['12347', '李世祥', '0121701100208', '0', '0', '0', '0', '0', '0', '0']]
[['11916', '杨旺霖', '0121701100527', '5', '5', '5', '5', '5', '5', '30'], ['11955', '罗家威', '0121701100622', '5', '5', '5', '5', '5', '5', '30']]
[3.11, 3.24, 2.97, 3.24, 2.57, 3.24]

参考代码

with open('step8/成绩单.csv', 'r', encoding='utf-8') as f:
    n = int(input())
    ls = []
    for line in f.readlines():
        ls.append(line.strip('\n').split(','))
    ls.sort(key = lambda x:eval(x[9]))
    print('最低分{}分,最高分{}分'.format(ls[0][9], ls[-1][9]))
    print(ls[:n])
    if n <= len(ls):
        print(ls[(len(ls)-n):])
    else:
        print(ls)
    res = []
    for i in range(3, 9):
        num = 0
        for d in ls:
            num += eval(d[i])
        res.append(eval(f'{num/len(ls):.2f}'))
    print(res)

第8关:研究生录取数据分析A

任务描述

admit2.csv
本题附件包含500名国际高校的研究生申请人的相关信息和预测的录取概率数据。
下表为文件中字段及对应含义:

Serial NoGRE ScoreTOEFL ScoreUniversity RatingSOPLORCGPAResearchChance of Admit
编号1-500GRE分数托福分数本科大学排名分个人陈述分数推荐信分数本科绩点研究经历(1/0)录取概率(0-1之间)

研究经历:1代表有,0代表无

录取概率:0-1之间的小数,如0.73代表73%
请按照下列要求对文件中数据进行统计和分析,并严格按照下面所示格式输出结果。
(描述中示例仅为格式示例,数据与测试用例无关)

输入一个数据n

  • 1:如果n为’1’,抽取数据中录取概率大于等于80%的记录,计算其中大学排名评分大于等于4分的百分比,程序结束。
1
Top University in >=80%:11.11%
  • 2:如果n为’Research’,分别统计和输出录取概率大于等于90%的学生和录取概率小于等于70%的学生中,有研究经历的学生占比,程序结束。(百分比保留两位小数)
Research
Research in >=90%:91.03%
Research in <=70%:22.10%
  • 3:如果n为’2’,输出录取概率大于等于80%的学生中TOEFL分数的平均分,最高分和最低分,程序结束。(保留两位小数)
2
TOEFL Average Score:300.12
TOEFL Max Score:323.00
TOEFL Min Score:299.00
  • 4:如果n为’3’,输出录取概率大于等于80%的学生中绩点的平均分,最高分和最低分,程序结束。(保留三位小数)
3
CGPA Average Score:4.333
CGPA Max Score:4.910
CGPA Min Score:4.134
  • 5:如果非以上输入,则输出’ERROR’,程序结束。

参考代码

def readfile1(filename):
    with open(filename, 'r') as f:
        res = []
        for line in f.readlines()[1:]:
            ls = line.strip().split(',')
            if eval(ls[-1])>=0.8:
                res.append(ls)
        return res

def readfile2(filename):
    with open(filename, 'r') as f:
        ls1, ls2 = [], []
        for line in f.readlines()[1:]:
            ls = line.strip().split(',')
            if eval(ls[-1])>=0.9:
                ls1.append(ls)
            if eval(ls[-1])<=0.7:
                ls2.append(ls)
        return ls1, ls2
    
n = input()
filename = "step9/admit2.csv"
if n == '1':
    ls = readfile1(filename)
    count = 0
    for d in ls:
        if eval(d[1])>=4:
            count += 1
    print("Top University in >=80%%:%.2f%%"%(count/len(ls)*100))
elif n == 'Research':
    ls1, ls2 = readfile2(filename)
    count1 = len([0 for d in ls1 if d[-4]=='1'])
    count2 = len([0 for d in ls2 if d[-4]=='1'])
    print("Research in >=90%%:%.2f%%"%(count1/len(ls1)*100))
    print("Research in <=70%%:%.2f%%"%(count2/len(ls2)*100))
elif n == '2':
    ls = [eval(d[3]) for d in readfile1(filename)]
    print("TOEFL Average Score:%.2f"%(sum(ls)/len(ls)))
    print("TOEFL Max Score:%.2f"%max(ls))
    print("TOEFL Min Score:%.2f"%min(ls))
elif n == '3':
    ls= [eval(d[-5]) for d in readfile1(filename)]
    print("CGPA Average Score:%.3f"%(sum(ls)/len(ls)))
    print("CGPA Max Score:%.3f"%max(ls))
    print("CGPA Min Score:%.3f"%min(ls))
else:
    print("ERROR")

第9关:图书数据分析(A)

任务描述

CBOOK.csv
读取附件中的图书数据信息,并按照下列要求对数据进行统计分析(文件编码为utf-8)
文件包含信息格式:编号,书名,出版社,现价,原价,评论数,推荐指数
其中评论数形式为’1290021条评论’,书名可能包含书的简单描述,形如’雪落香杉树(福克纳奖得主,全球畅销500万册)’。

要求:

  • 输入一个字符串
  • 输入是’record’,统计输出图书数据的总数量,格式见示例
  • 输入是’rank’,需要再输入一个书籍编号,分别输出编号对应的书籍信息(编号,书名,出版社,现价,原价,评论数,推荐指数),格式见示例
    输入是’maxcomment’,输出评论数量最多的10本书的书名和评论数,按评论数量降序排序,格式见示例
  • 输入是’maxname’,需要再输入一个数值n,输出书名最长的n本书的名字,按书名长度降序排序,格式见示例
    非以上输入,输出’无数据’

下列示例仅表明输入输出格式,输出的数据不是本题答案数据

示例 1

  • 输入:record
  • 输出:600

示例 2

  • 输入:
rank
188
  • 输出:
188
全球通史:从史前史到21世纪(第7版修订版上下册,当当独家赠送全球通史主题笔记本)
北京大学出版社
59.6
96
286574条评论
100%推荐

示例 3

  • 输入:
maxcomment
  • 输出:
追风筝的人(2018年新版) 2444573条评论
活着(2017年新版) 2278231条评论
东野圭吾:解忧杂货店(胡歌、王俊凯、刘昊然倾情推荐,东野圭吾长篇小说代表作,这家店帮你找回内心流失的东西) 2132927条评论
.....
.....

示例 4

  • 输入:
maxname
2
  • 输出:
戒了吧,拖延症――写给年轻人的拖延心理学(人生有限,拖延有害,彻底告别拖延带来的恐惧和焦虑。学会时间管理,看这一本就足够,终结拖延症,你就已经成功超越了93%的人)
银火箭少年科幻系列(8册。亚洲首位“雨果奖”得主刘慈欣主编,根据《流浪地球》改编的电影大年初一上映。套装内图书获银河奖特等奖等多项国际大奖,全球销量超500万册)

示例 5

  • 输入:python
  • 输出:无数据

参考代码

def MaxName(l, n):
    res = sorted(l, key=lambda x:(len(x[1]), eval(x[3])), reverse=True)
    for d in res[:n]:
        print(d[1])
 
def MinName(l, n):
    res = sorted(l, key=lambda x:(len(x[1])))
    for d in res[:n]:
        print(d[1])
 
def PriceNow(l): 
    res = sorted(l, key=lambda x:eval(x[3]), reverse=True)
    for i in res[0][:-3]:
        print(i)
    for i in res[-1][:-3]:
        print(i)
 
def PriceOrgin(l):
    res = sorted(l, key=lambda x:eval(x[3]), reverse=True)
    for i in res[0][:-3]:
        print(i)
    for i in res[-1][:-3]:
        print(i)
 
def MaxComment(l): 
    res = sorted(l, key=lambda x:eval(x[-2][:-3]), reverse=True)
    for i in res[:10]:
        print(i[1], i[-2])
 
def MinComment(l):
    res = sorted(l, key=lambda x:eval(x[-2][:-3]))
    for d in res[:10]:
        print(d[1], d[-2])
 
def Rank(l):
    n = input()
    for d in l:
        if n == d[0]:
            for i in d:
                print(i)
            break
 
with open('step10/CBOOK.csv', 'r') as f:
    l = [line.strip().split(',') for line in f.readlines()[1:]]
    c = input().lower()

    if c == 'record':
        print(len(l))
    elif c == 'rank':
        Rank(l)
    elif c == 'maxname':
        n=eval(input())
        MaxName(l, n)
    elif c == 'minname':
        n = eval(input())
        MinName(l, n)
    elif c == 'nprice':
        PriceNow(l)
    elif c == 'oprice':
        PriceOrgin(l)
    elif c == 'maxcomment':
        MaxComment(l)
    elif c == 'mincomment':
        MinComment(l)
    else:
        print('无数据')

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年11月22日
下一篇 2023年11月22日

相关推荐