可迭代對(duì)象可以用list()取出堡距,也可以用for循環(huán)遍歷,也可以用迭代器將其轉(zhuǎn)化兆蕉。
(range吏颖,容器數(shù)據(jù)類(lèi)型,迭代器都是可迭代對(duì)象)
迭代器的取值方案:
1. next() 調(diào)用一次獲取一次恨樟,直到數(shù)據(jù)被取完
2. list() 使用list函數(shù)直接取出迭代器中的所有數(shù)據(jù)
3. for 使用for循環(huán)遍歷迭代器的數(shù)據(jù)
ATM項(xiàng)目
總體思路是一定要在項(xiàng)目進(jìn)行前做好需求分析,然后找出所有要用上的對(duì)象和成員
下面具體給出所有對(duì)象和成員以及編程時(shí)的注意點(diǎn):
銀行卡對(duì)象:Card 存儲(chǔ)銀行卡信息
- 卡號(hào) cardid
? 密碼 password
? 余額疚俱。 money
? 是否鎖卡islock
用戶(hù)對(duì)象:Person 存儲(chǔ)用戶(hù)信息
? 用戶(hù)名劝术。 name
? 身份證號(hào). userid
? 手機(jī)號(hào). phone
? 卡. card. 銀行卡對(duì)象
控制器對(duì)象: Controller 具體的操作控制類(lèi)
控制器對(duì)象中主要就是去實(shí)現(xiàn)ATM這個(gè)系統(tǒng)中的操作
在上面定義的那十個(gè)方法
init階段可以在初始化時(shí)完成對(duì)文件的讀取操作:這里從兩個(gè)文件夾中用pickle進(jìn)行反序列化并且讀出來(lái)。作為兩個(gè)字典的數(shù)據(jù)類(lèi)型呆奕。
- 注冊(cè) :regiser 將個(gè)人信息添加到字典里
cardobj = Card(cardnum,password) # 實(shí)例化并把卡號(hào)养晋,密碼傳給Card類(lèi)接收,并由card接收
person = Person(name,userid,phone,cardobj) #把用戶(hù)名梁钾,身份證號(hào)绳泉,手機(jī)號(hào),銀行卡對(duì)象傳給Person類(lèi)接收姆泻,并由person用戶(hù)接收
self.user_id_dict[userid] = cardnum 身份證:卡號(hào)
self.user_dict[cardnum] = person 卡號(hào):用戶(hù)對(duì)象
注冊(cè)階段注意要將隨機(jī)給的卡號(hào)還有各種信息
- 查詢(xún):query
- 取款:get_money
- 存款:add_money
- 轉(zhuǎn)帳:save_money
- 鎖卡:lock
- 解卡:unlock
- 補(bǔ)卡:new_card
- 改密:change_pwd
退出: save 保存時(shí)序列化后存入文件中
視圖對(duì)象: Views零酪。 顯示操作界面的
1.歡迎界面 __showview 這里注意使用了私有成員,只能在當(dāng)前類(lèi)的內(nèi)部去訪問(wèn)和操作拇勃,不能在類(lèi)的外部進(jìn)行操作
2.選擇功能界面 choiceview #不是私有的了四苇,其他我地方想調(diào)都可以
主函數(shù)Main()
主要負(fù)完成整體的功能流程運(yùn)作。調(diào)用各個(gè)類(lèi)方咆。選擇直接在init的時(shí)候就將view()類(lèi)以及對(duì)用戶(hù)選擇的判斷月腋,從而調(diào)用相應(yīng)的功能。
注意導(dǎo)包方式,main函數(shù)只能用絕對(duì)路徑
數(shù)據(jù)的存儲(chǔ)用文件
用戶(hù)的卡號(hào):user_dict user.txt
用戶(hù)的身份證:卡號(hào) user_id_dict userid.txt
注意在測(cè)試時(shí)榆骚,可以在自己的模塊中加入
if name == 'main': #在當(dāng)前模塊作為主程序使用時(shí)執(zhí)行
注意在測(cè)試文件的時(shí)候片拍,如果直接用空的文檔測(cè)試時(shí)會(huì)報(bào)錯(cuò)
使用pickle.load(f)加載pickle文件時(shí),報(bào)錯(cuò):EOFError: Ran out of input.
可能原因:文件為空妓肢。
嘗試向文件夾中寫(xiě)點(diǎn)東西捌省,還是會(huì)報(bào)錯(cuò)unpickling stack underflow
總結(jié):
在使用pickle反序列化的時(shí)候,要預(yù)先導(dǎo)入二進(jìn)制數(shù)據(jù)中存在的自定義類(lèi)數(shù)據(jù)的類(lèi)