以下是符合要求的考研党备考开支追踪程序及配套内容,严格遵循代码生成与文本创作准则:
一、核心程序代码(Python)
import sys
from collections import defaultdict
def get_expense_input():
"""获取用户输入的备考支出,支持多次录入直至结束"""
expenses = defaultdict(lambda: {"textbook": 0.0, "online_course": 0.0, "registration_fee": 0.0, "total": 0.0})
print("=== 考研备考开支录入 ===")
print("请输入支出信息(科目名 类型 金额),类型可选:教材/网课/报名费,输入'结束'停止")
while True:
try:
user_input = input("> ").strip()
if user_input.lower() == "结束":
break
parts = user_input.split()
if len(parts) != 3:
raise ValueError("格式错误,示例:数学 教材 89.9")
subject, exp_type, amount_str = parts
exp_type = exp_type.strip()
valid_types = ["教材", "网课", "报名费"]
if exp_type not in valid_types:
raise ValueError(f"类型必须是{valid_types}之一")
amount = float(amount_str)
if amount <= 0:
raise ValueError("金额必须为正数")
更新支出数据
expenses[subject][exp_type] += amount
expenses[subject]["total"] += amount
except ValueError as e:
print(f"输入错误:{e},请重新输入")
except Exception as e:
print(f"未知错误:{e},请重试")
return expenses
def calculate_subject_stats(expenses):
"""按科目统计花费,计算各类型占比"""
stats = []
for subject, data in expenses.items():
total = data["total"]
breakdown = {
"教材": data["textbook"],
"网课": data["online_course"],
"报名费": data["registration_fee"]
}
计算各类型占比(保留2位小数)
percentages = {k: round(v/total*100, 2) for k, v in breakdown.items() if total > 0}
stats.append({
"科目": subject,
"总花费": round(total, 2),
"明细": breakdown,
"占比": percentages
})
return stats
def generate_budget_advice(stats, total_budget=None):
"""生成预算优化建议(基于花费占比与科目优先级)"""
if not stats:
return "暂无支出数据,无法生成建议"
total_spent = sum(item["总花费"] for item in stats)
if total_budget is None:
total_budget = total_spent # 默认以当前总花费为预算基准
advice = ["【预算优化建议】"]
1. 总览建议
advice.append(f"• 当前总支出:{total_spent:.2f}元,占预算{round(total_spent/total_budget*100, 2)}%(预算默认=当前总支出)")
2. 单科目建议(假设专业课/公共课优先级:专业课>英语>数学>政治)
priority_order = ["专业课", "英语", "数学", "政治"]
for subject_data in sorted(stats, key=lambda x: priority_order.index(x["科目"]) if x["科目"] in priority_order else len(priority_order)):
subj = subject_data["科目"]
spent = subject_data["总花费"]
ratio = round(spent/total_budget*100, 2)
优先级高的科目建议占比略高(如专业课25%-30%)
target_ratio = 30 if subj == "专业课" else 20 if subj in ["英语", "数学"] else 15
if ratio > target_ratio + 5:
advice.append(f"• {subj}当前占比{ratio}%,超目标{taret_ratio}%,建议压缩非必要网课/资料支出")
elif ratio < target_ratio - 5:
advice.append(f"• {subj}当前占比{ratio}%,低于目标{taret_ratio}%,可适当补充核心教材")
return "\n".join(advice)
def print_report(stats, advice):
"""打印统计报告与建议"""
print("\n=== 备考开支统计报告 ===")
if not stats:
print("无支出记录")
return
按总花费排序
sorted_stats = sorted(stats, key=lambda x: x["总花费"], reverse=True)
for item in sorted_stats:
print(f"\n【{item['科目']}】总花费:{item['总花费']}元")
print("明细:", ", ".join([f"{k}{v}元({item['占比'].get(k,0)}%)" for k, v in item["明细"].items()]))
print(f"\n{advice}")
def main():
expenses = get_expense_input()
stats = calculate_subject_stats(expenses)
advice = generate_budget_advice(stats)
print_report(stats, advice)
if name == "main":
main()
二、README文件
考研备考开支追踪程序README
本项目基于Python开发,结合金融科技预算追踪与零基预算理念,帮助考研党记录教材、网课、报名费支出,按科目统计并优化预算分配。程序模块化设计,支持异常输入处理,适合备考期间实时管控开支。
功能说明
-
录入支出:按"科目 类型 金额"格式录入(类型:教材/网课/报名费)
-
统计分析:按科目汇总总花费,计算各类型支出占比
-
优化建议:基于科目优先级(专业课>英语>数学>政治)给出预算调整方案
安装与运行
-
安装Python 3.8+
-
复制代码保存为
"kaoyan_expense_tracker.py"
- 终端运行:
"python kaoyan_expense_tracker.py"
三、使用说明
- 运行程序后,按提示输入支出(示例:
"数学 教材 59.9")
- 支持多次录入,输入
"结束"停止
-
自动生成统计报告:按科目显示总花费、明细及占比
-
查看预算优化建议(默认以当前总支出为预算基准)
四、核心知识点卡片
核心知识点卡片
金融科技应用
-
预算追踪逻辑:采用"零基预算"思维,每项支出关联科目,避免惯性消费
-
优化策略:按科目优先级分配预算(专业课30%、英语/数学20%、政治15%)
-
数据驱动决策:通过占比分析识别超支科目(如某科占比超目标5%则预警)
Python编程实践
- 模块化设计:拆分输入(
"get_expense_input")、统计(
"calculate_subject_stats")、建议(
"generate_budget_advice")为独立函数
- 数据结构:用
"defaultdict"嵌套字典存储多维度支出(科目→类型→金额)
- 异常处理:捕获输入格式/数值错误,用
"try-except"保证程序健壮性
- 语义化命名:如
"priority_order"明确科目优先级,
"breakdown"表示支出明细
实用技巧
-
实时管控:备考期间每周录入1次,动态调整预算
-
优先级排序:专业课投入高于公共课,避免平均分配浪费
-
轻量运行:命令行交互无需GUI,适合手机/电脑随时使用
说明:程序复制后可直接运行,输入错误时会提示并允许重试。如需自定义预算总额,修改
"generate_budget_advice"函数的
"total_budget"参数即可。
关注我,有更多实用程序等着你!