学习python模拟的名片管理系统代码优化

学习python做简单的增删改查,还按老规矩先把架构搭建起来,做了基本的功能,因为是初学者,所以不可避免要经历其他初学者一样的错误,经过许多次的报错调试,终于做出第一版代码,虽然很粗糙,但是还是有那么一点点自喜,以前接触过代码,大都是抄别人的,网上做好的拿过来分析,如果有和我一样的朋友千万不要这样做,学不到什么?被人写的代码只能做功能的借鉴,捉摸别人的思路是最困难的也是最不适用的方法,还是要自己去捉摸逻辑,自己去优化,把逻辑搞明白了,以后再看别人的代码,也许很快就懂了。开发语言一通百通,大概讲的就是这个吧?不说了,上代码:

#请输入管理序号:
#1、增加名片
#input("请输入你的姓名:")
#input("请输入你的联系方式:")
#input("请输入你的qq:")
#input("请输入你的邮箱地址:")
#2、修改名片
#3、删除名片
#4、查找名片
#5、遍历名片
#6、退出
infor_group = []
i = 1
while i>0 :
    while True:
        serial_str = input("请输入你的管理序号:")
        try:
            serial_number = int(serial_str)
            if type(serial_number) == int :
                break
        except:
            print("请输入数字!!!")

    if serial_number == 1:
        name = input("请输入你的姓名:")
        telephone = input("请输入你的手机号:")
        qq = input("请输入你的qq:")
        mail = input("请输入你的mail:")
        infor = {}
        infor['name']= name
        infor['telephone'] = telephone
        infor['qq']=qq
        infor['mail']=mail
        infor_group.append(infor)
        print("-"*41)
        print("%s\t%s\t%s\t%s"%("姓名","手机号","qq","mail"))
        print("-"*41)
        for infor_show in infor_group:
            print("%s\t%s\t%s\t%s"%(infor_show['name'],infor_show['telephone'],infor_show['qq'],infor_show['mail']))
            
    elif serial_number == 2:
        j = 1
        while j > 0 :
            if j == 1:
                modify_name = ""
                modify_name = input("请输入你要修改的名片姓名:") 
                j += 1
                z = 0
            #遍历列表,取出列表中字典元素
            for infor_modify in infor_group:
                #查找要修改名片的姓
                if modify_name == infor_modify['name']:
                    z += 1
                    if z ==1:
                        modify_field = input("请输入你要修改的字段:")
                        modify_content = input("请输入你要修改的内容:")
                    else:
                        print("系统中存在重名是否继续修改,继续请输入1")
                        content =int( input("请输入:"))
                        if content != 1:
                            break

                    if modify_field in infor_modify:
                        infor_modify[modify_field]=modify_content
                    else:
                        print("输入有误,请重新输入!")
            print("-"*41)
            print("%s\t%s\t%s\t%s"%("姓名","手机号","qq","mail"))
            print("-"*41)
            for infor_show in infor_group:
                print("%s\t%s\t%s\t%s"%(infor_show['name'],infor_show['telephone'],infor_show['qq'],infor_show['mail']))

            h =1
            while h == 1:
                continue_modify = int(input("请输入1、修改下一名片,2、修改字段,3、退出"))
                if continue_modify == 1:
                    j = 1
                    h += 1
                elif continue_modify == 2:
                    h += 1
                elif continue_modify == 3:
                    j = -1
                    h += 1
                else:
                    print("输入有误请重新输入")
            
            if z == 0 :
                print("请输入正确的字段名")
                j = 1




    elif serial_number == 3:
        #输入要删除的名片姓名
        i = 1
        while i == 1:
            del_name  = input("请输入你要删除的名片姓名:")
            #遍历列表,查找对应姓名的名片
            j = 0
            z = 1
            for infor  in infor_group:
                #if 输入姓名=  查找姓名,删除名片
                if del_name == infor['name']:
                    z=j
                    del infor_group[z]
                j += 1
            if j == 0:
                #如果没有查到提示删除的名片不存在
                print("列表中没有要查找的名片,请重新输入")
            else:
                #打印列表
                print("名片已删除")
                print("-"*41)
                print("%s\t%s\t%s\t%s"%("姓名","手机号","qq","mail"))
                print("-"*41)
                for infor_show in infor_group:
                    print("%s\t%s\t%s\t%s"%(infor_show['name'],infor_show['telephone'],infor_show['qq'],infor_show['mail']))
                i += 1

    elif serial_number == 4:
        #输入要查询的名片信息
        j = 1
        while j == 1:
            find_field = input("请输入要查的字段:")
            find_content = input("请输入要查询的内容:")
            #遍历列表
            new_infor = []
            n=0
        #如果输入姓名==列表姓名,打印查询的内容
            for infor in infor_group:
                for infor_key, infor_values in infor.items():
                    if find_field ==infor_key and find_content == infor_values:
                        new_infor.append(infor)
                        n = 1
        #如果没查到返回报错信息
            if n == 0:
                print("没有找到你要查询的内容,请重新查找")
            else:
                print("-"*41)
                print("%s\t%s\t%s\t%s"%("姓名","手机号","qq","mail"))
                print("-"*41)
                for infor_show in new_infor:
                    print("%s\t%s\t%s\t%s"%(infor_show['name'],infor_show['telephone'],infor_show['qq'],infor_show['mail']))
                j += 11
    elif serial_number == 5:
        print("-"*41)
        print("%s\t%s\t%s\t%s"%("姓名","手机号","qq","mail"))
        print("-"*41)
        for infor_show in infor_group:
            print("%s\t%s\t%s\t%s"%(infor_show['name'],infor_show['telephone'],infor_show['qq'],infor_show['mail']))
        
    elif serial_number == 6:
        break
    else:
        print("输入错误,请输入正确序号(1-6)!")

