Python编写记账程序脚本

it2025-08-17  15

创建account.py脚本,要求如下:

假设在记账时,有一万元钱 无论是开销还是收入都要进行记账 记账内容包括时间、金额和说明等 记账数据要求永久存储

import os import pickle from time import strftime

def save(fname): “用于记录收入” try: amount = int(input("金额: ")) comment = input("备注: ") except (KeyboardInterrupt, EOFError): print(’\nBye-bye’) exit(1) except ValueError: print(‘无效的金额’) return # 函数的return类似于循环的break,return直接结束函数,默认返回None

date = strftime("%Y-%m-%d") # 取出收支记录 with open(fname, 'rb') as fobj: records = pickle.load(fobj) # 得到最新余额 balance = records[-1][-2] + amount # 将收入情况追加为最后一笔记录 record = [date, amount, 0, balance, comment] records.append(record) # 将记录写回文件 with open(fname, 'wb') as fobj: pickle.dump(records, fobj)

def cost(fname): “用于记录开销” try: amount = int(input("金额: ")) comment = input("备注: ") except (KeyboardInterrupt, EOFError): print(’\nBye-bye’) exit(1) except ValueError: print(‘无效的金额’) return

date = strftime("%Y-%m-%d") # 取出收支记录 with open(fname, 'rb') as fobj: records = pickle.load(fobj) # 得到最新余额 balance = records[-1][-2] - amount # 将收入情况追加为最后一笔记录 record = [date, 0, amount, balance, comment] records.append(record) # 将记录写回文件 with open(fname, 'wb') as fobj: pickle.dump(records, fobj)

def query(fname): “用于查账” # 取出所有的收支记录 with open(fname, ‘rb’) as fobj: records = pickle.load(fobj)

# 打印表头 print('%-12s%-8s%-8s%-10s%-20s' % ('date', 'save', 'cost', 'balance', 'comment')) # 打印记录 for record in records: print('%-12s%-8s%-8s%-10s%-20s' % tuple(record))

def show_menu(): “主程序代码逻辑” funcs = {‘0’: save, ‘1’: cost, ‘2’: query} prompt = “”"(0) 存钱 (1) 开销 (2) 查询 (3) 退出 请选择(0/1/2/3): “”" fname = “account.data” # 如果记账文件不存在,则初始化它 if not os.path.exists(fname): init_data = [[strftime(’%Y-%m-%d’), 0, 0, 10000, ‘init data’]] with open(fname, ‘wb’) as fobj: pickle.dump(init_data, fobj)

while 1: try: choice = input(prompt).strip() except (KeyboardInterrupt, EOFError): choice = '3' # 如果用户按了ctrl+c或ctrl+d,则认为用户选了3 if choice not in ['0', '1', '2', '3']: print("无效的输入,请重试。") continue if choice == '3': print('\nBye-bye') break funcs[choice](fname)

if name == ‘main’: show_menu()

最新回复(0)