文章目录
一. 高级特性
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)