Python之引用、可变和不可变类型、模块、名片管理实践、range

一. 高级特性

1. 引用 (理解)
  • 引用1(0x表示16进制)
    在这里插入图片描述
    在这里插入图片描述

  • 引用2
    在这里插入图片描述
    在这里插入图片描述

  • 引用代码

"""场景1"""
a = 10
b = a
print(a)
print(b)
"""
id(变量)  会返回该变量的引用地址
如果引用地址相等, 表示数据保存在同一个内存空间
"""
print(id(a))
print(id(b))

"""场景2"""
a = [10]
b = a
b.append(20)
print(b)  # [10, 20]
print(a)  # [10, 20]

"""场景3"""
a = [10]
b = a
b.append(20)
c = [10, 20]
print(id(a))
print(id(b))
print(id(c))  # a和b指向的地址相同,和c的指向的地址不同


"""场景4"""
a = [10]
b = a
b.append(20)
c = [10, 20]
b = c
c.append(30)
a = b
print(a)  # [10, 20, 30]
print(b)  # [10, 20, 30]
print(c)  # [10, 20, 30]

"""场景5"""
"""
python中对数字和字符串进行了缓存处理:
保存数字/字符串时, 先查看内存中是否有该数据,有则获取该数据的地址, 没有才会使用新空间保存数据
"""
a = 10
b = 10
print(id(a))
# 1947623936
print(id(b))
# 1947623936

c = 'hello'
d = 'hello'
print(id(c))
# 2459924349088
print(id(d))
# 2459924349088

2. 可变类型和不可变类型 (理解)

在这里插入图片描述

  • 图示1
    在这里插入图片描述
    在这里插入图片描述

  • 图示2
    在这里插入图片描述

  • 图示代码

"""
可变类型: 数据存储到内存后,可以在该空间直接改变值  (值变,空间不变)  列表 字典
不可变类型: 数据存储到内存后,不可以在该空间改变值   数字 元组 字符串
"""

str1 = 'hello'
print(id(str1))
# 字符串本身不能改变, 所谓"修改"其实是生成新的字符串
str2 = str1.replace('h', 'a')
print(id(str1))
print(id(str2))
print(str1)
print(str2)


list1 = [10]
print(id(list1))  # id不变, 空间不变
list1.append(20)
print(id(list1))  # id不变, 空间不变, 值改变


"""场景1"""
list1 = []
dict1 = {'name': 'zs'}
list1.append(dict1)
list1[0]['name'] = 'ww'
print(list1)  # [{'name': 'ww'}]
print(dict1)  # {'name': 'ww'}

"""场景2"""
dict1 = {'name': 'zs'}
tuple1 = (dict1, )
# tuple1[0] = {'name': 'ww'}  # 会报错
tuple1[0]['name'] = 'ww'  # 没有报错, 数据改变
print(tuple1)  # ({'name': 'ww'},)
print(dict1)  # {'name': 'ww'}

"""场景3"""
dict1 = {'name': 'zs'}
list1 = []
list1.append(dict1)
list1[0] = {'name': 'zs'}
list1[0]['name'] = 'ww'
print(list1)  # [{'name': 'ww'}]
print(dict1)  # {'name': 'zs'}
2. 模块的基本使用 (重点)
"""
模块:python工具包
任意.py文件都可以作为模块
模块也是标识符

使用模块:1.导入模块 import 模块名  2. 执行功能 模块名.功能
"""

# 导入模块
import ly_module

# 执行功能
print(ly_module.name)

ly_module.func1()
"""
模块中的变量 函数 类 可以被其他文件导入
文件名:ly_module
"""

name = 10 # 变量

def func1(): # 函数
    print("func1")

二. 名片管理系统

1. 主界面逻辑

在这里插入图片描述

2. 新建名片 (重点)

在这里插入图片描述

3. 显示全部 (重点)

在这里插入图片描述

4. 查询名片

在这里插入图片描述

5. 名片高级处理

在这里插入图片描述

6. 修改名片 (重点)

在这里插入图片描述

7. 删除名片

在这里插入图片描述

  • 封装高级处理函数
    在这里插入图片描述
1. 主文件代码: 负责程序的主要业务逻辑
"""
项目模块化:将程序的代码分离到多个文件中
优点:1.方便代码升级和重构  2.有利于团队开发

主文件: 负责程序的主要业务逻辑

"""
"""
1.显示界面
2.获取用户的输入
3.根据输入执行对应的功能
4.重复1-3步
"""


