0


学习大数据DAY30 python基础语法3

**上机练习 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()

今天写的代码比较多,但是整理一下思路还是不难写的。

标签: python 学习 大数据

本文转载自: https://blog.csdn.net/shh2000424/article/details/140876427
版权归原作者 工科小石头 所有, 如有侵权,请联系我们删除。

“学习大数据DAY30 python基础语法3”的评论:

还没有评论