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()
输入:
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。
示例如下:
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 = '')
while True:
s = input("请输入不带数字的文本:")
for i in range(10):
if str(i) in s:
break
else:
break
print(len(s))
问题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))
1,麻省理工学院,美国
2,斯坦福大学,美国
3,哈佛大学,美国
…
第一列为排名,第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])))
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
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]))
(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
(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('对不起,您输入的名字不存在。')
从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]))