Python程序设计 字典(二)

实验十 字典

1. 统计文档中作者作品数量

编写一个能计算文档《中学诗词.txt》中各位作者作品数量的程序。 遍历文档中每一行,提取作者的姓名,将其作为键加入到字典中,字典的值为作品数量。 然后将字典转换为二维列表,按作品数量的降序排列。

字典的操作

字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示 d = {key1 : value1, key2 : value2 } 建立空字典 d={} 向字典添加新内容的方法是增加新的键/值对 d["范仲淹"]=1 则d为{"范仲淹":1} 修改键值对的方法为 d["范仲淹"]=2 则d为{"范仲淹":2} d["范仲淹"]的值为2

d.get(key,default)键存在则返回相应值,否则返回默认值

字典转换为二维列表

lt = list(d.items()) 可将字典转换为二维列表, 二维列表的每项值为列表,列表的第一项为字典的键,第二项为字典的值

f1=open("sy9//中学诗词.txt","r",encoding='utf-8')
#代码开始
sr = {}
for i in f1:
    i = i.strip()
    if " " in i and "," not in i and "。" not in i:
        xm = i[i.rfind(" ")+1:]
        sr[xm]=sr.get(xm,0)+1
lt = list(sr.items())
lt.sort(key=lambda x:x[1],reverse=True)
#代码结束
for i in lt:
    print(i[0],i[1])
f1.close()

2. 候选人票数统计

编写一个能统计候选人票数的小程序。

多人对若干个候选人投票。 循环输入候选人的名字,将其存入到列表tp中,直到输入end为止 计算每个候选人的得票数,按从高到低显示名次、姓名、票数

tp=[]
x=input("")
while(x!="end"):
    tp.append(x)
    x=input("")
#代码开始
items = []
s = {i for i in tp}

lis = list(s)
for i in lis:
    n = 0
    for j in tp:
        if i == j:
            n += 1
    items.append([i,n])
items.sort(key=lambda x:x[1],reverse=True)
#代码结束
for i in range(len(items)):
    print("第{}名姓名{}票数{}".format(i+1,items[i][0],items[i][1]))

3. 会员会费计算

编写一个能计算会员会费的小程序。 某网站可以充值影视会员和体育会员。 影视会员为影视黄金会员(会费199)和影视星钻会员(会费399) 体育会员为体育大众会员(会费98)和体育专业会员(会费198) 会员名单.txt文件如下所示,计算并显示每人的姓名和会费

注意:使用字典来存放不同的会费标准

f1=open("sy9//会员名单.txt","r",encoding="utf8")
#代码开始
d = {"影视黄金会员":199,"影视星钻会员":399,"体育大众会员":98,"体育专业会员":198}
for i in f1.readlines():
    i = i.strip().split(",")
    name = i[0]
    sum1 = d.get(i[1],0) + d.get(i[2],0)
    print(name,sum1)

#代码结束
f1.close()

4. 职工工资计算

编写一个计算职工工资的小程序 列表zg中存储了员工的姓名、基本工资、分公司和部门信息 格式如下(逗号分隔) mike,9200,北京,销售部 各分公司的津贴标准如下:北京5000上海4000广州3000) 各部门的津贴标准如下:销售部2000经理室3000财会部1000 计算每位员工的工资:基本工资加上分公司津贴和部门津贴 提示:可以分别用两个字典存放津贴。 将每位员工的姓名和工资存放到列表yfgz中 再按工资的降序排列,并显示出来,每行的显示格式为 姓名harry工资16700

zg=[]
xx=input("")
while(xx!="end"):
    sj=xx.split(',')
    zg.append([sj[0],eval(sj[1]),sj[2],sj[3]])
    xx=input("")
#代码开始
cs = {"北京":5000,"上海":4000,"广州":3000}
bm = {"销售部":2000,"经理室":3000,"财会部":1000}
yfgz = []
for i in zg:
    s = i[1]+cs[i[2]]+bm[i[3]]
    yfgz.append([i[0],s])
yfgz.sort(key=lambda x:x[1],reverse=True)
#代码结束
for x in yfgz:
    print("姓名"+x[0]+"工资"+str(x[1])) 

5. 文件币种兑换计算

编写一个根据汇率兑换文件的汇率进行外币兑换人民币的小程序。 sy9文件夹下《汇率兑换.txt》文件如下图所示 每行显示1外币名称(外币编码)=汇率人民币

根据这些信息建立一个字典,键为外币编码,值为汇率(数值) 例如,第一项为{"HKD":0.9036} 循环输入需要兑换的外币代码和金额 例如hkd1000(可以是小写或大写代码) 显示转换后的人民币金额 人民币903.60(保留两位小数) 如果输入的外币代码错误或数字不对,给出相应的提示 循环输入,直到输入0为止

