作业12
1.函数对象优化多分支if的代码练熟
def login():
print('登录')
def transfer():
print('转账')
func_dic = {
'0': ['退出', None],
'1': ['登录', login],
'2': ['转账', transfer],
}
while True:
for k in func_dic:
print(k, func_dic[k][0])
choice = input('请输入命令编号:').strip()
if not choice.isdigit():
print('必须输入编号,傻叉')
continue
if choice == '0':
break
if choice in func_dic:
func_dic[choice][1]()
else:
print('输入的指令不存在')
2、编写计数器功能,要求调用一次在原有的基础上加一
温馨提示:
I:需要用到的知识点:闭包函数+nonlocal
II:核心功能如下:
def counter():
x+=1
return x
def number():
x=0
def counter():
nonlocal x
x += 1
return x
return counter
couter=number()
print(couter()) # 1
print(couter()) # 2
print(couter()) # 3
print(couter()) # 4
print(couter()) # 5
周末作业:
import os
user_info = {}
save_information = []
def check_login(func):
def inner(*args, **kwargs):
if not save_information:
print('小主人,请先登录好吧')
return
else:
func(*args, **kwargs)
return inner
def all_user_info():
with open('a.txt', mode='r', encoding='utf-8') as f:
for line in f:
user, pwd, money = line.strip().split(':')
user_info[user] = [pwd, money]
print(user_info)
def change_file(user_info, file_path):
with open(f'{file_path}.swap', 'wt', encoding='utf8') as f:
for k, v in user_info.items():
f.write(f'{k}:{":".join(map(str, v))}\n')
os.remove(file_path)
os.rename(f'{file_path}.swap', file_path)
def login():
all_user_info()
count = 0
while count < 3:
username = input('请输入用户名: ').strip()
# 2) 校验用户名是否存在
# 若 用户名不存在user_info字典中,则表示当前用户不存在
if username not in user_info:
print('当前用户不存在,请重新输入!')
register()
password = input('请输入密码: ').strip()
if password == user_info.get(username)[0]:
print('登录成功!')
save_information.append(username)
break
else:
print('登录失败!')
count += 1
@check_login
def check_banlance():
"""
查询余额
:return:
"""
users = save_information[0]
balance = user_info[users][1]
print(f'您当于账户余额:¥{balance}元')
@check_login
def withdraw():
"""
提现
:return:
"""
charge = input('请输入提现金额:').strip()
charge = int(charge)
users = save_information[0]
user_info[users][1] = int(user_info[users][1])
if user_info[users][1] >= charge:
user_info[users][1] -= charge
print('您已成功提现{}元'.format(charge))
else:
print('余额不足')
change_file(user_info, 'a.txt')
@check_login
def pay_money():
username=input('请输入充值的账户:').strip()
# 2) 校验当前传入的username用户是否存在
if username not in user_info:
print('用户不存在,结束程序!')
# 若用户不存在,则结束程序
return
# 3) 循环让用户输入充值的金额
while True:
money = input('请输入充值金额').strip()
# 若用户输入的不是数字,则让用户重新输入
if not money.isdigit():
print('输入的必须是数字!')
continue
money = int(money)
# 4) 给当前用户的金额加钱
user_info[username][1] = int(user_info[username][1])
user_info[username][1] += money
# 5) 将修改后的用户数据重新写入文件中
change_file(user_info, 'a.txt')
break
@check_login
def transfer():
users = save_information[0]
# 作业: 判断转账用户与收款用户是否存在
username=input('请输入转账用户:').strip()
if username not in user_info:
print('收款用户不存在')
return
transfer_money=input('请输入转账金额:').strip()
transfer_money=int(transfer_money)
# 1) 判断转账用户的金额是否 大于 等于 转账金额
user_info.get(users)[1]=int(user_info.get(users)[1])
if user_info.get(users)[1] >= transfer_money:
# 2)转账用户扣钱
user_info.get(users)[1] -= transfer_money
# 3)收款用户加钱
user_info.get(username)[1]=int(user_info.get(username)[1])
user_info.get(username)[1] += transfer_money
print('您已成功转账{}'.format(transfer_money))
# 4) 此时转账与收款用户的数据都已经修改过了,重新写入文件中
change_file(user_info, 'a.txt')
def register():
while True:
username = input('请输入用户名: ').strip()
if username not in user_info:
# 2、若用户不存在,则继续让用户输入密码,进行注册
password = input('请输入密码: ').strip()
re_password = input('请输入密码: ').strip()
# 3、判断两次密码是否一致
if password == re_password:
money = input('请输入注册金额:').strip()
if money.isdigit():
with open('a.txt', 'a', encoding='utf-8') as f:
f.write(f'{username}:{password}:{money}')
print(f'[{username}]注册成功')
break
else:
print('请输入数字类型')
else:
print('注册失败!')
else:
# 若存在,则让用户重新输入
print('当前用户已存在,请重新输入!')
def main():
func_dic = {
'0': ['退出', None],
'1': ['登录', login],
'2': ['查询余额', check_banlance],
'3': ['提现', withdraw],
'4': ['充值', pay_money],
'5':['转账',transfer],
'6': ['注册', register]
}
while True:
for k in func_dic:
print(k, func_dic[k][0])
choice = input('请输入命令编号:').strip()
if not choice.isdigit():
print('必须输入编号,傻叉')
continue
if choice == '0':
break
if choice in func_dic:
func_dic[choice][1]()
else:
print('输入的指令不存在')
if __name__ == '__main__':
main()

浙公网安备 33010602011771号