用python写:琳琳上大学后将每天的消费支出项一行一项写在她的一个日记文件中,她的每个支出项目记录了支出日期、支出项目和金额。3个月之后,她想统计一下她的消费行为信息,请设计程序帮助她完成相应的查询和统计。 程序功能包括: (1)从文本文件读入所有n项支出项目,并依次输出所有支出项目。 (2)求出这n个支出项目中的最小、最大和总消费。 (3)按照日期找出某一天的所有消费。 (4)按照日期和支出项目找出该项目的消费。 (5)按照项目找出该支出项目的所有消费,例如要求给出在“鞋子”这一项上的总消费。 (6)按照支出项目消费递减的顺序输出每项的对应总消费。
时间: 2023-06-01 12:02:27 浏览: 131
这是一个比较复杂的程序,涉及到多个功能,需要分步骤实现。以下是一个可能的实现方案:
1. 从文件中读取所有支出项目
```python
def read_expenses(filename):
expenses = []
with open(filename, 'r') as f:
for line in f:
date, item, amount = line.strip().split(',')
expenses.append((date, item, float(amount)))
return expenses
```
这个函数将一个包含所有支出项目的文本文件读入到一个列表中,每个支出项目都是一个元组,包含日期、项目和金额三个信息。
2. 求出最小、最大和总消费
```python
def summarize_expenses(expenses):
total = 0
min_expense = float('inf')
max_expense = float('-inf')
for date, item, amount in expenses:
total += amount
if amount < min_expense:
min_expense = amount
if amount > max_expense:
max_expense = amount
return total, min_expense, max_expense
```
这个函数遍历所有支出项目,累加总消费,同时记录最小和最大消费。
3. 按照日期找出某一天的所有消费
```python
def find_expenses_by_date(expenses, date):
result = []
for d, item, amount in expenses:
if d == date:
result.append((item, amount))
return result
```
这个函数遍历所有支出项目,找出日期等于给定日期的项目,返回一个包含项目和金额的列表。
4. 按照日期和支出项目找出该项目的消费
```python
def find_expense_by_date_and_item(expenses, date, item):
for d, i, amount in expenses:
if d == date and i == item:
return amount
return 0
```
这个函数遍历所有支出项目,找到日期和项目都匹配的项目,返回其金额,如果找不到则返回0。
5. 按照项目找出该支出项目的所有消费
```python
def find_expenses_by_item(expenses, item):
result = []
for date, i, amount in expenses:
if i == item:
result.append(amount)
return result
```
这个函数遍历所有支出项目,找到项目等于给定项目的项目,返回一个金额列表。
6. 按照支出项目消费递减的顺序输出每项的对应总消费
```python
def sort_expenses_by_item(expenses):
items = {}
for date, item, amount in expenses:
if item not in items:
items[item] = 0
items[item] += amount
sorted_items = sorted(items.items(), key=lambda x: x[1], reverse=True)
return sorted_items
```
这个函数遍历所有支出项目,用一个字典记录每个项目的总消费,然后按照消费递减的顺序排序,返回一个按项目和对应总消费排序的元组列表。
使用这些函数,可以实现琳琳的消费行为信息查询和统计功能。例如:
```python
filename = 'expenses.txt'
expenses = read_expenses(filename)
total, min_expense, max_expense = summarize_expenses(expenses)
print('Total expenses:', total)
print('Minimum expense:', min_expense)
print('Maximum expense:', max_expense)
date = '2022-01-01'
expenses_on_date = find_expenses_by_date(expenses, date)
print('Expenses on', date, ':', expenses_on_date)
item = '鞋子'
expense_for_item = find_expenses_by_item(expenses, item)
print('Expenses for', item, ':', expense_for_item)
date = '2022-01-01'
item = '鞋子'
expense_on_date_and_item = find_expense_by_date_and_item(expenses, date, item)
print('Expense for', item, 'on', date, ':', expense_on_date_and_item)
sorted_expenses = sort_expenses_by_item(expenses)
print('Expenses by item:')
for item, total in sorted_expenses:
print(item, ':', total)
```
这段代码会依次输出总消费、最小和最大消费、某一天的所有消费、某一项目的所有消费、某一天某一项目的消费、按支出项目消费递减顺序输出所有项目和对应总消费。
阅读全文