f1=open("sy9//汇率兑换.txt","r",encoding="utf-8")
bzzd={}
#代码开始
for i in f1.readlines():
    i = i.strip()
    dh = i[i.find("(")+1:i.find(")")]
    hl = eval(i[i.find("= ")+2:i.find(" 人民币")])
    bzzd[dh]=hl

while True:
    x = input()
    if x == "0":
        break
    dh = x[:3].upper() # 小写字母转大写字母
    sl = x[3:]
    if dh not in bzzd.keys():
        print("币种错误")
    elif sl.isdigit() == False:
        print("数字错误")
    else:
        print("人民币{:.2f}".format(eval(sl) * bzzd.get(dh,0)))
#代码结束
f1.close()
    

6. 饮品销售计算

编写一个计算购买饮品金额的小程序。

nc.csv文件中存放某奶茶店的各饮品的编号、名称和价格如下所示

编写程序,首先显示所有饮品的序号、名称和价格。 循环输入饮品的编号和数量,直到输入编号为00。系统输出总计的金额。 若输入饮品的编号错误,系统会显示编码错误,但仍可继续输入。

 

f1=open("sy9//nc.csv","r",encoding="utf8")
#代码开始
zd = {}
for i in f1.readlines():
    i = i.strip().split(",")
    print("编号{}饮品{}价格{}".format(i[0],i[1],i[2]))
    zd[i[0]]=eval(i[2])

je = 0
x = input("请选择饮品")
while x != "00":
    if x in zd.keys():
        n = eval(input("请输入数量"))
        je += n * zd[x]
    else:
        print("编码错误")
    x = input("请选择饮品")

#代码结束
print("应付{}元".format(je))

 7. 统计文件词语的词频

编写一个能统计文档中词语词频小程序。 宋词文件如下所示:

统计文件中词频最高的15个词语(除了词牌名和作者) 注意:标题行的空格是全角空格" "(可复制此空格) 由于有一个词牌名为东风第一枝,需要将文件中的词牌名删除。(否则会多一个东风)

jieba库分词

jieba是Python中一个重要的第三方中文分词函数库 Jieba库的分词原理是利用一个中文词库,将待分词的内容与分词词库进行比对,通过图结构和动态规划方法找到最大概率的词组。 jieba.lcut(s) 精确模式对字符串s分词,产生一个列表

import jieba
f1= open("sy9//宋词.txt", "r")
#代码开始
txt = f1.read()
pc = set()
f1.seek(0,0)
for i in f1:
    if " " in i and "," not in i and "," not in i and "。" not in i:
        a,b = i.split(" ")
        pc.add(a)
        pc.add(b)
for i in ",.?!,。?!":
    txt = txt.replace(i," ")

words = jieba.lcut(txt)
zd = {}
pc = pc|{"吴文英","姜夔"}
for i in words:
    if len(i)>1 and i not in pc:
        zd[i]=zd.get(i,0)+1
zd["东风"]=zd.get("东风",0)-1
items = list(zd.items())
items.sort(key=lambda x:x[1],reverse=True)
#代码结束
for i in range(15):
    print("{}{}".format(items[i][0],items[i][1]))

 8. 宋词文件词云图片

根据宋词文件生成一个词云图片文件,存放在sy9文件夹的pict文件夹下的sc1.png 要求图片宽1000高700背景颜色白色最多300个词 注意:字体使用sy9文件夹下的simhei.ttf字体文件

生成词云图片

wordcloud库概述 wordcloud是python的一个三方库,称为词云也叫做文字云,是根据文本中的词频,对内容进行可视化的汇总.

wordcloud.WordCloud(参数)

font_path : string  #字体路径,需要展现什么字体就把该字体路径+后缀名写上, 如:font_path = 'sy9//simhei.ttf’

width : int (default=400) #输出的画布宽度,默认为400像素

height : int (default=200) #输出的画布高度,默认为200像素

background_color : color value (default=”black”) #背景颜色,如background_color='white',背景颜色为白色

max_words : number (default=200) #要显示的词的最大个数

import jieba
import wordcloud
f1= open("sy9//宋词.txt", "r")
#代码开始
txt = f1.read()
pc= set()
f1.seek(0,0)
for i in f1:
    if " " in i:
        cp=i[:i.find(" ")]
        pc.add(cp)
        xm = i[i.find(" ")+1:].strip("\n")
        pc.add(xm)
f1.close()
for i in pc:
    txt = txt.replace(i,"")
zd = {}
words = jieba.lcut(txt)
for i in words:
    if len(i) > 1:
        zd[i] = zd.get(i,0)+1
        
w=wordcloud.WordCloud(font_path="sy9//simhei.ttf",background_color="white",max_words=300,width=1000,height=700)
w.generate_from_frequencies(zd)
#代码结束
w.to_file("sy9//pict//sc1.png")
  • 36
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值