大体的思路就是建立一个空列表,把新增人员的信息存入字典里,然后把字典添加到列表里,根据字典的名字定位字典,查询、修改和删除里面的字段。做完以后回头反复检查,发现有些循环是不必要的,所以做了第二版修改:

  1 #请输入管理序号:
  2 #1、增加名片
  3 #input("请输入你的姓名:")
  4 #input("请输入你的联系方式:")
  5 #input("请输入你的qq:")
  6 #input("请输入你的邮箱地址:")
  7 #2、修改名片
  8 #3、删除名片
  9 #4、查找名片
 10 #5、遍历名片
 11 #6、退出
 12 infor_group = []
 13 def print_list1():
 14     print("-"*41)
 15     print("%s\t%s\t%s\t%s"%("姓名","手机号","qq","mail"))
 16     print("-"*41)
 17     for infor_show in infor_group:
 18         print("%s\t%s\t%s\t%s"%(infor_show['name'],infor_show['telephone'],infor_show['qq'],infor_show['mail']))
 19 
 20 i = 1
 21 while i>0 :
 22     while True:
 23         serial_str = input("请输入你的管理序号:")
 24         try:
 25             serial_number = int(serial_str)
 26             if type(serial_number) == int :
 27                 break
 28         except:
 29             print("请输入数字!!!")
 30 
 31     if serial_number == 1:
 32         name = input("请输入你的姓名:")
 33         telephone = input("请输入你的手机号:")
 34         qq = input("请输入你的qq:")
 35         mail = input("请输入你的mail:")
 36         infor = {}
 37         infor['name']= name
 38         infor['telephone'] = telephone
 39         infor['qq']=qq
 40         infor['mail']=mail
 41         infor_group.append(infor)
 42         print_list1()    
 43     elif serial_number == 2:
 44         j = 1
 45         while j > 0 :
 46             if j == 1:
 47                 modify_name = ""
 48                 modify_name = input("请输入你要修改的名片姓名:") 
 49                 j += 1
 50                 z = 0
 51             #遍历列表,取出列表中字典元素
 52             for infor_modify in infor_group:
 53                 #查找要修改名片的姓
 54                 if modify_name == infor_modify['name']:
 55                     z += 1
 56                     if z ==1:
 57                         modify_field = input("请输入你要修改的字段:")
 58                         modify_content = input("请输入你要修改的内容:")
 59                     else:
 60                         print("系统中存在重名是否继续修改,继续请输入1")
 61                         content =int( input("请输入:"))
 62                         if content != 1:
 63                             break
 64 
 65                     if modify_field in infor_modify:
 66                         infor_modify[modify_field]=modify_content
 67                     else:
 68                         print("输入有误,请重新输入!")
 69             print_list1()
 70 
 71             h =1
 72             while h == 1:
 73                 continue_modify = int(input("请输入1、修改下一名片,2、修改字段,3、退出"))
 74                 if continue_modify == 1:
 75                     j = 1
 76                     h += 1
 77                 elif continue_modify == 2:
 78                     h += 1
 79                 elif continue_modify == 3:
 80                     j = -1
 81                     h += 1
 82                 else:
 83                     print("输入有误请重新输入")
 84             
 85             if z == 0 :
 86                 print("请输入正确的字段名")
 87                 j = 1
 88 
 89 
 90 
 91 
 92     elif serial_number == 3:
 93         #输入要删除的名片姓名
 94         i = 1
 95         while i == 1:
 96             del_name  = input("请输入你要删除的名片姓名:")
 97             #遍历列表,查找对应姓名的名片
 98             j = 0
 99             z = 1
