《简明Python教程》中的地址簿

这几天在学Python,ESR在《How to be a hacker?》中首推了Python语言。Follow the path,follow the master。一开始,直接看了Python官方教程,后来不知怎么发现了《A Byte of Python》(简明Python教程,http://woodpecker.org.cn/abyteofpython_cn/chinese/index.html),看得酣畅淋漓。

书后,有一个地址簿的任务:

我会建议你先解决这样一个问题:创建你自己的命令行 地址簿 程序。在这个程序中,你可以添加、修改、删除和搜索你的联系人(朋友、家人和同事等等)以及它们的信息(诸如电子邮件地址和/或电话号码)。这些详细信息应该被保存下来以便以后提取。

思考一下我们到目前为止所学的各种东西的话,你会觉得这个问题其实相当简单。如果你仍然希望知道该从何处入手的话,那么这里也有一个提示。

提示(其实你不应该阅读这个提示) 创建一个类来表示一个人的信息。使用字典储存每个人的对象,把他们的名字作为键。使用cPickle模块永久地把这些对象储存在你的硬盘上。使用字典内建的方法添加、删除和修改人员信息。

一旦你完成了这个程序,你就可以说是一个Python程序员了。现在,请立即寄一封信给我感谢我为你提供了这本优秀的教材吧。是否告知我,如你所愿,但是我确实希望你能够告诉我。

 这里是我完成代码:

#!/usr/bin/python
# Filename: chanAddress
# Author: instona


class Contact:
  def __init__(self,tel,email):
    self.tel = tel
    self.email = email
  def modify(self,which,value):
    if which == 'tel':
      self.tel = value
    elif which == 'email':
      self.email = value

import sys
import cPickle
import os

if len(sys.argv)<2:
  print "At least two arguments!"
  sys.exit()
if sys.argv[1].startswith('-'):
  # load contact data
  dataPath= '/home/instona/Code/contact.data'
  if not os.path.exists(dataPath):
     conData = {}
  else:
     f = file(dataPath)
     conData = cPickle.load(f)
     f.close()
  # various opertions
  option = sys.argv[1][1:]
  if option == 'a':
     name = raw_input("Enter his/her name:")
     tel = raw_input("His/her telephone number:")     
     email = raw_input("And email:")
     contact = Contact(tel,email)
     conData[name] = contact
  elif option == 'm':
     name = raw_input("Modify?Enter his/her name:")
     try:
       theOne = conData[name]
     except KeyError:
       print "We couldn't find '%s'!"%name
       sys.exit()
     if raw_input("Want his/her telephone number modified?<y/n>") == 'y':
       newTel = raw_input("New telephone number is:")
       theOne.modify('tel',newTel)
     if raw_input("Want his/her email modified?<y/n>") == 'y':
       newEmail = raw_input("New email is:")
       theOne.modify('email',newEmail)
  elif option == 'd':
     name = raw_input("Delete?Enter his/her name:")
     try:
       theOne = conData[name]
     except KeyError:
       print "We couldn't find '%s'!"%name
       sys.exit()
     if raw_input("Sure to delte '%s'?<y/n>"%name) == 'y':
       del conData[name]    
  elif option == 's':
     name = raw_input("Delete?Enter his/her name:")
     try:
       theOne = conData[name]
     except KeyError:
       print "We couldn't find '%s'!"%name
       sys.exit()
     print "*****"
     print "Name:",name
     print "Tel:",theOne.tel
     print "Email:",theOne.email
     print "*****"

  f = file(dataPath,'w')
  cPickle.dump(conData,f)
  f.close()
  print "Operation Done."
else:
  print "Unknown opetion: %s"%sys.argv[1]

posted @ 2013-04-14 22:20  l3sl!e  阅读(542)  评论(0编辑  收藏  举报