阅读量:0
目录
上机练习 5
上机练习5的作业我昨天就写完了,但是因为它是今天的作业,我就今天发咯。
# atm 机模拟器:使用 main 入口,结合函数与列表等实现 # 核心数据如下 # data=[{'id':'1001','passwd':'123456','bat':'1000'}, # {'id':'1002','passwd':'123456','bat':'2000'}, # {'id':'1003','passwd':'123456','bat':'3000'}, # {'id':'1004','passwd':'123456','bat':'4000'}] # ---------- 欢迎使用 ATM 机 ---------- # 请输入账号:1002 # 请输入密码:123 # 账号或密码错误 # ---------- 欢迎使用 ATM 机 ---------- # 请输入账号:1002 # 请输入密码:123456 # 登录成功,请进行下列操作: # ----------操作页面---------- # 1.存款 # 2.取款 # 3.查询余额 # 4.转账 # 5.退出 # ---------------------------- # 请输入操作选项:3 # 您当前的可用余额为:2000 # ----------操作页面---------- # 1.存款 # 2.取款 # 3.查询余额 # 4.转账 # 5.退出 # ---------------------------- # 请输入操作选项:1 # 请输入存款金额:2000 # 您已成功存款 2000,您当前的余额为:4000 # ----------操作页面---------- # 1.存款 # 2.取款# 3.查询余额 # 4.转账 # 5.退出 # ---------------------------- # 请输入操作选项:2 # 请输入取款金额:5000 # 您的余额不足! # ----------操作页面---------- # 1.存款 # 2.取款 # 3.查询余额 # 4.转账 # 5.退出 # ---------------------------- # 请输入操作选项:2 # 请输入取款金额:200 # 您已成功取款 200,您当前余额为:3800 # ----------操作页面---------- # 1.存款 # 2.取款 # 3.查询余额 # 4.转账 # 5.退出 # ---------------------------- # 请输入操作选项:4 # 请输入收款账号:1003 # 请输入转账金额:200 # 您已成功转账 200,您当前余额为:3600 # 注:判断收款账号不能是自己,判断账号是否存在,判断自己余额是否够转账 # ----------操作页面---------- # 1.存款 # 2.取款 # 3.查询余额 # 4.转账 # 5.退出 # ---------------------------- # 请输入操作选项:5 # 请问是否退出? y/n:y # 已成功退出,请取回您的银行卡 # ---------------------------- # 请输入操作选项:6 # 输入错误data=[{'id':'1001','passwd':'123456','bat':'1000'}, {'id':'1002','passwd':'123456','bat':'2000'}, {'id':'1003','passwd':'123456','bat':'3000'}, {'id':'1004','passwd':'123456','bat':'4000'}] # 登录 def login(): errorcount=0 while 1: print("---------- 欢迎使用 ATM 机 ----------") id=input("请输入账号:") passwd=input("请输入密码:") for i in data: if id==i['id'] and passwd==i['passwd']: print("登录成功,请进行下列操作:") return id errorcount+=1 if 7-errorcount<=0: print("密码错误次数过多,请稍后再试") return None else : print(f"账号或密码错误,你还有{7-errorcount}次机会") pass # 取钱 def DrawMoney(id): money=int(input("请输入取款金额:")) if money<=0: print("取款金额不正确!") else: for i in data: if id==i['id']: if int(i['bat'])<money: print("您的余额不足!") break else: i['bat']=str(int(i['bat'])-money) print(f"您已成功取款{money},您当前余额为: {i['bat']}") break pass # 存钱 def SaveMoney(id): money=int(input("请输入存款金额:")) if money<=0:print("存款金额不正确!") else: for i in data: if id==i['id']: i['bat']=str(int(i['bat'])+money) print(f"您已成功存款{money},您当前的余额为: {i['bat']}") break pass # 查询余额 def CheckMoney(id): for i in data: if id==i['id']: print(f"您当前的可用余额为:{i['bat']}") break pass #转账 def GiveMoney(id): give_id=input("请输入收款账号:") if give_id==id: print("收款账号不能是自己!") else: for i in data: if give_id==i['id']: money=int(input("请输入转账金额:")) if money<=0: print("转账金额不正确!") return else: for j in data: if id==j['id']: if int(j['bat'])<money: print("您的余额不足!") return else: i['bat']=str(int(i['bat'])+money ) j['bat']=str(int(j['bat'])-money ) print(f"您已成功转账{money},您当前 余额为:{j['bat']}") return print("账号不存在!")pass #操作界面 def Operation(id): if id==None: return while 1: op=int(input("""----------操作页面---------- 1.存款 2.取款 3.查询余额 4.转账 5.退出 ---------------------------- 请输入操作选项:""")) if op==1: SaveMoney(id) elif op==2: DrawMoney(id) elif op==3: CheckMoney(id) elif op==4: GiveMoney(id) elif op==5: QuiteATM=input("请问是否退出? y/n:") if QuiteATM=="y": print("已成功退出,请取回您的银行卡") return else: continue else: print("输入错误") pass if __name__=="__main__": id=login() Operation(id)
File(文件) 读写
持久化存储数据 例如:atm 取款机程序重新执行数据没有保存文本文件写
write()方法将任何字符串写入打开的文件,换行符(‘\n‘) mode="w"覆盖写 mode="a"追加写 文本文件可以是 txt 或者 csv with open("D:\\wtest.txt",mode='w',encoding='UTF-8') as f : f.write("ccccccccccccccc\n") f.write("ccccccccccccccc\n") f.close()文本文件读
#全部读出来 with open("/root/python/test.txt",mode='r',encoding='UTF-8') as f: resutl = f.read() print(resutl) f.close() #readlines 方法则是读取所有行,一次性全部读出, #按行作为分隔符条件,返回所有行组成的列表(每行内容是一个元素) with open("/root/python/test.txt",mode='r',encoding='UTF-8') as f: data = f.readlines() for i in data :print(i,end="") f.close()csv 文件写
import csv data=[{'id':'1001','passwd':'123456','bat':'1000'}, {'id':'1002','passwd':'123456','bat':'2000'}, {'id':'1003','passwd':'123456','bat':'3000'}, {'id':'1004','passwd':'123456','bat':'4000'}] with open("/root/python/user.csv",mode="w", encoding="UTF-8") as f: result=csv.DictWriter(f,fieldnames=["id","passwd","bat"]) result.writeheader() result.writerows(data) f.close()csv 文件读
将 csv 文件以字典的形式存储在列表里 id,passwd,bat 1001,123456,1000 1002,123456,2000 1003,123456,3000 1004,123456,4000 with open("/root/python/user.csv",mode='r',encoding='UTF-8') as f: result = csv.DictReader(f) data.clear() for i in result:data.append(i) f.close()异常
程序在运行期间,当 python 检测到一个错误时,解释器就无法继续执行(程序 崩溃) 了,反而出现了一些错误提示,这就是所谓的异常 try: x = int(input("请输入一个数字: ")) z=100/x print("ok") except ValueError: print("您输入的不是数字,请再次尝试输入!") except ZeroDivisionError: print("除数不能为零") except Exception as e: print("未知错误") print(e) finally: print("无论如何都会执行")自定义异常
使用 raise 语句抛出一个指定的异常。 try: x = int(input("请输入一个小于 5 的数字: ")) if x > 5: raise Exception("x 不能大于 5。")# print("x 不能大于 5") except Exception as e: print(e)上机练习 6
# 1.修改 atm 取款机数据为持久化永久存储,csv 读取实现(分别使用函数实 现读和取),使 # 用异常处理 atm 取款机读取 csv 时判断文件是否存在,如果文件不存在提示" 没有文件使用 # 原数据" # 2.使用异常在 atm 取款机的项目中存款函数中: # 如果输入的存款金额不是整数则提示:请输入整数; # 如果输入的存款金额不是 100 的倍数或者是负数则提示:请输入 100 的倍数 的正整数 import csv data=[] # 存入 csv 文件 def write_csv(): with open('/root/atmdata.csv','w',encoding='UTF-8') as sdata: savedata=csv.DictWriter(sdata,fieldnames=['id','passwd', 'bat']) savedata.writeheader() savedata.writerows(data) sdata.close() # 读取 csv 文件 def read_csv(): try: with open('/root/atmdata.csv','r',encoding='UTF-8') as fdata: datadict=csv.DictReader(fdata) data.clear() for i in datadict: data.append(i) fdata.close() except FileNotFoundError: print("没有文件使用原数据")# 注销账号 def DropMyCounter(id): DropConfirm=input("确认一下该账户的密码:") for i in data: if id==i['id'] and DropConfirm==i['passwd']: data.remove(i) print("注销成功!") write_csv() return print("密码不正确!") pass # 注册账号 def Register(): try: id=input("请输入您的账号:") passwd=input("请输入您的密码:") if id in [i['id'] for i in data]: raise Exception("账号已存在!") if len(id)<4 or len(passwd)<6: raise Exception("账号 id 不能小于 4 位,密码不能小于 6 位! ") data.append({'id':id,'passwd':passwd,'bat':'0'}) print("注册成功!") write_csv() except Exception as e: print("注册失败!",e) pass # 登录界面 def login(): errorcount=0 while 1: print("---------- 欢迎使用 ATM 机 ----------") RegisterOrLogin=input("请选择登录或注册(R 注册,L 登录,Q 退 出):") if RegisterOrLogin=="R": Register() continue elif RegisterOrLogin=="L": id=input("请输入账号:") passwd=input("请输入密码:") for i in data: if id==i['id'] and passwd==i['passwd']: print("登录成功,请进行下列操作:")return id errorcount+=1 if 7-errorcount<=0: print("密码错误次数过多,请稍后再试") return None else : print(f"账号或密码错误,你还有{7-errorcount}次机会 ") elif RegisterOrLogin=="Q": return None else: print("输入错误,请重新输入") pass # 取钱 def DrawMoney(id): try: money=int(input("请输入取款金额:")) if money<=0: print("取款金额不正确!") else: for i in data: if id==i['id']: if int(i['bat'])<money: print("您的余额不足!") break else: i['bat']=str(int(i['bat'])-money) print(f"您已成功取款{money},您当前余额为: {i['bat']}") write_csv() break except ValueError: print("请输入整数!") except Exception as e: print("其它错误,请联系管理员!",e) pass # 存钱 def SaveMoney(id): try: money=int(input("请输入存款金额:")) if money%100!=0 or money<=0: print("存款金额不正确!请输入 100 的倍数的正整数!")else: for i in data: if id==i['id']: i['bat']=str(int(i['bat'])+money) print(f"您已成功存款{money},您当前的余额为: {i['bat']}") write_csv() break except ValueError: print("请输入整数!") except Exception as e: print("其它错误,请联系管理员!",e) pass # 查询余额 def CheckMoney(id): for i in data: if id==i['id']: print(f"您当前的可用余额为:{i['bat']}") break pass #转账 def GiveMoney(id): give_id=input("请输入收款账号:") if give_id==id: print("收款账号不能是自己!") else: for i in data: if give_id==i['id']: try: money=int(input("请输入转账金额:")) if money<=0: print("转账金额不正确!") return else: for j in data: if id==j['id']: if int(j['bat'])<money: print("您的余额不足!") return else: i['bat']=str(int(i['bat'])+m oney)j['bat']=str(int(j['bat'])-m oney) print(f"您已成功转账{money}, 您当前余额为:{j['bat']}") write_csv() return except ValueError: print("请输入整数!") return except Exception as e: print("其它错误,请联系管理员!",e) return print("账号不存在!") pass #操作界面 def Operation(id): if id==None: return while 1: op=input("""----------操作页面---------- 1.存款 2.取款 3.查询余额 4.转账 5.退出 6.注销账号 ---------------------------- 请输入操作选项:""") if op=='1': SaveMoney(id) elif op=='2': DrawMoney(id) elif op=='3': CheckMoney(id) elif op=='4': GiveMoney(id) elif op=='5': QuiteATM=input("请问是否退出? y/n:") if QuiteATM=="y": print("已成功退出,请取回您的银行卡") return else: continueelif op=='6': DropMyCounter(id) return else: print("输入错误") pass if __name__=="__main__": read_csv() id=login() Operation(id) # 3.将内容“诚挚邀请您来参加本次宴会”追加到“邀请函.txt”文件末尾。 # 4.读取邀请函的内容。 with open('/root/python/邀请函.txt', 'a', encoding='UTF-8') as f: f.write("诚挚邀请您来参加本次宴会\n") f.close() with open('/root/python/邀请函.txt', 'r', encoding='UTF-8') as f: data=f.read() print(data) f.close()
今天写的代码比较多,但是整理一下思路还是不难写的。