100             for infor  in infor_group:
101                 #if 输入姓名=  查找姓名,删除名片
102                 if del_name == infor['name']:
103                     z=j
104                     del infor_group[z]
105                 j += 1
106             if j == 0:
107                 #如果没有查到提示删除的名片不存在
108                 print("列表中没有要查找的名片,请重新输入")
109             else:
110                 #打印列表
111                 print("名片已删除")
112                 print_list1()
113                 i += 1
114 
115     elif serial_number == 4:
116         #输入要查询的名片信息
117         j = 1
118         while j == 1:
119             find_field = input("请输入要查的字段:")
120             find_content = input("请输入要查询的内容:")
121             #遍历列表
122             new_infor = []
123             n=0
124         #如果输入姓名==列表姓名,打印查询的内容
125             for infor in infor_group:
126                 for infor_key, infor_values in infor.items():
127                     if find_field ==infor_key and find_content == infor_values:
128                         new_infor.append(infor)
129                         n = 1
130         #如果没查到返回报错信息
131             if n == 0:
132                 print("没有找到你要查询的内容,请重新查找")
133             else:
134                 print("-"*41)
135                 print("%s\t%s\t%s\t%s"%("姓名","手机号","qq","mail"))
136                 print("-"*41)
137                 for infor_show in new_infor:
138                     print("%s\t%s\t%s\t%s"%(infor_show['name'],infor_show['telephone'],infor_show['qq'],infor_show['mail']))
139                 j += 11
140     elif serial_number == 5:
141         print_list1() 
142     elif serial_number == 6:
143         break
144     else:
145         print("输入错误,请输入正确序号(1-6)!")

第二版只是学到函数,做了简单的调整,随着函数的深入学习,我尝试将每个模块功能分开,用函数封装起来,于是得到第三版,在封装过程中,遇到一个小插叙,耗费我半天的时间才搞明白,原本我是把框架作为主函数一起封装的,但是运行过程中发现自己在函数里修改的全局变量突然不能用了,无论怎么修改都不行,即时在函数外再定义一个全局变量,问题还在,原来我在架构里定义全局,并赋值,即时函数外再定义,修改后的变量会再架构函数里被重新修改,这个地方虽然明白了,却还没有想明白要怎么处理,所以就只能暂时不对架构封装。

  1 #请输入管理序号:
  2 #1、增加名片
  3 #input("请输入你的姓名:")
  4 #input("请输入你的联系方式:")
  5 #input("请输入你的qq:")
  6 #input("请输入你的邮箱地址:")
  7 #2、修改名片
  8 #3、删除名片
  9 #4、查找名片
 10 #5、遍历名片
 11 #6、退出
 12 infor_group = [] #定义一个列表
 13 
 14 #定义管理功能选择
 15 def put_num():
 16     while True:
 17         serial_str = input("请输入你的管理序号:")
 18         try:
 19             serial_number = int(serial_str)
 20             if type(serial_number) == int :
 21                 break
 22         except:
 23             print("请输入数字!!!")
 24     return serial_number
 25 #定义新增名片函数
 26 def put_add():
 27     name = input("请输入你的姓名:")
 28     telephone = input("请输入你的手机号:")
 29     qq = input("请输入你的qq:")
 30     mail = input("请输入你的mail:")
 31     infor = {} # 定义空字典
 32     #输入信息赋给字典
 33     infor['name']= name
 34     infor['telephone'] = telephone
 35     infor['qq']=qq
 36     infor['mail']=mail
 37     #字典加入列表
 38     infor_group.append(infor)
 39     #打印列表
 40     print_list1()
 41 #定义修改名片姓名函数
 42 def put_mvname():
 43     j = 1
 44     while j == 1:
 45         #modify_name = ""
 46         z = 0
 47         modify_name = input("请输入你要修改的名片姓名:") 
 48         for infor_modify in infor_group: 
 49             if modify_name == infor_modify['name']:
 50                 j += 1
 51                 z += 1
 52                 break
 53         if z == 0:
 54             print("未查到该名片请重新输入:1、修改名片,3、退出")
 55             put_choice()        
 56     return modify_name # 返回modify_name
 57 #定义修改名片字段函数
 58 def put_mvfield(modify_name):
 59     h = 0
 60     while h == 0 :
 61             modify_field = input("请输入你要修改的字段:")
 62             modify_content = input("请输入你要修改的内容:")
 63             #遍历列表,取出列表中字典元素
 64             for infor_modify in infor_group:
 65                 #查找要修改名片的姓名和字段
 66                 if modify_name == infor_modify['name'] and modify_field in infor_modify:
 67                     h += 1
 68                     if h > 1:
 69                         print("系统中存在重名是否继续修改,继续请输入1")
 70                         content =int( input("请输入:"))
 71                         if content != 1:
 72                             break
 73                         #修改字段内容
 74                     infor_modify[modify_field]=modify_content
 75                     print_list1()
 76                     
 77             if h == 0:
 78                 print("未查到您输入的字段!")
 79             print("1、修改名片,2、修改字段,3、退出")
 80             h = put_choice()
 81 #定义删除名片函数
 82 def put_del():                    
 83     #输入要删除的名片姓名
 84     i = 1
 85     while i == 1:
 86         del_name  = input("请输入你要删除的名片姓名:")
 87         #遍历列表,查找对应姓名的名片
 88         j = 0
 89         z = 1
 90         for infor  in infor_group:
 91             #if 输入姓名=  查找姓名,删除名片
 92             if del_name == infor['name']:
 93                 z=j
 94                 del infor_group[z]
 95             j += 1
 96         if j == 0:
 97             #如果没有查到提示删除的名片不存在
 98             print("列表中没有要查找的名片,请重新输入")
 99         else:
