计算机二级Python基本排序题-序号45(补充)

1. 文件"singup.txt"中保存了若干条参加运动会学生的报名记录,每条记录的形式为"班级号_学号",例如"A1_12",将每个班级报名情按参加运动会人数从多到少排列(假设不存在人数相同的情况)并输出,输出结果如下:

A1->['12','05','07','04']

A4->['23','03','11']

A3 ->['12','01']

A2->['07']

python 复制代码
def proc(stu_list): #定义函数
    d = {}
    for item in stu_list:
        r = item.split("_") #以"_"进行分隔
        a, b = r[0], r[1].strip() #提取出班级号和学号的信息
        if a in d:
            d[a] += [b] #"+"号用于组合列表
        else:
            d[a] = [b]
    lst = sorted(d.items(), key = lambda d:len(d[1]), reverse = True)
    return lst

f = open("signup.txt","r")        
stu_list = f.readlines() #返回列表类型
result = proc(stu_list) #调用函数
for item in result:
    print(item[0], '->', item[1])
f.close()

2. 在已定义好的字典pdict里有一些人名及其电话号码。请用户输入一个人的姓名,在字典中查找该用户的信息,如果找到,生成一个四位数字的验证码,并将名字、电话号码和验证码输出在屏幕上,如示例所示。如果查找不到该用户信息,则显示"对不起,您输入的用户信息不存在。"示例如下:

输入:

Bob

输出: Bob 234567891 1926

输入: bob

输出:

对不起,您输入的用户信息不存在。

python 复制代码
import random
random.seed(2)

pdict = {'Alice':['123456789'],
        'Bob':['234567891'],
        'Lily':['345678912'],
        'Jane':['456789123']}

name = input('请输入一个人名:')
if name in pdict:
    print(name, pdict[name][0], random.randint(1000, 9999)) 
else:
    print('对不起,您输入的用户信息不存在。')

pdict[name]返回的是键对应的值,即列表['xxx']

