Python练习程序(三)函数练习--ATM模拟

功能要求:

  • 额度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-8
import pickle
 
account = {‘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-8
import 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 "没有这个账户。"

时间: 2024-11-03 21:09:24

Python练习程序(三)函数练习--ATM模拟的相关文章

Python学习心得(三)函数之任意数量实参、任意数量关键字实参、导入模块中的函数

#!/usr/bin/python # -*- coding:utf-8 -*- ''' 1.传递任意数量的实参 Python允许函数传入任意数量的实参,例如: *messages形参名中的*表示让Python创建一个空的名称为messages的元组,接收传入的所有值 ''' def get_person_message(*messages): concat = '' for message in messages: concat += ' ' + message print "\nShow P

Python 小程序,对文件操作及其他

下面是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等.比如说,从文件中读取一行数据,分别存放于列表中,再对列表进行操作,如去掉里面的重复项,排序等操作. 常见对文件中行进行操作: #这里列出两个常用的方法 方法01: 一次性读取所有行 >>> f = file('1.txt') >>> while 1: lines = f.readlines() if not lines: break for line in lines: print l

Python 小程序,对文件操作及其它

以下是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等.比方说,从文件里读取一行数据.分别存放于列表中,再对列表进行操作.如去掉里面的反复项.排序等操作. 常见对文件里行进行操作: #这里列出两个经常使用的方法 方法01: 一次性读取全部行 >>> f = file('1.txt') >>> while 1: lines = f.readlines() if not lines: break for line in lines: print

python小程序 atm模拟

包含启动程序start.py和atm.py模块 用户数据通过字典序列化存入userdata.pkl 用户操作记录文件userid.record(为每个用户保存一个记录文件) 商品价格文件goods_list 功能包含:取现 存钱 转账 购物 打印清单 其他说明:没有包含管理端程序(用于添加用户账号,商品上下架),密码验证用户可以自己开发. start.py如下: #!/usr/bin/python # -*- coding: utf-8 -*-   import sys import getpa

自动化运维Python系列(三)之基础函数和文件操作

函数作用 增强代码的重用性和可读性 在没有使用函数编程之前,我们可能一直遵循的都是面向过程编程,即根据业务逻辑从上到下实现各个功能,这样的做的坏处是代码可读性不强,大量冗余代码,而且执行效率不高:有了函数后,我们就可以将多次使用到的相同代码模块放在单独的函数定义中,在任何想要调用它的地方随时调用,这就叫做函数式编程. 面向对象编程其实就是对函数进行再分类和封装,让开发"更快更好更强..." 函数的定义 def 函数名(参数): ... 函数体 ... 返回值 函数的定义主要有如下要点:

python: 怎样写一个函数把名字大写并变成下面这样——字典与三引号

例题:python: 怎样写一个函数把名字大写并变成下面这样? 字典+列表:将每个字母以列表形式存在字典里,分六次打印输出: dic = { } dic['C']=[ ' CCCC ', ' C C', 'C ', 'C ', ' C C', ' CCCC ' ] dic['A']=[ ' A ', ' A A ', ' A A ', ' AAAAAAA ', ' A A ', 'A A' ] dic['T']=[ 'TTTTTTT', ' T ', ' T ', ' T ', ' T ', '

python cookbook第三版学习笔记九:函数

接受任意数量参数的函数. 当传入函数的参数个数很多的时候,在函数定义的时候不需要为每一个参数定义一个变量,可以用*rest的方式来包含多余的参数. 如下面的代码,*rest包含了2,3,4这3个参数.且可以迭代访问.在这个例子中,rest其实就是其他位置参数组成的一个元组 def avg(first,*rest):     for i in rest:         print i     average=(first+sum(rest))/(1+len(rest))     print av

python基础(三)----字符编码以及文件处理

字符编码与文件处理 一.字符编码 由字符翻译成二进制数字的过程 字符--------(翻译过程)------->数字 这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码. 字符编码的发展史 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可以表示256个字符 ASCII最初只用了后七位,127个数字,已经完全能够代

《Python入门》第一个Python Web程序——简单的Web服务器

上一篇讲了<Python入门>Windows 7下Python Web开发环境搭建笔记,接下来讲一下Python语言Web服务的具体实现:第一个Python Web程序--简单的Web服务器. 与其它Web后端语言不同,Python语言需要自己编写Web服务器. 如果你使用一些现有的框架的话,可以省略这一步: 如果你使用Python CGI编程的话,也可以省略这一步: 用Python建立最简单的web服务器 利用Python自带的包可以建立简单的web服务器.在DOS里cd到准备做服务器根目录