100             #打印列表
101             print("名片已删除")
102             print_list1()
103             i += 1
104 def put_find():            
105     #输入要查询的名片信息
106     j = 1
107     while j == 1:
108         find_field = input("请输入要查的字段:")
109         find_content = input("请输入要查询的内容:")
110         #遍历列表
111         new_infor = []
112         n=0
113     #如果输入姓名==列表姓名,打印查询的内容
114         for infor in infor_group:
115             for infor_key, infor_values in infor.items():
116                 if find_field ==infor_key and find_content == infor_values:
117                     new_infor.append(infor)
118                     n = 1
119     #如果没查到返回报错信息
120         if n == 0:
121             print("没有找到你要查询的内容,请重新查找")
122         else:  #打印查询出来的列表
123             print("-"*41)
124             print("%s\t%s\t%s\t%s"%("姓名","手机号","qq","mail"))
125             print("-"*41)
126             for infor_show in new_infor:
127                 print("%s\t%s\t%s\t%s"%(infor_show['name'],infor_show['telephone'],infor_show['qq'],infor_show['mail']))
128             j += 1
129 #定义返回选择函数            
130 def put_choice():
131     h = 1
132     while h == 1:
133         global j
134         continue_modify = int(input("请输入:"))
135         if continue_modify == 1:
136             j = 1
137             h += 1
138         elif continue_modify == 2:
139             h = 0
140         elif continue_modify == 3:
141             j = -1
142             h += 1
143         else:
144             print("输入有误请重新输入")
145     return h
146 #定义打印列表函数
147 def print_list1():
148     print("-"*41)
149     print("%s\t%s\t%s\t%s"%("姓名","手机号","qq","mail"))
150     print("-"*41)
151     for infor_show in infor_group:
152         print("%s\t%s\t%s\t%s"%(infor_show['name'],infor_show['telephone'],infor_show['qq'],infor_show['mail']))
153 
154 
155 #定义名片管理系统框架
156 i = 1
157 while i>0 :
158     serial_number = put_num()
159 
160     if serial_number == 1: #新增名片
161         put_add()
162     elif serial_number == 2: #修改名片
163         j=1
164         while j > 0 :
165            mvname = put_mvname()
166            put_mvfield(mvname)
167     elif serial_number == 3: #删除名片
168         put_del()
169 
170     elif serial_number == 4: #查找名片
171         put_find()
172     elif serial_number == 5: #遍历列表
173         print_list1() 
174     elif serial_number == 6: #退出
175         break
176     else:
177         print("输入错误,请输入正确序号(1-6)!")

时间关系,暂时先做到这里随着学习深入,应该有更好的优化方案,加油!年纪大了,不想做开发者,纯粹个人爱好,勿喷!

posted @ 2020-06-03 18:02  长脸大马猴  阅读(242)  评论(0编辑  收藏  举报