1. 程式人生 > >一個作業題---用python建立一個通訊錄

一個作業題---用python建立一個通訊錄

題目:

一個文字通訊錄要求:

  1. 內容含有:姓名,電話(手機,座機),qq,email
  2. 儲存功能實現:通過命令列輸入後儲存到檔案
  3. 讀取功能和相容性:自己程式能讀出其他同學建立的通訊錄
答案:
#!/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這麼久不如動手寫一款自己的語音廣播軟體,即使發生故障也可以自行排除。 介面設計 在開始動