做推广哪个网站最热门,制作网站教程视频,长沙专业网站设计平台,亚马逊全球购官网目录 上机练习 5
File(文件) 读写
文本文件写
文本文件读
csv 文件写
csv 文件读
异常
自定义异常
上机练习 6 上机练习 5
上机练习5的作业我昨天就写完了#xff0c;但是因为它是今天的作业#xff0c;我就今天发咯。
# atm 机模拟器#xff1a;使用 main 入口但是因为它是今天的作业我就今天发咯。
# 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/ny
# 已成功退出请取回您的银行卡
# ----------------------------
# 请输入操作选项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():
errorcount0
while 1:
print(---------- 欢迎使用 ATM 机 ----------)
idinput(请输入账号)
passwdinput(请输入密码)
for i in data:
if idi[id] and passwdi[passwd]:
print(登录成功请进行下列操作)
return id
errorcount1
if 7-errorcount0:
print(密码错误次数过多请稍后再试)
return None
else :
print(f账号或密码错误你还有{7-errorcount}次机会)
pass
# 取钱
def DrawMoney(id):
moneyint(input(请输入取款金额:))
if money0:
print(取款金额不正确)
else:
for i in data:
if idi[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):
moneyint(input(请输入存款金额:))
if money0:print(存款金额不正确!)
else:
for i in data:
if idi[id]:
i[bat]str(int(i[bat])money)
print(f您已成功存款{money}您当前的余额为
{i[bat]})
break
pass
# 查询余额
def CheckMoney(id):
for i in data:
if idi[id]:
print(f您当前的可用余额为{i[bat]})
break
pass
#转账
def GiveMoney(id):
give_idinput(请输入收款账号:)
if give_idid:
print(收款账号不能是自己)
else:
for i in data:
if give_idi[id]:
moneyint(input(请输入转账金额:))
if money0:
print(转账金额不正确)
return
else:
for j in data:
if idj[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 idNone:
return
while 1:
opint(input(----------操作页面----------
1.存款
2.取款
3.查询余额
4.转账
5.退出
----------------------------
请输入操作选项))
if op1:
SaveMoney(id)
elif op2:
DrawMoney(id)
elif op3:
CheckMoney(id)
elif op4:
GiveMoney(id)
elif op5:
QuiteATMinput(请问是否退出? y/n)
if QuiteATMy:
print(已成功退出请取回您的银行卡)
return
else:
continue
else:
print(输入错误)
pass
if __name____main__:
idlogin()
Operation(id)
File(文件) 读写 持久化存储数据 例如 atm 取款机程序重新执行数据没有保存 文本文件写 write() 方法将任何字符串写入打开的文件换行符 (‘\n‘) modew 覆盖写 modea 追加写 文本文件可以是 txt 或者 csv with open(D:\\wtest.txt,modew,encodingUTF-8) as f : f.write(ccccccccccccccc\n) f.write(ccccccccccccccc\n) f.close() 文本文件读 # 全部读出来 with open(/root/python/test.txt,moder,encodingUTF-8) as f: resutl f.read() print(resutl) f.close() #readlines 方法则是读取所有行一次性全部读出 # 按行作为分隔符条件返回所有行组成的列表每行内容是一个元素 with open(/root/python/test.txt,moder,encodingUTF-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,modew, encodingUTF-8) as f: resultcsv.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,moder,encodingUTF-8) as f: result csv.DictReader(f) data.clear() for i in result: data.append(i) f.close() 异常 程序在运行期间当 python 检测到一个错误时解释器就无法继续执行程序 崩溃 了反而出现了一些错误提示这就是所谓的异常 try: x int(input( 请输入一个数字 : )) z100/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,encodingUTF-8) as
sdata:
savedatacsv.DictWriter(sdata,fieldnames[id,passwd,
bat])
savedata.writeheader()
savedata.writerows(data)
sdata.close()
# 读取 csv 文件
def read_csv():
try:
with open(/root/atmdata.csv,r,encodingUTF-8) as
fdata:
datadictcsv.DictReader(fdata)
data.clear()
for i in datadict:
data.append(i)
fdata.close()
except FileNotFoundError:
print(没有文件使用原数据)# 注销账号
def DropMyCounter(id):
DropConfirminput(确认一下该账户的密码:)
for i in data:
if idi[id] and DropConfirmi[passwd]:
data.remove(i)
print(注销成功)
write_csv()
return
print(密码不正确)
pass
# 注册账号
def Register():
try:
idinput(请输入您的账号)
passwdinput(请输入您的密码)
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():
errorcount0
while 1:
print(---------- 欢迎使用 ATM 机 ----------)
RegisterOrLogininput(请选择登录或注册(R 注册L 登录,Q 退
出):)
if RegisterOrLoginR:
Register()
continue
elif RegisterOrLoginL:
idinput(请输入账号)
passwdinput(请输入密码)
for i in data:
if idi[id] and passwdi[passwd]:
print(登录成功请进行下列操作)return id
errorcount1
if 7-errorcount0:
print(密码错误次数过多请稍后再试)
return None
else :
print(f账号或密码错误你还有{7-errorcount}次机会
)
elif RegisterOrLoginQ:
return None
else:
print(输入错误请重新输入)
pass
# 取钱
def DrawMoney(id):
try:
moneyint(input(请输入取款金额:))
if money0:
print(取款金额不正确)
else:
for i in data:
if idi[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:
moneyint(input(请输入存款金额:))
if money%100!0 or money0:
print(存款金额不正确!请输入 100 的倍数的正整数)else:
for i in data:
if idi[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 idi[id]:
print(f您当前的可用余额为{i[bat]})
break
pass
#转账
def GiveMoney(id):
give_idinput(请输入收款账号:)
if give_idid:
print(收款账号不能是自己)
else:
for i in data:
if give_idi[id]:
try:
moneyint(input(请输入转账金额:))
if money0:
print(转账金额不正确)
return
else:
for j in data:
if idj[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 idNone:
return
while 1:
opinput(----------操作页面----------
1.存款
2.取款
3.查询余额
4.转账
5.退出
6.注销账号
----------------------------
请输入操作选项)
if op1:
SaveMoney(id)
elif op2:
DrawMoney(id)
elif op3:
CheckMoney(id)
elif op4:
GiveMoney(id)
elif op5:
QuiteATMinput(请问是否退出? y/n)
if QuiteATMy:
print(已成功退出请取回您的银行卡)
return
else:
continueelif op6:
DropMyCounter(id)
return
else:
print(输入错误)
pass
if __name____main__:
read_csv()
idlogin()
Operation(id)
# 3.将内容“诚挚邀请您来参加本次宴会”追加到“邀请函.txt”文件末尾。
# 4.读取邀请函的内容。
with open(/root/python/邀请函.txt, a, encodingUTF-8) as f:
f.write(诚挚邀请您来参加本次宴会\n)
f.close()
with open(/root/python/邀请函.txt, r, encodingUTF-8) as f:
dataf.read()
print(data)
f.close() 今天写的代码比较多但是整理一下思路还是不难写的。