Python 初学笔记:地址簿练习
2014-03-15 23:38
429 查看
《简明Python教程》(点击打开链接)里有一个关于地址簿练习的提议,个人觉得很有意思,刚好也练练手。具体实现代码如下:
代码运行起来,暂时感觉效果还可以,以后有机会再做改进。
附:Python类,当创建的新对象与原有对象同名时,会自动删掉原来的对象。或者说当一个对象没有引用时,它就会被立即删掉。例如下面一段程序,对变量p二次赋值时,原有的对象Sinjon就自动调用__del__方法删掉了。
输出:
# Filename: adsbook.py import cPickle import os class Person: fname = "adsbook.pd" adslist = {} def __init__(self, name, age, email, phone): self.name = name self.age = age self.email = email self.phone = phone Person.adslist[name] = [age, email, phone] # print "Name: %s; Age: %s;\nEmail: %s;\nPhone: %s;\n\twas created." \ # % (name, age, email, phone) def __del__(self): # print "%s has been deleted." % self.name pass class NameIsNullError(IOError): def __init__(self, errstr): IOError.__init__(self) self.errstr = errstr print errstr def Validate(input_str): if len(input_str) == 0: return 'Unknow' else: return input_str def Save(adslist, fname): if len(adslist) >= 1: f = file(fname, 'w') cPickle.dump(adslist, f) f.close() else: pass if os.path.isfile(Person.fname): f = file(Person.fname) Person.adslist = cPickle.load(f) f.close() else: pass flag = True while flag: s = raw_input("Enter your option --->") if s == 'quit': flag = False elif s == 'help': print '''help: help!!!; quit: quit; version: version; add: add a new person; modify: modify some info.; del: delete one's info.; find: find details about s.b.; save: save the info.. ''' elif s == 'version': print 'Version 1.0.0' elif s == 'add' or s == 'modify': name = raw_input("Name: --->") if len(name) == 0: raise NameIsNullError('Error: input name is null') elif Person.adslist.has_key(name) and s == 'add': print 'A person called %s has already exists.\ Do you want to update his/her information? (y/n)' % name if raw_input() == 'n': continue else: pass age = raw_input("Age: --->") # age = Validate(age) email = raw_input("Email: --->") # email = Validate(email) phone = raw_input("Phone: --->") # phone = Validate(phone) Person(name, age, email, phone) elif s == 'del': name = raw_input("Enter the name to be deleted: --->") if len(name) == 0: pass elif Person.adslist.has_key(name): del Person.adslist[name] print '%s has been deleted.' % name else: print 'The name you entered does not exists.' elif s == 'find': name = raw_input("Enter the name you want to find out: --->") if len(name) == 0: pass elif not Person.adslist.has_key(name): print r"The name you entered doesn't exists." else: print "Name: %s; Age: %s;\nEmail: %s;\nPhone: %s;"\ % (name, Person.adslist[name][0], Person.adslist[name][1], \ Person.adslist[name][2]) elif s == 'save': Save(Person.adslist, Person.fname) print 'Done' else: print 'Unknow option.' # Save to pickler Save(Person.adslist, Person.fname)
代码运行起来,暂时感觉效果还可以,以后有机会再做改进。
附:Python类,当创建的新对象与原有对象同名时,会自动删掉原来的对象。或者说当一个对象没有引用时,它就会被立即删掉。例如下面一段程序,对变量p二次赋值时,原有的对象Sinjon就自动调用__del__方法删掉了。
class Person: population = 0 def __init__(self, name, age): self.name = name self.age = age Person.population += 1 print 'initializing person:\n Name %s Age %s' % (name, age) def __del__(self): Person.population -= 1 print 'deleting person:\n name %s' % self.name def sayHello(self): print 'Hello, my name is', self.name def howMany(self): if Person.population == 1: print 'I am the only person here.' else: print 'We have %d persons here.' % Person.population p = Person('Sinjon', 25) p.sayHello() p.howMany() p = Person('Candy', 25) p.sayHello() p.howMany()
输出:
相关文章推荐
- Python 初学笔记:逻辑门练习
- Python初学笔记~
- python初学笔记(五)---实例学python
- [python]学习笔记4-关于列表去重练习
- Python 初学笔记:不支持中文字符?
- Python初学笔记
- 5个适合初学python的编程练习
- 初学HTML+CSS练习搭建个人博客笔记
- python练习笔记——面试题 F(n) = F(n-1)+F(n-2)
- Python初学笔记(1)
- python练习笔记——模拟双色球随机输出情况
- python初学笔记(三)
- python初学笔记(四)
- 笨办法学Python学习笔记 练习19
- 初学python-练习_1使用python编写计算班级学生平均分程序
- 笨办法学Python学习笔记 练习25
- 初学python-练习_4使用python编写本地登录程序(带注册)
- Python初学笔记之wxPython对话框
- Python初学笔记——琐碎知识,based on 2.7.3,持续更新中
- 初学Python的学习笔记11----使用元类、错误处理和调试