Python基础进阶之路(五)之名片管理系统实践
本科老师最喜欢的就是做一个名片管理系统,根据已学的Python 知识做一个简单的实践
python 2.7
sublime + python2
先放程序运行结果:
运行主程序:cards_main.py
#-*-coding:utf-8-*- import cards_tools if __name__ == "__main__": cards_tools.show_menu() while True: action_str = input("请选择希望执行的操作: ") print ("您选择的操作是 【%s】" % action_str) print "#"*50 # 1 ,2,3针对名片的操作 if action_str in [1,2,3]: # 添加名片 if action_str == 1: cards_tools.new_card() # 显示所有名片 if action_str == 2: cards_tools.show_all() # 查询名片 if action_str == 3: cards_tools.search_card() # pass # 0 退出系统 elif action_str == 0: print ("欢迎再次使用【名片管理系统】 ") # 如果在开发程序时,不希望立刻编写分支内部的代码 # 可以使用 pass 关键字,表示一个占位符,能保证程序的代码结构正确! # 程序运行时,pass break # pass # 其他情况输入错误 else: print "您输入的不正确,请重新选择 "
功能实现文件: cards_tools.py
#-*-coding:utf-8-*- # 存储名片的列表 cards_list = [] def show_menu(): """显示目录""" print("欢迎使用【名片管理系统】") print("1-新建名片") print("2-显示全部") print("3-查询名片") print("") print("0-退出系统") def new_card(): print "新建名片" # 添加名片信息 # 提示输入内容 name = raw_input("请输入姓名: ") phone = raw_input("请输入电话: ") QQ = raw_input("请输入QQ: ") email = raw_input("请输入邮箱: ") # 存储名片 card_dict = {"name": name,"phone": phone, "QQ":QQ ,"email":email} cards_list.append(card_dict) print "%s 已添加成功 !" %name def show_all(): print "显示名片" # 如果名片列表为空,提示 if len(cards_list) == 0: print ("名片为空,请先添加内容") return for menu_str in ("姓名","电话","QQ","email"): print(menu_str+"\t\t"), print("") print("-"*50) for card in cards_list: print("%s\t\t%s\t\t%s\t\t%s" %(card["name"],card["phone"],card["QQ"],card["email"])) def search_card(): print "查询名片" print "请输入查询的姓名" name = raw_input("") for card in cards_list: if name == card["name"]: print "已找到" print("%s\t\t%s\t\t%s\t\t%s" %("name","phone","QQ","email")) print("%s\t\t%s\t\t%s\t\t%s" %(card["name"],card["phone"],card["QQ"],card["email"])) print("请输入需要对名片的操作:【1】 修改,【2】 删除") deal_num= raw_input() deal_card(card,deal_num) break else: print "名片不存在" def deal_card(card, num_str): # 修改 if num_str == "1": print "修改名片" card["name"] = change_card(card["name"],"请输入姓名:【按回车不改变】 ") card["phone"] = change_card(card["phone"],"phone:【按回车不改变】 ") card["QQ"] = change_card(card["QQ"],"QQ:【按回车不改变】 ") card["email"] = change_card(card["email"],"email:【按回车不改变】 ") print "已修改!" # 删除 elif num_str == "2": print "删除名片" cards_list.remove(card) print "已删除!" def change_card(card_val, info): res = raw_input(info) if len(res) >0: return res else: return card_val
收获:
1、 解决python 2.XX 中文编码问题
在开头加入
#-*-coding:utf-8-*-
即可
2、让 python2 输出不换行方法:
print("Hello world"), # 只需要在后面加一个 逗号 即可使输出不换行
python 3.x版本输出不换行格式如下
print(x, end="") # end="" 可使输出不换行。
3、 pass 关键字的使用
# 如果在开发程序时,不希望立刻编写分支内部的代码
# 可以使用 pass 关键字,表示一个占位符,能保证程序的代码结构正确!
# 程序运行时,pass ,如
if 条件: pass else: pass
4、 参数传递问题
Python 中函数传值还是传引用???
python不允许程序员决定采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。
比如在我写的名片管理程序中: 对名片的修改,传的是 字典类型 故可以直接修改,相当于传引用
5、输入函数的区别,python2 和 python3 的区别
python2 中 input() 函数,返回类型是根据输入的类型决定的,比如你输入一个数字 1 ,那么接收的变量类型会自动定义为 int ,输入的数一个字符串,那么类型为 string
而且python2 中 input() 函数不能连续输入,因为它会把回车当成下一个字符,导致运行错误。。。建议直接使用 raw_input() 函数,后面自己转换类型
python3 中 input() 函数,返回值统一为 string 功能和 python2 中的 raw_input() 类似