可迭代對象可以用list()取出,也可以用for循環(huán)遍歷,也可以用迭代器將其轉(zhuǎn)化。
(range,容器數(shù)據(jù)類型,迭代器都是可迭代對象)
迭代器的取值方案:
1. next() 調(diào)用一次獲取一次,直到數(shù)據(jù)被取完
2. list() 使用list函數(shù)直接取出迭代器中的所有數(shù)據(jù)
3. for 使用for循環(huán)遍歷迭代器的數(shù)據(jù)
ATM項目
總體思路是一定要在項目進行前做好需求分析,然后找出所有要用上的對象和成員
下面具體給出所有對象和成員以及編程時的注意點:
銀行卡對象:Card 存儲銀行卡信息
- 卡號 cardid
? 密碼 password
? 余額。 money
? 是否鎖卡islock
用戶對象:Person 存儲用戶信息
? 用戶名。 name
? 身份證號. userid
? 手機號. phone
? 卡. card. 銀行卡對象
控制器對象: Controller 具體的操作控制類
控制器對象中主要就是去實現(xiàn)ATM這個系統(tǒng)中的操作
在上面定義的那十個方法
init階段可以在初始化時完成對文件的讀取操作:這里從兩個文件夾中用pickle進行反序列化并且讀出來。作為兩個字典的數(shù)據(jù)類型。
- 注冊 :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
- 轉(zhuǎn)帳:save_money
- 鎖卡:lock
- 解卡:unlock
- 補卡:new_card
- 改密:change_pwd
退出: save 保存時序列化后存入文件中
視圖對象: Views。 顯示操作界面的
1.歡迎界面 __showview 這里注意使用了私有成員,只能在當(dāng)前類的內(nèi)部去訪問和操作,不能在類的外部進行操作
2.選擇功能界面 choiceview #不是私有的了,其他我地方想調(diào)都可以
主函數(shù)Main()
主要負完成整體的功能流程運作。調(diào)用各個類。選擇直接在init的時候就將view()類以及對用戶選擇的判斷,從而調(diào)用相應(yīng)的功能。
注意導(dǎo)包方式,main函數(shù)只能用絕對路徑
數(shù)據(jù)的存儲用文件
用戶的卡號:user_dict user.txt
用戶的身份證:卡號 user_id_dict userid.txt
注意在測試時,可以在自己的模塊中加入
if name == 'main': #在當(dāng)前模塊作為主程序使用時執(zhí)行
注意在測試文件的時候,如果直接用空的文檔測試時會報錯
使用pickle.load(f)加載pickle文件時,報錯:EOFError: Ran out of input.
可能原因:文件為空。
嘗試向文件夾中寫點東西,還是會報錯unpickling stack underflow
總結(jié):
在使用pickle反序列化的時候,要預(yù)先導(dǎo)入二進制數(shù)據(jù)中存在的自定義類數(shù)據(jù)的類