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_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() 类似 

 

posted @ 2018-12-24 20:11  SPZ_yqy  阅读(253)  评论(0编辑  收藏  举报