import cards_tool  # 导入模块
"""
无限重复1-3步
1.显示界面
2.获取用户的输入
3.根据用户输入,执行对应的功能
无限循环:  程序的实现要求  一般会有出口(可以退出程序)
死循环: 程序员编程中的bug 
"""
while True:
    # 1.TODO 显示界面
    cards_tool.show_menu()

    # 2.获取用户的输入
    cmd_num = input("请选择执行的操作:")
    print("您选择的功能:%s" % cmd_num)

    # 3.条件判断 根据用户输入,执行功能
    if cmd_num == "1":  # 新建名片
        cards_tool.add_card()
    elif cmd_num == "2":  # 显示全部
        cards_tool.show_all()
    elif cmd_num == "3":  # 查询名片
        cards_tool.search_card()
    elif cmd_num == "0":  # 退出系统
        print("欢迎再次使用[名片管理系统]")
        break
    else:  # 输入错误
        print("输入有误,请重新输入")
2. 工具文件: 负责实现具体的功能(变量、函数)

 """工具文件:  负责实现具体的功能(变量、函数)"""

card_list = []  # 名片列表  包含所有的名片(字典)


def show_menu():
    """显示界面"""
    print("*" * 30)
    print("欢迎使用[名片管理系统] V1.0")
    print()
    print("1.新建名片")
    print("2.显示全部")
    print("3.查询名片")
    print()
    print("0.退出系统")
    print("*" * 30)


def add_card():
    """新建名片"""
    print("功能: 新建名片")
    # 获取用户输入
    name_str = input("请输入姓名:")
    age_str = input("请输入年龄:")
    # 将信息封装到字典中 方便使用
    card_dict = {"name": name_str, "age": age_str}
    # 将字典添加到全局列表中保存 方便其他函数使用
    card_list.append(card_dict)
    print("添加名片成功")
    print(card_list)


def show_all():
    """显示全部"""
    print("功能: 显示全部")

    # 判断名片中列表是否有名片信息
    if len(card_list) == 0:
        print("提示:没有任何名片记录")
        return  # 一旦执行了return,函数中后续代码将不会执行

    # 显示表头
    show_table_head()
    # 取出全局列表中的每一个学生信息(字典)
    for card_dict in card_list: # card = {"name":"zs", "age":20}
        # 格式化操作
        print("%s\t\t%s" % (card_dict["name"], card_dict["age"]))
    print("-" * 30)


def search_card():
    """查询名片"""
    print("功能: 查询名片")

    # 获取用户输入
    search_name = input("请输入查询的姓名:")

    # 遍历全局列表,取出每个学生信息(字典),比对姓名
    for card_dict in card_list:
        # 判断姓名是否一致
        if search_name == card_dict["name"]:
            # 显示表头
            show_table_head()
            print("%s\t\t%s" % (card_dict["name"], card_dict["age"]))
            print("-" * 30)

            # 处理名片
            deal_card(card_dict)
            break
    else: # for 遍历完了还没找得到就执行else
        print("没有找到%s" % search_name)


def show_table_head():
    """显示表头"""
    print("姓名\t\t年龄") # \t 横向制表符  可以辅助对齐
    print("-" * 30)


def deal_card(card):
    """处理名片"""
    while True:
        # 获取用户输入
        cmd_num = input("请输入对名片的操作: 1.修改 / 2.删除 / 0.返回上一级")
        # 条件判断  执行不同的功能
        if cmd_num == "1":  # 修改名片

            update_card(card)
            break

        elif cmd_num == "2":  # 删除名片

            remove_card(card)
            break
        elif cmd_num == "0":
            break
        else:
            print("输入有误,请重新输入")


def update_card(card):
    """修改名片"""
    # 获取用户的输入
    card["name"] = input("请输入姓名:")
    card["age"] = input("请输入年龄:")
    print("修改名片成功")


def remove_card(card):
    """删除名片"""

    # 从名片列表中删除目标名片
    card_list.remove(card)
    print("删除名片成功")

二. 高级特性2

1. range
"""range()函数  主要用于 配合for循环进行计数  会返回一个可迭代对象"""

# range(n) 计数范围[0, n)
for i in range(5):
    print("媳妇,我错了")

i = 1
while i <= 5:
    print("媳妇,我错了")
    i += 1

# range(m, n)  计数范围[m, n)
for i in range(2, 6):
    print(i)

# range(m, n, 步长)  步长和切片功能相似
for i in range(1, 10, 2):
    print(i)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值