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

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

A1->[‘12’,‘05’,‘07’,‘04’]
A4->[‘23’,‘03’,‘11’]
A3 ->[‘12’,‘01’]
A2->[‘07’]

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
输出:
对不起,您输入的用户信息不存在。

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值保存,依照此规律依次计算。

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文件中的代码。

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

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

vote.txt文件内容:

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

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:请给出当选最有人气明星的姓名和票数

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名的学校信息,示例如下:


第一列为排名,第2列为学校名称,第3列为学校所属的国家,字段之间用逗号’,',隔开
程序读取data.txt文件内容,统计出现的国家个数以及每个国家上榜大学的数量及名称,输出结果格式示例如下:

英国: 5:牛津大学 剑桥大学 帝国理工学院 伦敦大学学院 爱丁堡大学
瑞士: 1:苏黎世联邦理工学院

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,其中有一些数据库操作功能的执行时间信息,如下所示:


其中第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

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
月亮河宽宽的河
一天我从你身旁过

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次后自动退出程序。

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个词及其词频,输出到屏幕上,每词一行,词和词频之间以英文冒号分隔。

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]))

11. 实现下面功能:(1)获取用户输入的一段文本,包含但不限于中文字符、中文标点符号及其他字符(2)用jieba的精确模式分词,统计分词后中文词语词频,具体为:将字符长度大于等于2的词语及其词频写入文件data2.txt,每行一个词语,词语和词频之间用冒号分隔。

import jieba

f = open('data2.txt', 'w')

s = input("请输入一个中文字符串,包含逗号和句号:")
k = jieba.lcut(s)
d1 = {}
for i in k :
	if len(i) >= 2 :
    	d1[i] = d1.get(i, 0) + 1
for j in d1 :
	f.write(j + ':' + str(d1[j]) + '\n')
f.close()

12. 实现下面功能:文件PY202.py里定义了一个字符串dela=‘-;:,.()"<>’,包含了需要去除的字符。获取用户输入的文本,去除字符串dela中的字符,用jieba精准分词后,统计并输出其中词语的个数。此外,本模板程序还将输出其他一些调试信息,请保留并按照提示给出相应输出,作为调试辅助。

import jieba
dela = '-;:,.()"<>'
s = input("请输入一句话:")
print("\n这句话是:{}".format(s))
for i in dela :
	s = s.replace(i, '')
word = jieba.lcut(s)
print("替换之后是:{}".format(s))
print("里面有 {}个词语。".format(len(word)))

  • 23
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值