可迭代对象可以用list()取出,也可以用for循环遍历,也可以用迭代器将其转化。
(range,容器数据类型,迭代器都是可迭代对象)
迭代器的取值方案:
1. next() 调用一次获取一次,直到数据被取完
2. list() 使用list函数直接取出迭代器中的所有数据
3. for 使用for循环遍历迭代器的数据
ATM项目
总体思路是一定要在项目进行前做好需求分析,然后找出所有要用上的对象和成员
下面具体给出所有对象和成员以及编程时的注意点:
银行卡对象:Card 存储银行卡信息
- 卡号 cardid
• 密码 password
• 余额。 money
• 是否锁卡islock
用户对象:Person 存储用户信息
• 用户名。 name
• 身份证号. userid
• 手机号. phone
• 卡. card. 银行卡对象
控制器对象: Controller 具体的操作控制类
控制器对象中主要就是去实现ATM这个系统中的操作
在上面定义的那十个方法
init阶段可以在初始化时完成对文件的读取操作:这里从两个文件夹中用pickle进行反序列化并且读出来。作为两个字典的数据类型。
- 注册 :regiser 将个人信息添加到字典里
cardobj = Card(cardnum,password) # 实例化并把卡号,密码传给Card类接收,并由card接收
person = Person(name,userid,phone,cardobj) #把用户名,身份证号,手机号,银行卡对象传给Person类接收,并由person用户接收
self.user_id_dict[userid] = cardnum 身份证:卡号
self.user_dict[cardnum] = person 卡号:用户对象
注册阶段注意要将随机给的卡号还有各种信息
- 查询:query
- 取款:get_money
- 存款:add_money
- 转帐:save_money
- 锁卡:lock
- 解卡:unlock
- 补卡:new_card
- 改密:change_pwd
退出: save 保存时序列化后存入文件中
视图对象: Views。 显示操作界面的
1.欢迎界面 __showview 这里注意使用了私有成员,只能在当前类的内部去访问和操作,不能在类的外部进行操作
2.选择功能界面 choiceview #不是私有的了,其他我地方想调都可以
主函数Main()
主要负完成整体的功能流程运作。调用各个类。选择直接在init的时候就将view()类以及对用户选择的判断,从而调用相应的功能。
注意导包方式,main函数只能用绝对路径
数据的存储用文件
用户的卡号:user_dict user.txt
用户的身份证:卡号 user_id_dict userid.txt
注意在测试时,可以在自己的模块中加入
if name == 'main': #在当前模块作为主程序使用时执行
注意在测试文件的时候,如果直接用空的文档测试时会报错
使用pickle.load(f)加载pickle文件时,报错:EOFError: Ran out of input.
可能原因:文件为空。
尝试向文件夹中写点东西,还是会报错unpickling stack underflow
总结:
在使用pickle反序列化的时候,要预先导入二进制数据中存在的自定义类数据的类