当前位置:   article > 正文

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

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

目录

上机练习 5

File(文件) 读写

文本文件写

文本文件读

csv 文件写

csv 文件读

异常

自定义异常

上机练习 6


上机练习 5

上机练习5的作业我昨天就写完了,但是因为它是今天的作业,我就今天发咯。

  1. # atm 机模拟器:使用 main 入口,结合函数与列表等实现
  2. # 核心数据如下
  3. # data=[{'id':'1001','passwd':'123456','bat':'1000'},
  4. # {'id':'1002','passwd':'123456','bat':'2000'},
  5. # {'id':'1003','passwd':'123456','bat':'3000'},
  6. # {'id':'1004','passwd':'123456','bat':'4000'}]
  7. # ---------- 欢迎使用 ATM 机 ----------
  8. # 请输入账号:1002
  9. # 请输入密码:123
  10. # 账号或密码错误
  11. # ---------- 欢迎使用 ATM 机 ----------
  12. # 请输入账号:1002
  13. # 请输入密码:123456
  14. # 登录成功,请进行下列操作:
  15. # ----------操作页面----------
  16. # 1.存款
  17. # 2.取款
  18. # 3.查询余额
  19. # 4.转账
  20. # 5.退出
  21. # ----------------------------
  22. # 请输入操作选项:3
  23. # 您当前的可用余额为:2000
  24. # ----------操作页面----------
  25. # 1.存款
  26. # 2.取款
  27. # 3.查询余额
  28. # 4.转账
  29. # 5.退出
  30. # ----------------------------
  31. # 请输入操作选项:1
  32. # 请输入存款金额:2000
  33. # 您已成功存款 2000,您当前的余额为:4000
  34. # ----------操作页面----------
  35. # 1.存款
  36. # 2.取款# 3.查询余额
  37. # 4.转账
  38. # 5.退出
  39. # ----------------------------
  40. # 请输入操作选项:2
  41. # 请输入取款金额:5000
  42. # 您的余额不足!
  43. # ----------操作页面----------
  44. # 1.存款
  45. # 2.取款
  46. # 3.查询余额
  47. # 4.转账
  48. # 5.退出
  49. # ----------------------------
  50. # 请输入操作选项:2
  51. # 请输入取款金额:200
  52. # 您已成功取款 200,您当前余额为:3800
  53. # ----------操作页面----------
  54. # 1.存款
  55. # 2.取款
  56. # 3.查询余额
  57. # 4.转账
  58. # 5.退出
  59. # ----------------------------
  60. # 请输入操作选项:4
  61. # 请输入收款账号:1003
  62. # 请输入转账金额:200
  63. # 您已成功转账 200,您当前余额为:3600
  64. # 注:判断收款账号不能是自己,判断账号是否存在,判断自己余额是否够转账
  65. # ----------操作页面----------
  66. # 1.存款
  67. # 2.取款
  68. # 3.查询余额
  69. # 4.转账
  70. # 5.退出
  71. # ----------------------------
  72. # 请输入操作选项:5
  73. # 请问是否退出? y/n:y
  74. # 已成功退出,请取回您的银行卡
  75. # ----------------------------
  76. # 请输入操作选项:6
  77. # 输入错误data=[{'id':'1001','passwd':'123456','bat':'1000'},
  78. {'id':'1002','passwd':'123456','bat':'2000'},
  79. {'id':'1003','passwd':'123456','bat':'3000'},
  80. {'id':'1004','passwd':'123456','bat':'4000'}]
  81. # 登录
  82. def login():
  83. errorcount=0
  84. while 1:
  85. print("---------- 欢迎使用 ATM 机 ----------")
  86. id=input("请输入账号:")
  87. passwd=input("请输入密码:")
  88. for i in data:
  89. if id==i['id'] and passwd==i['passwd']:
  90. print("登录成功,请进行下列操作:")
  91. return id
  92. errorcount+=1
  93. if 7-errorcount<=0:
  94. print("密码错误次数过多,请稍后再试")
  95. return None
  96. else :
  97. print(f"账号或密码错误,你还有{7-errorcount}次机会")
  98. pass
  99. # 取钱
  100. def DrawMoney(id):
  101. money=int(input("请输入取款金额:"))
  102. if money<=0:
  103. print("取款金额不正确!")
  104. else:
  105. for i in data:
  106. if id==i['id']:
  107. if int(i['bat'])<money:
  108. print("您的余额不足!")
  109. break
  110. else:
  111. i['bat']=str(int(i['bat'])-money)
  112. print(f"您已成功取款{money},您当前余额为:
  113. {i['bat']}")
  114. break
  115. pass
  116. # 存钱
  117. def SaveMoney(id):
  118. money=int(input("请输入存款金额:"))
  119. if money<=0:print("存款金额不正确!")
  120. else:
  121. for i in data:
  122. if id==i['id']:
  123. i['bat']=str(int(i['bat'])+money)
  124. print(f"您已成功存款{money},您当前的余额为:
  125. {i['bat']}")
  126. break
  127. pass
  128. # 查询余额
  129. def CheckMoney(id):
  130. for i in data:
  131. if id==i['id']:
  132. print(f"您当前的可用余额为:{i['bat']}")
  133. break
  134. pass
  135. #转账
  136. def GiveMoney(id):
  137. give_id=input("请输入收款账号:")
  138. if give_id==id:
  139. print("收款账号不能是自己!")
  140. else:
  141. for i in data:
  142. if give_id==i['id']:
  143. money=int(input("请输入转账金额:"))
  144. if money<=0:
  145. print("转账金额不正确!")
  146. return
  147. else:
  148. for j in data:
  149. if id==j['id']:
  150. if int(j['bat'])<money:
  151. print("您的余额不足!")
  152. return
  153. else:
  154. i['bat']=str(int(i['bat'])+money
  155. )
  156. j['bat']=str(int(j['bat'])-money
  157. )
  158. print(f"您已成功转账{money},您当前
  159. 余额为:{j['bat']}")
  160. return
  161. print("账号不存在!")pass
  162. #操作界面
  163. def Operation(id):
  164. if id==None:
  165. return
  166. while 1:
  167. op=int(input("""----------操作页面----------
  168. 1.存款
  169. 2.取款
  170. 3.查询余额
  171. 4.转账
  172. 5.退出
  173. ----------------------------
  174. 请输入操作选项:"""))
  175. if op==1:
  176. SaveMoney(id)
  177. elif op==2:
  178. DrawMoney(id)
  179. elif op==3:
  180. CheckMoney(id)
  181. elif op==4:
  182. GiveMoney(id)
  183. elif op==5:
  184. QuiteATM=input("请问是否退出? y/n:")
  185. if QuiteATM=="y":
  186. print("已成功退出,请取回您的银行卡")
  187. return
  188. else:
  189. continue
  190. else:
  191. print("输入错误")
  192. pass
  193. if __name__=="__main__":
  194. id=login()
  195. 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. # 1.修改 atm 取款机数据为持久化永久存储,csv 读取实现(分别使用函数实
  2. 现读和取),使
  3. # 用异常处理 atm 取款机读取 csv 时判断文件是否存在,如果文件不存在提示"
  4. 没有文件使用
  5. # 原数据"
  6. # 2.使用异常在 atm 取款机的项目中存款函数中:
  7. # 如果输入的存款金额不是整数则提示:请输入整数;
  8. # 如果输入的存款金额不是 100 的倍数或者是负数则提示:请输入 100 的倍数
  9. 的正整数
  10. import csv
  11. data=[]
  12. # 存入 csv 文件
  13. def write_csv():
  14. with open('/root/atmdata.csv','w',encoding='UTF-8') as
  15. sdata:
  16. savedata=csv.DictWriter(sdata,fieldnames=['id','passwd',
  17. 'bat'])
  18. savedata.writeheader()
  19. savedata.writerows(data)
  20. sdata.close()
  21. # 读取 csv 文件
  22. def read_csv():
  23. try:
  24. with open('/root/atmdata.csv','r',encoding='UTF-8') as
  25. fdata:
  26. datadict=csv.DictReader(fdata)
  27. data.clear()
  28. for i in datadict:
  29. data.append(i)
  30. fdata.close()
  31. except FileNotFoundError:
  32. print("没有文件使用原数据")# 注销账号
  33. def DropMyCounter(id):
  34. DropConfirm=input("确认一下该账户的密码:")
  35. for i in data:
  36. if id==i['id'] and DropConfirm==i['passwd']:
  37. data.remove(i)
  38. print("注销成功!")
  39. write_csv()
  40. return
  41. print("密码不正确!")
  42. pass
  43. # 注册账号
  44. def Register():
  45. try:
  46. id=input("请输入您的账号:")
  47. passwd=input("请输入您的密码:")
  48. if id in [i['id'] for i in data]:
  49. raise Exception("账号已存在!")
  50. if len(id)<4 or len(passwd)<6:
  51. raise Exception("账号 id 不能小于 4 位,密码不能小于 6 位!
  52. ")
  53. data.append({'id':id,'passwd':passwd,'bat':'0'})
  54. print("注册成功!")
  55. write_csv()
  56. except Exception as e:
  57. print("注册失败!",e)
  58. pass
  59. # 登录界面
  60. def login():
  61. errorcount=0
  62. while 1:
  63. print("---------- 欢迎使用 ATM 机 ----------")
  64. RegisterOrLogin=input("请选择登录或注册(R 注册,L 登录,Q 退
  65. 出):")
  66. if RegisterOrLogin=="R":
  67. Register()
  68. continue
  69. elif RegisterOrLogin=="L":
  70. id=input("请输入账号:")
  71. passwd=input("请输入密码:")
  72. for i in data:
  73. if id==i['id'] and passwd==i['passwd']:
  74. print("登录成功,请进行下列操作:")return id
  75. errorcount+=1
  76. if 7-errorcount<=0:
  77. print("密码错误次数过多,请稍后再试")
  78. return None
  79. else :
  80. print(f"账号或密码错误,你还有{7-errorcount}次机会
  81. ")
  82. elif RegisterOrLogin=="Q":
  83. return None
  84. else:
  85. print("输入错误,请重新输入")
  86. pass
  87. # 取钱
  88. def DrawMoney(id):
  89. try:
  90. money=int(input("请输入取款金额:"))
  91. if money<=0:
  92. print("取款金额不正确!")
  93. else:
  94. for i in data:
  95. if id==i['id']:
  96. if int(i['bat'])<money:
  97. print("您的余额不足!")
  98. break
  99. else:
  100. i['bat']=str(int(i['bat'])-money)
  101. print(f"您已成功取款{money},您当前余额为:
  102. {i['bat']}")
  103. write_csv()
  104. break
  105. except ValueError:
  106. print("请输入整数!")
  107. except Exception as e:
  108. print("其它错误,请联系管理员!",e)
  109. pass
  110. # 存钱
  111. def SaveMoney(id):
  112. try:
  113. money=int(input("请输入存款金额:"))
  114. if money%100!=0 or money<=0:
  115. print("存款金额不正确!请输入 100 的倍数的正整数!")else:
  116. for i in data:
  117. if id==i['id']:
  118. i['bat']=str(int(i['bat'])+money)
  119. print(f"您已成功存款{money},您当前的余额为:
  120. {i['bat']}")
  121. write_csv()
  122. break
  123. except ValueError:
  124. print("请输入整数!")
  125. except Exception as e:
  126. print("其它错误,请联系管理员!",e)
  127. pass
  128. # 查询余额
  129. def CheckMoney(id):
  130. for i in data:
  131. if id==i['id']:
  132. print(f"您当前的可用余额为:{i['bat']}")
  133. break
  134. pass
  135. #转账
  136. def GiveMoney(id):
  137. give_id=input("请输入收款账号:")
  138. if give_id==id:
  139. print("收款账号不能是自己!")
  140. else:
  141. for i in data:
  142. if give_id==i['id']:
  143. try:
  144. money=int(input("请输入转账金额:"))
  145. if money<=0:
  146. print("转账金额不正确!")
  147. return
  148. else:
  149. for j in data:
  150. if id==j['id']:
  151. if int(j['bat'])<money:
  152. print("您的余额不足!")
  153. return
  154. else:
  155. i['bat']=str(int(i['bat'])+m
  156. oney)j['bat']=str(int(j['bat'])-m
  157. oney)
  158. print(f"您已成功转账{money}
  159. 您当前余额为:{j['bat']}")
  160. write_csv()
  161. return
  162. except ValueError:
  163. print("请输入整数!")
  164. return
  165. except Exception as e:
  166. print("其它错误,请联系管理员!",e)
  167. return
  168. print("账号不存在!")
  169. pass
  170. #操作界面
  171. def Operation(id):
  172. if id==None:
  173. return
  174. while 1:
  175. op=input("""----------操作页面----------
  176. 1.存款
  177. 2.取款
  178. 3.查询余额
  179. 4.转账
  180. 5.退出
  181. 6.注销账号
  182. ----------------------------
  183. 请输入操作选项:""")
  184. if op=='1':
  185. SaveMoney(id)
  186. elif op=='2':
  187. DrawMoney(id)
  188. elif op=='3':
  189. CheckMoney(id)
  190. elif op=='4':
  191. GiveMoney(id)
  192. elif op=='5':
  193. QuiteATM=input("请问是否退出? y/n:")
  194. if QuiteATM=="y":
  195. print("已成功退出,请取回您的银行卡")
  196. return
  197. else:
  198. continueelif op=='6':
  199. DropMyCounter(id)
  200. return
  201. else:
  202. print("输入错误")
  203. pass
  204. if __name__=="__main__":
  205. read_csv()
  206. id=login()
  207. Operation(id)
  208. # 3.将内容“诚挚邀请您来参加本次宴会”追加到“邀请函.txt”文件末尾。
  209. # 4.读取邀请函的内容。
  210. with open('/root/python/邀请函.txt', 'a', encoding='UTF-8') as f:
  211. f.write("诚挚邀请您来参加本次宴会\n")
  212. f.close()
  213. with open('/root/python/邀请函.txt', 'r', encoding='UTF-8') as f:
  214. data=f.read()
  215. print(data)
  216. f.close()

今天写的代码比较多,但是整理一下思路还是不难写的。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/926489
推荐阅读
相关标签
  

闽ICP备14008679号