1.编写计数器功能,要求调用一次在原有的基础上加1
def func():
x=0
def counter():
nonlocal x
x+=1
return x
return counter
counter = func()
print(counter())
print(counter())
print(counter())
print(counter())
print(counter())
2.周末作业
编写ATM程序实现下述功能,数据来源于文件db.txt
0、注册功能:用户输入账号名、密码、金额,按照固定的格式存入文件db.txt
1、登录功能:用户名不存在,要求必须先注册,用户名存在&输错三次锁定,登录成功后记录下登录状态(提示:可以使用全局变量来记录)
下述操作,要求登录后才能操作
1、充值功能:用户输入充值钱数,db.txt中该账号钱数完成修改
2、转账功能:用户A向用户B转账1000元,db.txt中完成用户A账号减钱,用户B账号加钱
3、提现功能:用户输入提现金额,db.txt中该账号钱数减少
4、查询余额功能:输入账号查询余额
import os
def recharge():
''' 充值功能'''
name_inp = input("请输入要充值的账号>")
money_inp = input("请输入要充值的金钱>")
with open("db.txt","r",encoding="utf-8") as f ,
open(".db.txt.swap","w",encoding="utf-8") as f1:
for line in f :
if name_inp in line :
name,pwd,money = line.strip().split(":")
new_money = int(money_inp)+int(money)
f1.write(line.replace(money,str(new_money)))
else:
f1.write(line)
os.remove("db.txt")
os.rename(".db.txt.swap","db.txt")
def transfer():
'''转账功能'''
transfer_name_inp = input("请输入转账人姓名:")
collector_name_inp = input("请输入收账人姓名:")
money_inp = input("请输入转账金额")
with open("db.txt","r",encoding="utf-8") as f ,
open(".db.txt.swap","w",encoding="utf-8") as f1:
for line in f :
if transfer_name_inp in line :
transfer_name,pwd,transfer_money=line.strip().split(":")
new_money = int(transfer_money)-int(money_inp)
f1.write(line.replace(transfer_money,str(new_money)))
elif collector_name_inp in line:
collector_name,pwd,collector_money=line.strip().split(":")
new_money = int(collector_money)+int(money_inp)
f1.write(line.replace(collector_money,str(new_money)))
else:
f1.write(line)
os.remove("db.txt")
os.rename(".db.txt.swap","db.txt")
def cash_withdrawal():
'''提现功能'''
name_inp = input("请输入提现账号的姓名:")
money_inp = input("请输入提现的金额:")
with open("db.txt","r",encoding="utf-8") as f ,
open(".db.txt.swap","w",encoding="utf-8") as f1:
for line in f:
if name_inp in line:
name,pwd,money = line.strip().split(":")
new_money = int(money)-int(money_inp)
f1.write(line.replace(money,str(new_money)))
else:
f1.write(line)
os.remove("db.txt")
os.rename(".db.txt.swap","db.txt")
def query():
'''查询功能'''
name_inp=input("请输入你要查询的用户名:")
with open("db.txt","r",encoding="utf-8")as f :
for line in f :
name,pwd,money = line.strip().split(":")
if name_inp in line:
print(money)
break
def register():
'''注册'''
username = input("请输入注册的用户名:")
with open("db.txt","r",encoding="utf-8") as f:
res = f.read()
if username in res :
print("该账号已存在,注册失败")
else:
password1 = input("请输入注册的密码:")
password2 = input("请再输一次密码:")
money = input("请输入你的初始金额:")
if password1 == password2 :
with open("db.txt","a",encoding="utf-8") as f1 :
f1.write(f"{username}:{password1}:{money}
")
else:
print("两次输入的密码不同,注册失败")
def login():
'''登录功能'''
list1=[]
while True:
user_inp = input("your name >")
if os.path.exists(f"locked/{user_inp}"):
print("该账户被锁定")
else:
pwd_inp = input("your msg >")
with open("db.txt","r",encoding="utf-8") as f:
for line in f :
username,password,money = line.strip().split(":")
if username==user_inp and pwd_inp == password:
print("登录成功")
return 1
else:
if list1.count(user_inp)==2:
with open(f"locked/{user_inp}","w",encoding="utf-8") as f:
pass
print("锁定账号")
else:
list1.append(user_inp)
print(f"该账号已经输错{list1.count(user_inp)}次")
#主程序
dict0={
"0":[exit,"退出"],
"1":[register,"注册"],
"2":[login,"登录"],
}
dict1={
0:[None,"退出"],
"1":[recharge,"充值"],
"2":[transfer,"转账"],
"3":[cash_withdrawal,"提现"],
"4":[query,"查询"]
}
def order(dic):
'''判断指令'''
while True:
for i in dic:
print(f"{i}:{dic[i][1]}")
cmd =input("请输入指令>")
if not cmd.isdigit():
print("请输入数字")
elif cmd in dic:
res = dic[cmd][0]()
return res
elif cmd == "0":
print("退出")
break
else:
print("请输入正确指令")
while True:
res = 0
res = order(dict0)
if res:
order(dict1)