# 1、函数对象优化多分支if的代码练熟 def login(): print('登录') def transfer(): print('转账') def withdraw(): print('提现') def check(): print('查询') msg = { '0': ('退出', None), '1': ('充值', login), '2': ('转账', transfer), '3': ('提现', withdraw), '4': ('查询', check) } while True: for k,v in msg.items(): print('{} {}'.format(k,v[0])) cmd = input('请输入命令编号:').strip() if not cmd.isdigit(): print('请输入数字') if cmd == '0': break if cmd in msg: msg[cmd][1]() else: print('命令不存在') # 2、编写计数器功能,要求调用一次在原有的基础上加一 # 温馨提示: # I:需要用到的知识点:闭包函数+nonlocal # II:核心功能如下: # def counter(): # x+=1 # return x # 要求最终效果类似 # print(couter()) # 1 # print(couter()) # 2 # print(couter()) # 3 # print(couter()) # 4 # print(couter()) # 5 def counter1(): x = 0 def counter(): nonlocal x x += 1 return x return counter counter = counter1() print(counter()) print(counter()) print(counter()) print(counter()) print(counter()) # ====================周末作业==================== # 编写ATM程序实现下述功能,数据来源于文件db.txt # 0、注册功能:用户输入账号名、密码、金额,按照固定的格式存入文件db.txt # 1、登录功能:用户名不存在,要求必须先注册,用户名存在&输错三次锁定,登录成功后记录下登录状态(提示:可以使用全局变量来记录) #下述操作,要求登录后才能操作 # 1、充值功能:用户输入充值钱数,db.txt中该账号钱数完成修改 # 2、转账功能:用户A向用户B转账1000元,db.txt中完成用户A账号减钱,用户B账号加钱 # 3、提现功能:用户输入提现金额,db.txt中该账号钱数减少 # 4、查询余额功能:输入账号查询余额 user_info = {} user_flag = {} with open("db.txt", mode='rt', encoding='utf8') as f: for line in f: name, pwd,balance,count = line.strip().split(":") user_info[name] = [pwd,int(balance),int(count)] user_flag[name] = False def login(): while True: username = input("请输入账号:").strip() user_pwd = input("请输入密码:").strip() if username not in user_info: print("用户不存在") elif username in user_info and user_info[username][2] >= 3: print("你的账号已被锁定") continue elif (user_info[username][0] != user_pwd): user_info[username][2] += 1 print("密码错误") if user_info.get(username)[2] >= 3: print("你的账号已被锁定") with open("db.txt", mode='w', encoding='utf-8') as f2: for k,v in user_info.items(): f2.write('{}:{}:{}:{}\n'.format(k,v[0],v[1],v[2])) continue else: print("登陆成功") user_flag[username] = True msg = { '0': ('退出', None), '1': ('提现', withdraw), '2': ('转账', transfer), '3': ('充值', pay), '4': ('查询余额', check) } while True: for k in msg: print(k, msg[k][0]) cmd = input('请输入命令编号').strip() if cmd not in msg: print('请输入正确编号') continue elif cmd == '0': user_flag[username] = 0 break else: msg[cmd][1]() break def register (): while True: username = input('请输入注册账号:') if username in user_info: print('账号已存在') continue else: userpwd = input('请输入密码:').strip() userpwd1 = input('请确认密码:').strip() if userpwd == userpwd1: print('两次密码一致,注册成功') f.write('{}:{}:{}:{}\n'.format(username,userpwd,0,0)) break else: print('两次密码不一致') continue def transfer(): for i in user_flag: if user_flag[i] == True: name = i while True: B_user = input('请输入转入账号:') transfer_money = int(input('请输入转出金额:')) if B_user not in user_info: print('转入账户不存在') return if user_info[name][1] >= transfer_money: user_info[name][1] -= transfer_money with open('db.txt', mode='w', encoding='utf-8') as f: for k, v in user_info.items(): f.write('{}:{}:{}:{}\n'.format(k, v[0], v[1], v[2])) print("转账成功,您的余额为:{}".format(user_info[name][1])) break else: print('余额不足') def withdraw(): for i in user_flag: if user_flag[i] == True: name = i while True: withdraw_money = int(input('请输入提现金额:')) if user_info[name][1] >= withdraw_money: user_info[name][1] -= withdraw_money with open('db.txt', mode='w', encoding='utf-8') as f: for k, v in user_info.items(): f.write('{}:{}:{}:{}\n'.format(k, v[0], v[1], v[2])) print("提现成功,您的余额为:{}".format(user_info[name][1])) break else: print('余额不足') def check(): for i in user_flag: if user_flag[i] == True: name = i print('您的余额是:{}'.format(user_info[name][1])) def pay(): while True: for i in user_flag: if user_flag[i] == True: name = i num = int(input("请输入您充值金额:").strip()) user_info[name][1] += num with open('db.txt', mode='w', encoding='utf-8') as f: for k, v in user_info.items(): f.write('{}:{}:{}:{}\n'.format(k, v[0], v[1], v[2])) print("充值成功,您的余额为:{}".format(user_info[name][1])) cmd = input('是否继续充值?1:是,任意其他字符:否').strip() if cmd == '1': continue else: break msg = { '0':('退出',None), '1':('登陆',login), '2':('注册',register), } while True: for k in msg: print(k,msg[k][0]) cmd = input('请输入命令编号:') if cmd not in msg: print('请输入正确编号') continue elif cmd == '0': break else: msg[cmd][1]()