Python练习程序(三)函数练习--ATM模拟
来源:互联网 发布:淘宝网账号限制登录 编辑:程序博客网 时间:2024/06/05 03:57
功能要求:
- 额度15000
- 可以提现,手续费5%
- 记录消费流水
- 支持每月账单查询
- 提供还款接口
调用的相关模块:
import time #time模块,提供各种操作时间的函数time.strftime("%Y-%m-%d %X", time.localtime())'2015-12-15 23:35:26'
import getpass #getpass 模块 -> 命令行下输入密码的方法pwd = getpass.getpass('password: ')print pwd
import pickle #pickle模块,序列化Python对象#保存数据到 Pickle 文件>>> dic = {}>>> import pickle>>> with open('dic.pickle', 'wb') as f:... pickle.dump(dic, f)... #从Pickle文件读取数据>>> import pickle>>> with open('dic.pickle', 'rb') as f:... dic = pickle.load(f)...
1、用户数据通过字典序列化存入account.pickle
cat account.py #!/usr/bin/env python#coding=utf-8import pickleaccount = {'1001':{'name':'fgf','pw':123,'money':15000,'balance':15000}, '1002':{'name':'user','pw':123,'money':15000,'balance':15000}}f = file('account.pickle','wb')pickle.dump(account,f)f.close()with open('account.pickle', 'rb') as f: dic = pickle.load(f) f.close()print dic
2、Python程序
#!/usr/bin/env python#coding=utf-8import sys,pickle,getpass,time#日志函数def log(user,describe,fee,balance,**userinfo): time1 = time.strftime("%Y-%m-%d %X", time.localtime()) f = file('account.log','a') f.write("%s %s %s ¥%s ¥%s\n" %(time1,user,describe,fee,balance)) f.close() f1 = file('account.pickle','wb') pickle.dump(userinfo,f1) f1.close()#提现函数def withdraw(user,**userinfo): fee = int(raw_input("请输入提现金额:")) if fee % 100 ==0 and int(fee*1.05) <= userinfo[user]['balance']: charge = fee * 0.05 balance = userinfo[user]['balance'] - fee - charge userinfo[user]['balance'] = balance log(user,"取现(手续费%d)"%charge,fee,balance,**userinfo) print "你成功取现%d,收取手续费%s,剩余额度%s" %(fee,charge,balance) else: print "输入金额有误。"#还款函数def repay(user,**usrinfo): fee = int(raw_input("请输入还款金额:")) userinfo[user]['balance'] += fee balance = userinfo[user]['balance'] log(user,"信用卡还款",-fee,balance,**userinfo) print "你成功还款%d,当前可用额度%s" %(fee,balance)#账单查询def bills(user): f = file('account.log','r') time = raw_input("请输入查询的时间(格式:yyyy-mm):") match_yes = 0 #匹配标示 for line in f.readlines(): if user in line and time in line: print line, match_yes = 1 if match_yes == 0 : print"没有查询月份账单"with open('account.pickle','rb') as f: userinfo = pickle.load(f) f.close()while True: user = raw_input("\33[1;32;40m请输入用户名:\33[0m") i = 1 while userinfo.has_key(user): passwd = int(getpass.getpass("\33[1;32;40m请输入密码:\33[0m")) while passwd == userinfo[user]['pw']: i = 1 print "欢迎进入系统,请选择操作:" choice = int(raw_input("提现 1\t还款 2\t账单查询 3\t 额度查询 4\t 退出 0\n")) if choice == 1: withdraw(user,**userinfo) elif choice == 2: repay(user,**userinfo) elif choice == 3: bills(user) elif choice == 4: print "总额度:",userinfo[user]['money'],"当前额度",userinfo[user]['balance'] elif choice == 0: sys.exit() else: i = i + 1 print"密码错误!" if i == 4 : break else : print "没有这个账户。"
==============调用模块详细解释==============
python time模块import time time模块提供各种操作时间的函数 说明:一般有两种表示时间的方式: 第一种是时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的 第二种以数组的形式表示即(struct_time),共有九个元素,分别表示,同一个时间戳的struct_time会因为时区不同而不同strftime(...) strftime(format[, tuple]) -> string 将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出 python中时间日期格式化符号: %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示 %X 本地相应的时间表示 %Z 当前时区的名称 %% %号本身 time.strftime("%Y-%m-%d %X", time.localtime())Getpass 模块 -> 命令行下输入密码的方法getpass.getpass() :import getpasspwd = getpass.getpass('password: ')print pwd
序列化Python对象序列化的概念很简单。内存里面有一个数据结构,一个捕获了当前进度的数据结构需要在你退出的时候保存到磁盘上,接着在你重新启动的时候从磁盘上加载进来。pickle 模块是Python标准库的一部分。它很快; 它的大部分同Python解释器本身一样是用C写的。 它可以存储任意复杂的Python数据结构。----------------------保存数据到 Pickle 文件>>> dic = {} ①>>> import pickle>>> with open('dic.pickle', 'wb') as f: ②... pickle.dump(dic, f) ③... ②.使用open() 函数来打开一个文件。设置文件模式为'wb'来以二进制写模式打开文件。把它放入with 语句中来保证在你完成的时候文件自动被关闭。③.pickle模块中的dump()函数接受一个可序列化的Python 数据结构, 使用最新版本的pickle协议将其序列化为一个二进制的,Python特定的格式, 并且保存到一个打开的文件里。最新版本的pickle协议是二进制格式的。请确认使用二进制模式来打开你的pickle文件,否则当你写入的时候数据会被损坏。--------------------从Pickle文件读取数据>>> import pickle>>> with open('dic.pickle', 'rb') as f: ③... dic = pickle.load(f) ④... ③.pickle模块使用二进制数据格式,所以你总是应该使用二进制模式打开pickle文件。④.pickle.load()函数接受一个流对象, 从流中读取序列化后的数据,创建一个新的Python对象,在新的Python对象中重建被序列化的数据,然后返回新建的Python对象。pickle.dump() / pickle.load()循环的结果是一个和原始数据结构等同的新的数据结构。
0 0
- Python练习程序(三)函数练习--ATM模拟
- Python练习项目——模拟ATM机登录系统
- Python运维基础(3)程序大练习(ATM)
- python练习(三)
- python练习(三)
- Python程序练习3--模拟购物车
- python基础练习(三)
- matlab练习程序(模拟退火SA)
- matlab练习程序(模拟退火SA)
- 使用C模拟ATM练习switch..case用法
- JAVA基础作业练习—自定义异常之模拟ATM
- Python小练习三
- python 练习三
- ATM java基础练习
- ATM机 练习
- python练习小程序
- python小程序练习
- C# 小程序之新手练习(三)数组模拟约瑟夫环
- CentOs突然启动不了了,“Determining IP information for eth0…”及"Bringing up interface eth0:"解决方法
- 第十七周--实训周
- 针对java实验的思考(二)
- GitHub无法访问或访问缓慢解决办法
- 矢量切片综述1
- Python练习程序(三)函数练习--ATM模拟
- 冒泡算法复习
- Mysql 测试
- 虚拟机Linux下Oracle11g客户端安装
- 动态添加删除li
- 程序员之路——一个老程序员对刚上大学的学弟学妹的忠告
- 【郑轻】[1000]整数A+B
- LevelDb
- 在Arcmap中加载互联网地图资源的4种方法