学习大数据DAY30 python基础语法3
目录
上机练习 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(文件) 读写
文本文件写
文本文件读
csv 文件写
csv 文件读
异常
自定义异常
上机练习 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()
相关文章:
学习大数据DAY30 python基础语法3
目录 上机练习 5 File(文件) 读写 文本文件写 文本文件读 csv 文件写 csv 文件读 异常 自定义异常 上机练习 6 上机练习 5 上机练习5的作业我昨天就写完了,但是因为它是今天的作业,我就今天发咯。 # atm 机模拟器:使用 main 入口&…...
一文弄清Java的四大引用及其两大传递
开场白 Hello大家好呀,我是CodeCodeBond✊最近在复习很多很多的基础知识,有了很多新的感悟~ 话不多说,直接发车✈ 四大引用 问题切入点 在学习 Thread线程利用ThreadLocalMap实现线程的本地内存(变量副本)的时候&…...
arduino程序-MC猜数字5、6(基础知识)
arduino程序-MC猜数字5、6(基础知识) 1-23 MC猜数字-5 自定义函数自定义函数自定义清理显示内容函数displayClear()带参数函数displayNumber带参数、返回值的函数 1-24 MC猜数字-6 完成制作显示0~9数字函数改造产生随机数字函数改…...
【笔记】如何在ps里调整贴图
如图我想要在ps里把角上半部分画成绿色 1.打开ps,拖进贴图 2.把所有图层全选复制,除了实体、选择、背景和uv图层 3.把这些图层合并 4.自己手动选上半部分角 按shift加选 alt减选 5. 这里可以调整饱和度、色相、明度 6. 选好之后用羽化之后边缘会…...
【C++11】深度解析--异步操作(什么是异步?异步有那些操作?异步操作有什么用呢?)
目录 一、前言 二、什么是异步操作呢? 🔥异步的概念🔥 🔥异步的生活案例说明🔥 三、异步有那些操作呢? 🔥std::future🔥 💢std::future 的概念💢 &a…...
PHP苹果 V X iPhone微商i o s多分开V X语音转发密友朋友圈一键跟圈软件
苹果VX神器!iPhone微商必备:ios多开、VX语音转发、密友朋友圈一键跟圈软件大揭秘! 一、iOS多开新境界,工作生活两不误! 你是不是也烦恼过,想要在工作号和生活号之间自由切换,却因为iPhone的限制…...
LDR6020 iPad皮套一体式键盘充电方案解析
在移动办公与学习的浪潮中,iPad凭借其强大的性能与便携性,成为了越来越多人的首选设备。然而,随着工作与学习任务的日益复杂,单一的触控操作已难以满足高效、精准的需求。因此,搭配一款优秀的键盘成为了提升iPad使用体…...
一款功能强大且免费的跨平台图片批量处理工具
XnConvert是一款功能强大且免费的跨平台图片批量处理工具,广泛应用于个人用户、教育机构和非营利组织。它支持超过500种图片格式,包括常见的JPEG、PNG、TIFF、GIF、WebP、PSD、JPEG2000等,并能够导出为大约70种不同的文件格式。 该软件的主要…...
用Python打造精彩动画与视频,4.2 特效和滤镜的使用
第四章:深入MoviePy 4.2 特效和滤镜的使用 在视频制作和编辑过程中,特效和滤镜是不可或缺的元素。它们不仅能增强视觉效果,还能赋予视频独特的风格和情感。MoviePy 作为一个功能强大的视频编辑库,提供了多种内置的特效和滤镜&…...
在 iOS 系统中,如何设置才能更好地保护个人隐私?
在iOS系统中,有一些设置和功能可以帮助您更好地保护个人隐私。以下是一些建议: 使用设备锁:设置一个强密码、Touch ID或Face ID来锁定您的设备。这可以防止其他人访问您的设备和个人信息。 更新软件:及时更新您的iOS系统和应用程…...
Charles抓包工具系列文章(七)-- Rewrite工具的应用示例
一、背景 客户端通过域名访问后端服务,在api网关层,会判断path的前缀,默认/api开头的请求都转发至后端服务A。 当前缀是/assist/api开头,请求将转发至后端服务B(部署在192.168.80.226,便于测试对比) 在不改动kong网关配置的情况下,现需要把后者的请求转发至192.168.…...
国内SSL证书颁发机构哪家服务更优质?
SSL证书作为保障网站数据传输安全的关键工具,其重要性不言而喻。选择一个可靠的SSL证书代理商,不仅能够提供多样化的证书类型,而且能在众多品牌中进行比较,选择最适合自己的、性价比更高的产品。此外,优质的代理商还能…...
鸿蒙系统开发【设备安全服务-应用设备状态检测】安全
设备安全服务-应用设备状态检测 介绍 本示例向您介绍如何在应用中获取DeviceToken用于对应用的设备状态进行检测。 需要使用设备安全服务接口 kit.DeviceSecurityKit。 效果预览 Sample工程的配置与使用 在DevEco中配置Sample工程的步骤如下 [创建项目]及[应用]。打开Sam…...
19个运维工程师面试集锦
第一部分:Linux基础 题目1: 有一百个图片文件,它们的地址都是 http://down.xiaomi.com/img/1.png http://down.xiaomi.com/img/2.png … 一直到 http://down.xiaomi.com/img/100.png 如何批量下载这100个图片文件,并找出其中大…...
一芯解锁「看家」新体验,航芯高性价比猫眼智能锁方案,让安全看得见!
随着智能门锁市场规模逐年递增,行业“内卷”也持续激烈。伴随着一路加码的功能卖点,智能门锁制造商正面临着产品功能芯片增多和成本优化的双重挑战。消费者不仅追求易用性、智能化和美观性,更期待产品具有良好的性价比。 而在智能门锁的众多…...
IPv4 vs IPv6:了解这两大协议的关键差异
我发现,很多找代理IP的朋友在后台问我的问题都很相似!都被配置IP的最后一步:选择IPv4还是IPv6?给难住了。昨晚我一晚没睡,终于整理出对IPv4和IPv6的对比总结,从概念阐述到特点对比,再解答IPv6总…...
C#知识|XML文件操作
哈喽,你好啊,我是雷工! 之前有朋友在群里聊XML文件操作的问题,今天正好学习相关内容, 以下为学习笔记。 01 XML介绍 ①:XML是eXtensible Markup Language的缩写,即扩展标记语言。 ②:XML是一种可以用来创建自定义的标记语言,由W3C(万维网协会)创建,用来克服HTML的局…...
TCP 和 UDP 之间的区别?
从 连接,可靠性,传输方式等方面: TCP 是面向连接的协议,在发送数据的时候需要先通过 TCP 的三次握手,而 UDP 是无连接的协议,可以直接传输数据TCP 通过超时重传,流量控制和拥塞控制等方法保障了…...
共用体、枚举类型、typedef定义,位运算
共用体 union 共用体名 { 数据类型1 成员变量1; 数据类型2 成员变量2; 数据类型3 成员变量3; ... }; 共用体所有成员变量,所占空间重叠,占共同的空间。 枚举 将变量的值一一列举出来。 enum 枚举类型名…...
【运维】Linux如何批量解压文件夹下的很多个`.tar.gz`文件
要在Linux中批量解压这些.tar.gz文件,你可以使用tar命令配合find或者bash的通配符功能。这里是一个简单的步骤来解压所有这些.tar.gz文件: 方法 1: 使用 find 命令 find . -type f -name "*.tar.gz" -exec tar -xzvf {} \;这个命令的意思是从…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
