# 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('{}:{}:{}:{}
'.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('{}:{}:{}:{}
'.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('{}:{}:{}:{}
'.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('{}:{}:{}:{}
'.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('{}:{}:{}:{}
'.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]()