一個作業題---用python建立一個通訊錄
題目:
一個文字通訊錄要求:
- 內容含有:姓名,電話(手機,座機),qq,email
- 儲存功能實現:通過命令列輸入後儲存到檔案
- 讀取功能和相容性:自己程式能讀出其他同學建立的通訊錄
#!/usr/bin/env python #!encoding:utf-8 #filename:contacts_list.py #QUESTION FROM:http://uliweb.clkg.org/tutorial/view_chapter/183 import pickle, pprint import os, sys def create_contact(file_path): #初始化通訊錄文字 exist = os.path.isfile(file_path) if exist: os.remove(file_path)#如果已經存在則刪除通訊錄,下一步重新建立 print "remove old conntact list successfully ! " init_contact = { 'lijyt':{'cellphone':'13990000343','tel':'0512-86565544','qq':'45453242','e-mail':'
[email protected]'}, 'zhanw':{'cellphone':'15992222343','tel':'0523-89565544','qq':'89545445','e-mail':'[email protected]'}, 'dongf':{'cellphone':'18905555343','tel':'0545-84565544','qq':'12453242','e-mail':'[email protected]'} } f = open(file_path,'w') pickle.dump(init_contact,f) f.close() print "create new contact list successfully !" def load_contact(file_path):#通訊錄載入函式 exist = os.path.isfile(file_path)#檢查檔案是否存在,不存在則退出 if not exist: print "The file %s is not exist! check again " % file_path exit f = open(file_path,'r') contact = pickle.load(f) pprint.pprint(contact) f.close() def add_contact(file_path):#增加使用者函式(是否可以先寫增加的dict,再通過update更新到contact?) exist = os.path.isfile(file_path)#檢查檔案是否存在,不存在則退出 if not exist: print "The file %s is not exist! check again " % file_path exit f = open(file_path,'a+') contact = pickle.load(f)#載入通訊錄 #開啟通訊錄文字後進行新的使用者新增輸入 name = raw_input('>> name:' ) contact[name] = {} cellphone = raw_input('>> cellphone:' ) contact[name]['cellphone'] = cellphone qq = raw_input('>> qq:' ) contact[name]['qq'] = qq tel = raw_input('>> tel:' ) contact[name]['tel'] = tel e_mail = raw_input('>> e-mail:' ) contact[name]['e-mail'] = e_mail f.close() #寫入文字中 f = open(file_path,'w+') pickle.dump(contact,f)#重寫通訊錄 f.close() def menu_choice():#選擇查詢還是增加使用者資訊等 print " *******Welcome to use this python contact_list******* " usage = ''' FUNCTION YOU CAN USE: (1)SEARCH SOMEONE INFOR ON THE CONTACT,INPUT: "search" (2)ADDING SOMEONE INFOR ON THE CONTACT,INPUT: "adding" (3)READING SOMEONE'S CONTACT LIST? INPUT: "reading" (4)(!ATTENTION)RESET CONTACT_LIST OR INITIALIZE: "reset" ''' print usage,'\n' try: choice = raw_input('input your choice refered before >>') if choice == 'reading':#一對if else選擇進行讀取自己的還是別人的conact input_dir = raw_input('input someone contact list file path (eg: E:\python\list1.txt)\n >>>') path_others = r'%s' % input_dir load_contact(path_others) else: in_put = raw_input('input your contact list file path (eg: E:\python\list1.txt)\n >>>') path = r'%s' % in_put #path = r'E:\study\python\tmp\contact_list1.txt' if choice == 'search': load_contact(path) elif choice == 'adding': add_contact(path) elif choice == 'reset': create_contact(path) else: print ''' retry to run the program! %s ''' % usage except: print "something wrong!" while True: menu_choice()
實現情況:
根據題目的要求,基本功能應該都實現了,剩下的只是相容性及容錯性的問題,個人覺得可以進行改進的方面如下:
1)對dict的更新,可否用update去實現,並同步到文字?反覆載入或者重寫對大資料處理可能就變慢了
2)對於讀取他人的通訊錄,需要進行嚴格的限制,否則不符合pickle的格式,導致無法讀取,有無其他更好的相容方法?
3)有幾個地方可以迴圈的更流暢,每次選擇時,可否只輸入一次目錄地址,如果沒有選擇reading,都按預設選項來?這樣可以方便反覆增加使用者,這個應該容易,迴圈巢狀問題。
4)查詢時,可否按名字查詢,或者其它選擇方式?可以更加明確目標。
5)對某個使用者進行刪除,該如何做呢?
其它就是過程簡化方面的了,暫時想到上面的想法。
下面執行起來看下結果如何:
輸出:>>> ================================ RESTART ================================
>>>
*******Welcome to use this python contact_list*******
FUNCTION YOU CAN USE:
(1)SEARCH SOMEONE INFOR ON THE CONTACT,INPUT: "search"
(2)ADDING SOMEONE INFOR ON THE CONTACT,INPUT: "adding"
(3)READING SOMEONE'S CONTACT LIST? INPUT: "reading"
(4)(!ATTENTION)RESET CONTACT_LIST OR INITIALIZE: "reset"
input your choice refered before >>search
input your contact list file path (eg: E:\python\list1.txt)
>>>D:\test_tmp
The file D:\test_tmp is not exist! check again
something wrong!
*******Welcome to use this python contact_list*******
FUNCTION YOU CAN USE:
(1)SEARCH SOMEONE INFOR ON THE CONTACT,INPUT: "search"
(2)ADDING SOMEONE INFOR ON THE CONTACT,INPUT: "adding"
(3)READING SOMEONE'S CONTACT LIST? INPUT: "reading"
(4)(!ATTENTION)RESET CONTACT_LIST OR INITIALIZE: "reset"
input your choice refered before >>reset
input your contact list file path (eg: E:\python\list1.txt)
>>>D:\test_tmp\contact_list.txt
create new contact list successfully !
*******Welcome to use this python contact_list*******
FUNCTION YOU CAN USE:
(1)SEARCH SOMEONE INFOR ON THE CONTACT,INPUT: "search"
(2)ADDING SOMEONE INFOR ON THE CONTACT,INPUT: "adding"
(3)READING SOMEONE'S CONTACT LIST? INPUT: "reading"
(4)(!ATTENTION)RESET CONTACT_LIST OR INITIALIZE: "reset"
input your choice refered before >>search
input your contact list file path (eg: E:\python\list1.txt)
>>>D:\test_tmp\contact_list.txt
{'dongf': {'cellphone': '18905555343',
'e-mail': '[email protected]',
'qq': '12453242',
'tel': '0545-84565544'},
'lijyt': {'cellphone': '13990000343',
'e-mail': '[email protected]',
'qq': '45453242',
'tel': '0512-86565544'},
'zhanw': {'cellphone': '15992222343',
'e-mail': '[email protected]',
'qq': '89545445',
'tel': '0523-89565544'}}
*******Welcome to use this python contact_list*******
FUNCTION YOU CAN USE:
(1)SEARCH SOMEONE INFOR ON THE CONTACT,INPUT: "search"
(2)ADDING SOMEONE INFOR ON THE CONTACT,INPUT: "adding"
(3)READING SOMEONE'S CONTACT LIST? INPUT: "reading"
(4)(!ATTENTION)RESET CONTACT_LIST OR INITIALIZE: "reset"
input your choice refered before >>adding
input your contact list file path (eg: E:\python\list1.txt)
>>>D:\test_tmp\contact_list.txt
>> name:boys
>> cellphone:13487677868
>> qq:3454554655
>> tel:0513-65546567
>> e-mail:[email protected]
*******Welcome to use this python contact_list*******
FUNCTION YOU CAN USE:
(1)SEARCH SOMEONE INFOR ON THE CONTACT,INPUT: "search"
(2)ADDING SOMEONE INFOR ON THE CONTACT,INPUT: "adding"
(3)READING SOMEONE'S CONTACT LIST? INPUT: "reading"
(4)(!ATTENTION)RESET CONTACT_LIST OR INITIALIZE: "reset"
input your choice refered before >>search
input your contact list file path (eg: E:\python\list1.txt)
>>>D:\test_tmp\contact_list.txt
{'boys': {'cellphone': '13487677868',
'e-mail': '[email protected]',
'qq': '3454554655',
'tel': '0513-65546567'},
'dongf': {'cellphone': '18905555343',
'e-mail': '[email protected]',
'qq': '12453242',
'tel': '0545-84565544'},
'lijyt': {'cellphone': '13990000343',
'e-mail': '[email protected]',
'qq': '45453242',
'tel': '0512-86565544'},
'zhanw': {'cellphone': '15992222343',
'e-mail': '[email protected]',
'qq': '89545445',
'tel': '0523-89565544'}}
*******Welcome to use this python contact_list*******
FUNCTION YOU CAN USE:
(1)SEARCH SOMEONE INFOR ON THE CONTACT,INPUT: "search"
(2)ADDING SOMEONE INFOR ON THE CONTACT,INPUT: "adding"
(3)READING SOMEONE'S CONTACT LIST? INPUT: "reading"
(4)(!ATTENTION)RESET CONTACT_LIST OR INITIALIZE: "reset"
input your choice refered before >>reading
input someone contact list file path (eg: E:\python\list1.txt)
>>>D:\test_tmp\contact_list.txt
{'boys': {'cellphone': '13487677868',
'e-mail': '[email protected]',
'qq': '3454554655',
'tel': '0513-65546567'},
'dongf': {'cellphone': '18905555343',
'e-mail': '[email protected]',
'qq': '12453242',
'tel': '0545-84565544'},
'lijyt': {'cellphone': '13990000343',
'e-mail': '[email protected]',
'qq': '45453242',
'tel': '0512-86565544'},
'zhanw': {'cellphone': '15992222343',
'e-mail': '[email protected]',
'qq': '89545445',
'tel': '0523-89565544'}}
*******Welcome to use this python contact_list*******
FUNCTION YOU CAN USE:
(1)SEARCH SOMEONE INFOR ON THE CONTACT,INPUT: "search"
(2)ADDING SOMEONE INFOR ON THE CONTACT,INPUT: "adding"
(3)READING SOMEONE'S CONTACT LIST? INPUT: "reading"
(4)(!ATTENTION)RESET CONTACT_LIST OR INITIALIZE: "reset"
input your choice refered before >>
上面執行的步驟是:
1、檔案不存在
2、建立contact list
3、查詢
4、增加使用者
5、查詢是否增加
6、讀取其它通訊錄(實際中用的是原來的)
整個流程基本是走完了,看樣子還行。
總結:
這個程式中用到的知識:
1、檔案的操作(開啟,移除,建立)
2、pickle模組的使用,載入與生成
3、字典的初始化,增刪
4、輸入與字典賦值
5、迴圈的使用if else,while,異常處理等
相關推薦
一個作業題---用python建立一個通訊錄
題目: 一個文字通訊錄要求: 內容含有:姓名,電話(手機,座機),qq,email儲存功能實現:通過命令列輸入後儲存到檔案讀取功能和相容性:自己程式能讀出其他同學建立的通訊錄答案: #!/usr/bin/env python #!encoding:utf-8 #filen
用python建立一個簡單的restful風格的web服務應用
這是一個如何使用python快速構建簡單restful風格webservice的應用教程。 1.分析rest路由規則 rest風格的服務通常使用web.py來建立伺服器端指令碼,一般情況下包含兩個url路徑: 一個是為了查詢所有使用者,一個是為了查詢單個使用者。 例
用virtualenv建立一個獨立的Python執行環境時報錯
[email protected]:~/桌面/myproject$ virtualenv --no-site-packages p1 New python executable in /hom
python+VTK環境搭建:安裝及用PyQt5建立一個包含三維模型的互動視窗
一、VTK簡介及安裝 1.1 VTK介紹 Vtk(visualization toolkit)是一個開源的免費軟體系統,主要用於三維計算機圖形學、影象處理和視覺化。Vtk是在面向物件原理的基礎上設計和實現的,它的核心是用C++構建的,包含有大約25
用Python寫一個批量生成賬號的函數(用戶控制數據長度、數據條數)
shuf open 小寫 長度 數據 ase 函數 用戶控制 app # 1、寫一個函數,批量生成一些註冊使用的賬號:[email protected]/* */,長度由用戶輸入,產生多少條也由用戶輸入,用戶名不能重復,用戶名必須由大寫字母、小寫字母、數字組成
繞過010Editor網絡驗證(用python做一個仿真http server真容易,就幾行代碼)
headers redirect 如果 table 本地 align cnn 破解版 resp 010Editor是一款非常強大的十六進制編輯器,尤其是它的模板功能在分析文件格式時相當好用!網上現在也有不少010Editor的破解版,如果沒錢或者舍不得花錢買授權的話,去官方
用Python寫一個小遊戲
python 小腳本 剛學Python時間不長,但也知道了一點,看別人的參考寫了一個猜數字小遊戲,也算是禹學於樂吧。#!/usr/bin/env python #coding=utf-8
用 Python 擼一個區塊鏈
條件 ask 接收 掌握 color resolve iou value 使用 本文翻譯自 Daniel van Flymen 的文章 Learn Blockchains by Building One 略有刪改。原文地址:https://hackernoon.com/le
用python實現一個命令行文本編輯器
screen alt 保存 模型 既然 ffffff 圖片 單行 pda “這看起來相當愚蠢”——題記 不過我整個人都很荒誕,何妨呢?貼一張目前的效果圖 看起來很舒服,不是麽?即使一切都是個幌子:光標只能在最後,按一下上下左右就會退出,一行超出75個字符
用python寫一個簡單的excel表格獲取當時的linux系統信息
psutil 生成 之前 建立 set ces ext 流量 關閉 最近在學習excel表格的制作,順便結合之前學習的內容,利用python的兩個模板,分別是獲取系統信息的psutil,和生成excel表格的xlsxwriter。利用這兩個模板將生成一個簡單的excel表格
用python把一個txt文件中所有逗號,替換成空格?
image split() 技術分享 pytho pre ron lines mark class 1 string = "word 2 3 4 5 6 7" 2 string = ",".join(string.split()) 3
用python寫一個九九乘法表-2月19日/2018
九九乘法 while -c pos ont 九九 pytho 九九乘法表 font first = 1 while first<=9: sec=1 while sec<=first: print(str(sec),"x",str(first),
用python寫一個restful API
python restful # -*- coding: utf-8 -*- # 作者: 煮酒品茶 """ package.module ~~~~~~~~~~~~~~ python實現的圖書的一個restful api. 參考restful設計指南 URL:
用python寫一個微信聊天機器人
python wechat 聊天機器人 # -*- coding: utf-8 -*- """ package.module ~~~~~~~~~~~~~~ 一個微信機器人程序 微信客戶端itchat: http://itchat.readthed
用Python實現一個大數據搜索及源代碼
Python編程語言 Python案例講解 Python基礎精講 在日常生活中,大家了解搜索引擎如百度、360、搜狗、谷歌等,搜索是大數據領域裏常見的需求。Splunk和ELK分別是該領域在非開源和開源領域裏的領導者。本文利用很少的Python代碼實現了一個基本的數據搜索功能,試圖讓大家理解大數據
用python寫一個微信跳一跳外掛,瞬間稱霸朋友圈
python 微信 跳一跳 爬蟲12月28日,微信宣布,小程序增加了新的類目:小遊戲,同時上線小遊戲 你們跳的再好,在毫無心理波動的程序面前都是渣渣。 剛剛會python的小白想玩怎麽辦? 下有詳細的教程,哈哈,包教會不收任何的費用。 感受一下被支配的恐懼吧: 使用工具1.python3.6 2.adb 3
用Python設計一個基於命令行的圖形界面
繪圖 結果 ssh mat intro 彩色 問題 服務 otl Introduction 如今很多開發工作都需要遠程進行,比如深度學習需要登錄到專門的服務器上。當你需要看一些可視化的結果時,可能需要用到matplotlib或是seaborn這樣的繪圖庫。那麽你或許還需要通
用 Python 構建一個極小的區塊鏈
計算機 特定 使用 lock 為我 並且 沒有 python學習 為什麽 雖然有些人認為區塊鏈是一個早晚會出現問題的解決方案,但是毫無疑問,這個創新技術是一個計算機技術上的奇跡。那麽,究竟什麽是區塊鏈呢? 區塊鏈 以比特幣(Bitcoin)或其它加密
用Python 寫一個TCP 伺服器和TCP代理
TCP伺服器 import socket import threading bind_ip="0.0.0.0" bind_port=9999 server=socket.socket(socket.AF_INET,socket.SOCK_STREAM) server.bind((bind_i
用Python寫一個語音播放軟體
單位經常使用廣播進行臨時事項的通知(將文字轉換為語音然後通過功放廣播),但是市面上多數語音播放軟體都是收費的,要麼發音失真,要麼不夠穩定——經常出現莫名其妙的故障,容易給工作帶來被動。學Python這麼久不如動手寫一款自己的語音廣播軟體,即使發生故障也可以自行排除。 介面設計 在開始動