pdict[name][0]返回的是列表中的第一个元素,此时返回的是字符串

  • print()函数的标准格式:print(value1, value2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    value1, value2, ... 是要打印的值,可以是任意数量的参数。
    sep 是用于分隔多个值的字符串,默认是一个空格。
    end 是打印结束时要添加的字符串,默认是换行符 \n。
    file 是指定输出的文件对象,默认是标准输出流 sys.stdout。
    flush 是一个布尔值,用于指定是否刷新输出缓冲区,默认为 False。

3. 在考生文件夹下有个文件PY202.py,定义了一个6个浮点数的一维列表lt1和一个包含3个数的一维列表lt2。

示例如下:

lt1 = [0.69,0.292,0.33,0.131,0.61,0.254]

lt2 = [0.1,0.8,0.2]

在横线处填写代码,完成如下功能。计算lt1列表跟lt2列表的向量内积,两个向量X=[x1,x2,x3]和Y= [y1,y2,y3]的内积计算公式如下:

k=x1*y1 + x2*y2 + x3*y3

将每次计算的两组对应元素的值、以及对应元素乘积的累计和(k)的值显示在屏幕上,格式如下所示:

k=0.069 ,lt2[0]=0.100 ,lt1[0+0]=0.690

k=0.303 ,lt2[1]=0.800 ,lt1[0+1]=0.292

k=0.369 ,lt2[2]=0.200 ,lt1[0+2]=0.330

...(略)

计算方式如下:

第一步计算第一个k,分为3次累加计算:

k=lt2[0]*lt1[0+0];

k=lt2[0]*lt1[0+0]+lt2[1]*lt1[0+1];

k=llt2[0]*lt1[0+0]+lt2[1]*lt1[0+1]+lt2[2]*lt1[0+2]

最终得到最后一个k值保存

第二步计算第二个k,分为3次累加计算:

k=lt2[0]*lt1[1+0];

k=lt2[0]*lt1[1+0]+lt2[1]*lt1[1+1];

k=llt2[0]*lt1[1+0]+lt2[1]*lt1[1+1]+lt2[2]*lt1[1+2]

最终得到最后一个k值保存,依照此规律依次计算。

python 复制代码
img = [0.244, 0.832, 0.903, 0.145, 0.26, 0.452]
filter = [0.1,0.8,0.1]
res = []
for i in range(len(img) - 2) :
    k = 0
    for j in range(len(filter)) :
        k += filter[j] * img[j + i]
		print("k={:.3f} ,filter[{}]={:.3f} ,img[{}{}{}]={:.3f}".format(k, j, filter[j], i, '+', j, img[i + j]))
    res.append(k)
for r in res:
    print('{:<10.3f}'.format(r),end = '')

4. 获得用户的非数字输入,如果输入中存在数字,则要求用户重新输入,直至满足条件为止,并输出用户输入字符的个数,完善PY202.py文件中的代码。

python 复制代码
while True:
    s = input("请输入不带数字的文本:")
    for i in range(10):
        if str(i) in s:
            break
    else:
        break
print(len(s))

5. 使用字典和列表型变量完成最有人气的明星的投票数据分析。投票信息由考生文件夹下文件vote.txt给出,一行只有一个明星姓名的投票才是有效票。有效票中得票最多的明星当选最有人气的明星。

问题1:请统计有效票张数。

python 复制代码
f = open("vote.txt")
names = f.readlines()
f.close()
n = 0
for name in names:
    num = len(name.split()) #以空格为字符进行分割
    if num == 1:
        n += 1
print("有效票{}张".format(n))

问题2:请给出当选最有人气明星的姓名和票数

python 复制代码
f = open("vote.txt")
names = f.readlines()
f.close()
D = {}
for name in names:
    if len(name.split()) == 1:
		D[name[:-1]] = D.get(name[:-1], 0) + 1
l = list(D.items())
l.sort(key = lambda s : s[1], reverse = True)
name = l[0][0]
score = l[0][1]
print("最具人气明星为:{},票数为:{}".format(name,score))

6. 在考生文件夹下有个文件PY202.py,在省略号处填写一行或多行代码,完成如下功能。同时,在考生文件夹下有个文件data.txt,其中记录了2019年QS全球大学排名前20名的学校信息,示例如下:

1,麻省理工学院,美国

2,斯坦福大学,美国

3,哈佛大学,美国

...

第一列为排名,第2列为学校名称,第3列为学校所属的国家,字段之间用逗号',',隔开

程序读取data.txt文件内容,统计出现的国家个数以及每个国家上榜大学的数量及名称,输出结果格式示例如下:

英国: 5:牛津大学 剑桥大学 帝国理工学院 伦敦大学学院 爱丁堡大学

瑞士: 1:苏黎世联邦理工学院

...

python 复制代码
f = open('data.txt','r')
dic = {}
for line in f:
    line = line.strip().split(',')
    if len(line) < 3:
        continue
    dic[line[-1]] = dic.get(line[-1], []) + [line[1]]
unis = list(dic.items())
f.close()
for d in unis:
    print('{:>4}: {:>4} : {}'.format(d[0],len(d[1]),' '.join(d[1])))

" ".join()将列表中的字符串元素用空格连接成了一个新的字符串。

7. 考生文件夹下有个文件PY202.py,在省略号处填写一行或多行代码,完成如下功能。同时,在考生文件夹下有个文件out.txt,其中有一些数据库操作功能的执行时间信息,如下所示:

starting 0.000037 2102

After opening tables 0.000008 0.455

System lock 0.000004 0.227

Table lock 0.000008 0.455

其中第1列是操作的名字,第2列是操作所花费的时间,单位是秒,第3列是操作时间占全部过程的百分比,字段之间用逗号','隔开

修改考生文件夹下的文件PY202.py,读取out.txt文件里的内容,统计所有操作所花费的时间总和,并输出操作时间百分比最多的三个操作所占百分比的值,及其对应的操作名称,显示在屏幕上,如下所示:

the total execute time is 0.0017

the top 0 percentage time is 46.023,spent in "Filling schema table" operation

python 复制代码
sumtime = 0
percls = []
ts = {}
with open('out.txt', 'r') as f:
    for i in f:
        i=i.strip().split(',')
        ts[i[0]]=eval(i[2])
        sumtime+=eval(i[1])
print('the total execute time is ', sumtime)

tns = list(ts.items())
tns.sort(key=lambda x: x[1], reverse=True)
for i in range(3):
    print('the top {} percentage time is {}, spent in "{}" operation'.format(i, tns[i][1],tns[i][0]))

8. 让用户输入一首诗的文本,内部包含中文逗号和向号。

(1)用jieba库的精确模式对输入文本分词。将分词后的词语输出并以"/"分隔;统计中文词语数并输出:

(2)以逗号和句号将输入文本分隔成单句并输出,每句一行,每行20个字符宽,居中对齐。在(1)和(2)的输出之间,增加一个空行。示例如下:

输入:月亮河宽宽的河,一天我从你身旁过,

输出:月亮/河/宽宽的/河/一天/我/从/你/身旁/过

中文词语数是:10

月亮河宽宽的河

一天我从你身旁过

python 复制代码
import jieba
s = input("请输入一段中文文本,句子之间以逗号或句号分隔:")
slist = jieba.lcut(s)
m = 0

for i in slist:
   if i in ",。":
      continue
   m += 1
   print(i,end='/')   
      
print("\n中文词语数是:{}\n".format(m))

ss = ''
for i in s:
   if i in ',。':
      print('{: ^20}'.format(ss))
      ss = ''
      continue
   ss += i

9. 在考生文件夹下存在一个Python源文件PY202.py,请编写代码替换省略号,不可以修改已有代码,实现以下功能:

(1)定义一个列表persons,里面有一些名字字符串;

(2)在该列表中查找用户输入的一个名字字符串,如果找到,则生成一个四位数字的随机数组成的验证码,输出找到的名字字符串和验证码;如果找不到该字符串,则输出提示信息"对不起,您输入的名字不存在。";如果用户输入一个字母"q,则退出程序;

(3)显示提示信息后,再次显示"请输入一个名字:",提示用户输入,重复执行步骤2,执行3次后自动退出程序。

python 复制代码
import random as r
r.seed(0)
persons = ['Aele', 'Bob','lala', 'baicai']
flag = 3
while flag>0:
    flag -= 1
    name = input('请输入一个名字:')
    if name == 'q':
        break
    elif name in persons:
        num = r.randint(1000,9999)
        print('{} {}'.format(name, num))
    else:
        print('对不起,您输入的名字不存在。')

10. 在考生文件夹下存在一个Python源文件PY202.py和一个介绍玫瑰花的文本文件data1.txt。请编写代码替换省略号,可修改其他代码,实现下面功能:

从data1.txt中读入文本,去掉文中的中文号、分号、双引号、句号和双引号;用ieba库精确模式分词,分词后的结果以"/"分隔,输出到屏幕上;统计分词结果中长度大于1的中文词语出现的词频,并将最高词频的前5个词及其词频,输出到屏幕上,每词一行,词和词频之间以英文冒号分隔。

python 复制代码
import jieba
fuhao=[",",":","、","。",";",""","""]       
with open("data1.txt","r",encoding="utf-8") as f:
    all_txt=f.read()
    for ch in fuhao:
        all_txt=all_txt.replace(ch,'')
   
data=jieba.lcut(all_txt)
print('/'.join(data))
print('高频词top5如下:')
d={}
for i in data:
    if len(i)>=2:
        d[i]=d.get(i,0)+1
ls=list(d.items())
ls.sort(key=lambda x:x[1],reverse=True)
for s in ls[:5]:
    print('{}:{}'.format(s[0],s[1]))
相关推荐
数据智能老司机2 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机3 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机3 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机3 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i3 小时前
drf初步梳理
python·django
每日AI新事件3 小时前
python的异步函数
python
这里有鱼汤4 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook13 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室14 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三15 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试