练习十 字典练习
1. 股票交易金额计算
编写一个能计算股票交易金额的小程序。
股票信息.csv文件中存放了股票代码、股票名称、股票价格和涨跌幅四列的信息,逗号分隔。
输入需要购买的股票代码和股数 计算购买需要的金额(股票价格*股数
)以及佣金(金额*0.003
) 提示:金额和佣金显示两位小数 若代码不存在,则显示代码错误
f1=open("test/股票信息.csv","r",encoding="utf8")
gpzd={}
x=input("股票代码")
y=eval(input("股数"))
#代码开始
for i in f1.readlines():
i = i.strip().split(",")
je = eval(i[2]) * y
yj = je * 0.003
gpzd[i[0]]=[je,yj]
if gpzd.get(x):
print("金额{:.2f}佣金{:.2f}".format(gpzd[x][0],gpzd[x][1]))
else:
print("代码错误")
#代码结束
f1.close()
2. 超市销售计算
test文件夹下的超市商品.csv中记录了商品的信息,如图所示,第一列为条形码,第六列为商品售价
用户输入购买商品的条形码和数量, 若条形码正确,显示其金额。(数量*售价
保留两位小数) 若用户输入错误的条形码,显示条形码错误
txm=input("条形码")
sl=eval(input("数量"))
f1=open("test/超市商品.csv","r",encoding="utf8")
#代码开始
zd = {}
for i in f1.readlines():
i = i.strip().split(",")
je = eval(i[5]) * sl
zd[i[0]]=je
if zd.get(txm):
print("金额{:.2f}".format(zd[txm]))
else:
print("条形码错误")
#代码结束
3. 银行种类统计
test文件夹的银行信息.csv如下所示:每行显示银行的编号,名称,省份,城市和类别信息。
统计每种类别的银行个数,按个数从高到低排序,输入整数n,输出前n种银行的类别和个数,例如输入3,输出如下所示: 农村信用联社 35295 中国农业银行 18240 中国建设银行 14817
f1=open("test/银行信息.csv","r",encoding="utf8")
#代码开始
yhlb = {}
for i in f1.readlines():
i = i.strip().split(",")
yhlb[i[-1]]=yhlb.get(i[-1],0)+1
yhlb = list(yhlb.items())
yhlb.sort(key=lambda x:x[1],reverse=True)
#代码结束
n=eval(input())
for x in yhlb[:n]:
print(x[0],x[1])
4. 国债收益计算
test文件夹的国债信息.csv中记录了国债的信息,如图所示,第一列为国债编号,第四列为年利率(需要除以100)
用户输入国债编号和购买金额,显示其年收益。(保留两位小数) 若用户输入错误的编码,显示国债编号错误
gzbm=input("国债编号")
je=eval(input("金额"))
f1=open("test/国债信息.csv","r",encoding="utf8")
#代码开始
zd = {}
for i in f1.readlines():
i = i.strip().split(",")
zd[i[0]] = eval(i[3]) * je / 100
if zd.get(gzbm):
print("年收益{:.2f}".format(zd[gzbm]))
else:
print("国债编号错误")
#代码结束
5. 十二金钗的出场次数
统计红楼梦.txt文件中十二金钗的出现次数并按从高到低的顺序显示出场次数最高的五位的姓名和出场次数
提示: 使用文件对象.read()可以返回文件的所有文本 不要用结巴分词,字符串的count(指定字符)方法可以返回字符串中指定字符的个数
f1=open("test/红楼梦.txt","r",encoding='utf-8')
xm=["黛玉","宝钗","元春","探春","湘云","妙玉","迎春","惜春","凤姐","巧姐","李纨","可卿"]
#代码开始
txt = f1.read()
zd = {}
for i in xm:
zd[i] = txt.count(i)
lb = list(zd.items())
lb.sort(key=lambda x:x[1],reverse=True)
for i in range(5):
print(lb[i][0],lb[i][1])
#代码结束
f1.close()
6. 计算蛋白质质量
蛋白质质量的文件Dbzzl.txt如图所示,前面的字母表示蛋白质的种类,后面的数字表示蛋白质的质量 编写程序,输入一段蛋白质字符串,要求根据文件dbzzl.txt计算并显示该质量,要求精确到小数点后第3位。若输入的字符串中有其他字符,显示输入错误。 例如,输入SKADYEK,输出质量821.392 输入S!ADYEK,输出输入错误
dbz=input("输入蛋白质字符串")
f1=open("test/dbzzl.txt")
#代码开始
zd = {}
for i in f1.readlines():
i = i.strip().split(" ")
zd[i[0]] = eval(i[-1])
n = 0
s = 0
for i in dbz:
if zd.get(i):
s += zd[i]
n += 1
if n == len(dbz):
print("质量{:.3f}".format(s))
else:
print("输入错误")
#代码结束
7. 班级成绩统计
列表score中记录了学生的信息 班级,姓名,语文,数学,英语 数据如下
计算每个同学的平均成绩 建立字典,按平均成绩统计每个班级的总成绩。
xsxx=[]
def srsj():
sj=input("")
while(len(sj)>0):
x=sj.split(",")
xsxx.append([x[0],x[1],eval(x[2]),eval(x[3]),eval(x[4])])
sj=input("")
srsj()
#代码开始
bjcj = {}
for i in xsxx:
pj = (i[2] + i[3] + i[4]) / 3
bjcj[i[0]]=bjcj.get(i[0],0)+pj
#代码结束
for x in bjcj:
print("班级{}\t{:.2f}".format(x,bjcj[x]))
8. 出现次数最多的数
输入多个非零的整数,以0结束。 请你编一个程序求出它们中出现次数最多的数。
输入1 1 1 2 3 2 0 输出1 若有多个数的出现次数相同,均为最多,则输出其中最小的数。
输入10 1 10 20 30 20 0 输出10
#代码开始
zd = {}
while True:
x = eval(input())
if x == 0:
break
zd[x]=zd.get(x,0)+1
lb = list(zd.items())
lb.sort(key=lambda x:x[0],reverse=False)
lb.sort(key=lambda x:x[1],reverse=True)
print(lb[0][0])
#代码结束