老师最喜欢的就是做一个名片管理系统,根据已学的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_main.py
功能实现文件: 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
cards_tools.py
收获:
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() 类似