目录
上机训练 5
File(文件) 读写
文本文件写
文本文件读
csv 文件写
csv 文件读
非常
自定义非常
上机训练 6
上机训练 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()
复制代码
今天写的代码比力多,但是整理一下思绪还是不难写的。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |