希腊房价地图:[Python]第一个简单的python实例

来源:百度文库 编辑:偶看新闻 时间:2024/04/26 19:32:36
2011-03-16 14:33

  说明:该实例是实现一个邮件地址薄,可以添加,删除,修改,查找。

  代码如下:

import pickle,os,re  #导入模块(如不熟这几个模块可查阅相关资料)
print('按数字1添加新成员,按数字2删除成员,按数字3修改成员,按数字4查找成员,按数字5退出\n\n')
#注意以下方法中:变量address引用的是一个对象

def print_address():#函数必须定义在调用之前
    print('\n\n现在,你的通信录里已有这些人了:\n')
    print('name<-------------->email\n')
    for i in address:
        print('%s<---------------->%s'%(i,address[i]))
    print('\n\n')


def set_address(path):
    with open(path,'wb') as f:
        pickle.dump(address,f,True) #使用pickle来序列化存储python对象
#这里使用with来自动关闭文件
#也使用try...finally..解决方案
#(无论你以何种方式跳出with块,Python会自动关闭那个文件)


def get_address(path):
    if not os.path.exists(path):
        return {}
    with open(path,'rb') as f:
        if len(f.readline()) <=0:
            return {}
        f.seek(0)#将流对象定位到文件开头
        b = pickle.load(f)#反序列化重新使用对象
        return b


def option(path):
    op = input('操作代码(1添加,2删除,3修改,4查找,5退出):')
    if re.match("[0-9]{1}",op) == None: #使用正则
        print('操作码错误!')
        option(path)
    op = int(op)
    if op == 1:
        name = input('请输入新成员的姓名:')
        email= input('请输入新成员的Email:')
        address[name] = email
    elif op == 2:
        name = input('请输入要删除成员的姓名:')
        if name in address: #值的存在 if v in address.values()
            del address[name]
        else:
            print('成员:'+name+'不在你的联系人表中。')
    elif op == 3:
        name = input('请输入要修改成员的姓名:')
        if name in address:
            email = input('请输入成员'+name+'的邮件地址:')
            if email in address.values():
                print('\n对不起,此邮件已存在了!\n')
            else:
                address[name] = email
                print('\n修改成功!\n')
        else:
            print('\n成员 %s 不在你的联系人表中。\n'%(name))
    elif op == 4:
        name = input('请输入要查找成员的姓名:')
        if name in address:
            print('找到了 %s 成员,其信息如下:'%(name))
            print('name: %s,email: %s'%(name,address[name]))
        else:
            print('\n成员 %s 不在你的联系人表中。\n'%(name))
    elif op == 5:
        exit()#退出
      
    print_address()
    set_address(path)#重新存储
    option(path)#递归调用自己

##################运行############
    
path = 'test.pickle'
address = get_address(path)

if len(address)<1:
    print('你的通信录为空,请按数字1添加你的通信录')
    op = input('请输入:')
    if len(op)<1 or int(op) != 1:
        print('非法输入')
    else:
        name = input('请输入姓名:')
        email= input('请输入Email:')
        address[name] = email
        set_address(path)
        print_address()
else:
    print_address()
option(path)

结果:

 


附:关于正则http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

          关于持久化(pickle):http://www.ibm.com/developerworks/cn/linux/l-pypers/