返回
Python构建个人开销追踪器:实战指南与代码详解
python
2024-12-13 11:55:17
构建个人开销追踪器:Python实战指南
个人开销追踪器能有效帮助用户记录日常支出,了解资金流向并控制预算。本文将详细介绍如何用 Python 构建一个功能完善的开销追踪器,涵盖添加开销、查看开销、设置预算、保存和加载数据以及创建交互式菜单等核心功能。
一、 添加开销
功能 提示用户输入开销明细,包括日期、类别、金额和,并将每笔开销以字典形式存储在列表中。
实现步骤:
- 定义一个
add_expense()
函数,用于获取用户输入的开销信息。 - 使用
input()
函数提示用户输入日期(格式为YYYY-MM-DD)、类别、金额和。 - 对用户输入的金额进行校验,确保其为有效数字。
- 将获取的信息存储为字典,并添加到开销列表。
代码示例:
import datetime
import csv
expenses = []
def add_expense():
while True:
date_str = input("请输入开销日期 (YYYY-MM-DD): ")
try:
date = datetime.datetime.strptime(date_str, "%Y-%m-%d").date()
break
except ValueError:
print("日期格式错误,请重新输入.")
category = input("请输入开销类别 (例如 Food, Travel): ")
while True:
amount_str = input("请输入开销金额: ")
try:
amount = float(amount_str)
if amount < 0:
raise ValueError
break
except ValueError:
print("金额无效,请输入非负数字.")
description = input("请输入开销描述: ")
expenses.append({'date': date, 'category': category, 'amount': amount, 'description': description})
print("开销已添加.")
这段代码首先会校验日期的合法性,避免了无效的日期输入;其次会对金额做非负校验,提高了程序的健壮性。
二、 查看开销
功能描述: 检索并显示所有已存储的开销记录,并对数据进行有效性验证。
实现步骤:
- 定义一个
view_expenses()
函数。 - 遍历开销列表,逐条显示每笔开销的日期、类别、金额和描述。
- 在显示数据前,验证每条开销记录是否包含所有必需的字段(日期、类别、金额和描述)。 如果有缺失,则跳过该条记录或告知用户数据不完整。
代码示例:
def view_expenses():
if not expenses:
print("暂无开销记录.")
return
print("--- 开销记录 ---")
for expense in expenses:
if all(key in expense for key in ['date', 'category', 'amount', 'description']):
print(f"日期: {expense['date']}, 类别: {expense['category']}, 金额: {expense['amount']}, 描述: {expense['description']}")
else:
print("发现不完整的开销记录,已跳过。")
print("--- 结束 ---")
三、 设置和跟踪预算
功能描述: 允许用户设置每月预算,并计算已记录的总开销,与预算进行比较并给出提示。
实现步骤:
- 定义一个
set_budget()
函数,提示用户输入每月预算金额。 - 定义一个
track_budget()
函数,计算当前已记录的总开销。 - 比较总开销与预算,如果超出预算则显示警告,否则显示剩余可用金额。
代码示例:
budget = 0.0
def set_budget():
global budget
while True:
budget_str = input("请输入每月预算: ")
try:
budget = float(budget_str)
if budget <= 0:
raise ValueError
print(f"每月预算已设置为: {budget}")
break
except ValueError:
print("预算金额无效,请输入正数.")
def track_budget():
if budget == 0.0:
print("请先设置预算.")
return
total_expenses = sum(expense['amount'] for expense in expenses)
remaining_budget = budget - total_expenses
print(f"当前总开销: {total_expenses}")
if remaining_budget < 0:
print("警告: 您已超出预算!")
else:
print(f"您本月还剩余: {remaining_budget}")
四、 保存和加载开销
功能描述: 将所有开销保存到 CSV 文件,并在程序启动时从 CSV 文件加载开销数据。
实现步骤:
- 定义一个
save_expenses()
函数,将开销数据保存到 CSV 文件。每行数据包含日期、类别、金额和描述。 - 定义一个
load_expenses()
函数,从 CSV 文件加载开销数据。程序启动时调用此函数读取数据并填充开销列表。
代码示例:
EXPENSE_FILE = 'expenses.csv'
def save_expenses():
with open(EXPENSE_FILE, 'w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=['date', 'category', 'amount', 'description'])
writer.writeheader()
writer.writerows(expenses)
print(f"开销已保存到 {EXPENSE_FILE}")
def load_expenses():
global expenses
try:
with open(EXPENSE_FILE, 'r', newline='', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
try:
row['date'] = datetime.datetime.strptime(row['date'], "%Y-%m-%d").date()
row['amount'] = float(row['amount'])
expenses.append(row)
except (ValueError, KeyError) as e:
print(f"加载数据时遇到错误: {e}, 已跳过该行。")
continue
print("已从文件加载开销数据.")
except FileNotFoundError:
print("未找到保存的开销数据文件.")
load_expenses
函数增加了异常处理部分,如果加载数据过程中出现格式错误,会打印错误信息并跳过该行,提高了程序的容错性。
五、 创建交互式菜单
功能描述: 显示一个交互式菜单,允许用户选择不同的操作。
实现步骤:
- 定义一个
display_menu()
函数,显示操作选项。 - 提示用户输入选项编号并进行响应,根据用户选择调用相应的功能函数。
代码示例:
def display_menu():
print("\n--- 开销追踪器菜单 ---")
print("1. 添加开销")
print("2. 查看开销")
print("3. 跟踪预算")
print("4. 保存开销")
print("5. 退出")
while True:
choice = input("请输入您的选择 (1-5): ")
try:
choice = int(choice)
if 1 <= choice <= 5:
return choice
else:
print("无效选择,请输入 1-5 之间的数字。")
except ValueError:
print("无效输入,请输入数字。")
if __name__ == "__main__":
load_expenses()
while True:
choice = display_menu()
if choice == 1:
add_expense()
elif choice == 2:
view_expenses()
elif choice == 3:
if budget == 0.0 :
set_budget()
track_budget()
elif choice == 4:
save_expenses()
elif choice == 5:
save_expenses()
print("退出程序.")
break
这段代码在程序启动时会首先调用 load_expenses()
加载已保存的数据;在退出程序之前,会调用save_expenses
确保数据被保存。 另外,display_menu()
函数增加了输入校验,保证用户输入的是有效的数字选项。
至此,一个具备基本功能的个人开销追踪器就完成了。 通过这个项目,你不仅掌握了 Python 的基础知识,还了解了如何将这些知识应用到实际问题的解决中。
相关资源链接:
- Python
datetime
模块: https://docs.python.org/3/library/datetime.html - Python
csv
模块: https://docs.python.org/3/library/csv.html
希望这些