利用Python将人姓名和所捐款数存入数据文件;读写文件,实现对捐款数据的统计(最大值、平均值)和排序

为啥要编写捐款管理程序,因为管理捐款的人已经穷死了

题目概述:编写一个捐款管理程序,实现将捐款人姓名和所捐款数存入数据文件;读写文件,实现对捐款数据的统计(最大值、平均值)和排序。要求对文件操作中可能出现的异常进行管理。

这道题的重点在将数据以字典的方式写入文件,再将内容从文件中读出来,将读出的字符流转换为字典的形式,再进行相关的数据操作

特别是将读取出来的字符流转换为字典形式,这个点整整卡了我一下午,只能说eval()函数真是个好东西。这是启发我的博客:
Python txt文件读取写入字典的方法(json、eval)

下面为源码

# encoding = 'UTF-8'

donor = {}


# 实现将5人的姓名和捐款数以键值对的方式存入文件
def add_donation():

    while True:
        name = input('请输入捐款人名字:')
        if name == '':
            break
        money = int(input("请输入捐款数:"))
        donor[name] = money
        # locals()[name]=money  # locals的作用:以字典的形式,返回当前函数内变量名和变量值
    with open('donations.txt', 'w+') as f:  # 'w+'覆盖写+可读写
        f.write(str(donor))  # 文件写入只能写入字符和二进制编码


# 捐款数据排序
def sort(dicts):
    donors = sorted(dicts.items(), key=lambda x: x[1], reverse=True)  # reverse--排序规则:reverse=True降序,reverse=False升序
    return donors


# 统计最大值
def maxmoney(dicts):
    maxmoney = max(dicts.values())
    return maxmoney


# 统计平均值
def avgmoney(dicts):
    len1 = len(dicts)  # 取字典中键值对的个数
    sum1 = sum(dicts.values())  # 取字典中键对应值的总和
    avg = sum1 / len1
    return avg


add_donation()  # 运行结果为,生成的txt文件里存在一个字典,字典里为5个键值对

try:
    with open('donations.txt', 'r') as f:  # 此时的f为字符串,需要将f转换为字典类型
        d = eval(f.read())  # eval()将读出字符流转换为可执行语句
        print('捐款的最大值:', maxmoney(d))
        print('捐款的平均值:', avgmoney(d))
        print('按捐款大小的排序有:', sort(d))

except:
     print('输入的文件有误')

觉得文章有用,请留下你的小赞赞
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值