小结
python深浅拷贝
# 拷贝(赋值)
# l1 = [1,2,3]
# l2 = l1
# l1.append(4)
# print(l1)
# print(l2)
# 因为列表是可变类型,所以l1的值发生变化,l2的值也会跟着变化(这就是拷贝)
# 浅拷贝
# import copy #
# l1 = [1,2,3,4,[5,6,7]]
# l2 = copy.copy(a) #(浅拷贝)
# l1.append(8)
# print(l1) #
# print(l2) #
# l1[4].append(8)
# print(l1)
# print(l2)
# 当b为a的浅拷贝对象时,a内可变类型变化,b变化,a内不可变型变化,b不变化
# 深拷贝
# import copy
# l1 = [1,2,3,[4,5,6]]
# l2 = copy.deepcopy(l1)
#l1.append(7)
#print(l1)
#print(l2)
# s[3].append(7)
# print(l1)
# print(l2)
# 注:当l2为l1的深拷贝对象时,l1内的可变类型变化,l2不变化;l1的不可变型变化;l2不变化
# 总结
# 牢记:拷贝、浅拷贝、深拷贝 只针对可变数据类型
# 拷贝: 当lt2为lt的拷贝对象时,lt内的可变类型变化,lt2变化;lt内的不可变类型变化,lt2变化
# 简单的赋值
# 浅拷贝:当lt2为lt的浅拷贝对象时,lt内的可变类型变化,lt2变化;lt内的不可变类型变化,lt2不变化
# copy.copy() 可变数据的类型中的内置方法.copy()
# 深拷贝: 当lt2为lt的深拷贝对象时,lt内的可变类型变化,lt2不变化;lt内的不可变类型变化,lt2不变
# copy.deepcopy()
### 作用:毫无用处,面试经常问
基本文件处理
什么是文件:操作系统提供给客户的虚拟单位
文件的作用:存储数据
打开文件的流程
- 找到文件路径 # 用鼠标右键点击文件,copy path
path = r'r'E:老男孩学习笔记7.29学习内容 1 执行Python程序的两种方式'
- 双击打开
f = open(path,'w') # r-->read 只读; w-->只写,清空当前文件后写入,自动创建文件
print(f)
- 看文件
data = f.read()
print(data)
- 写文件
f.write('nick handsome')
- 关闭文件
注:用 del f ,只删除了文件的引用以及文件在python内存中的占用,但是没有删除对操作系统的占用
用 f.close() 关闭操作系统对文件的占用
绝对路径和相对路径
绝对路径:从跟目录(C/D/E盘)开始,这个叫绝对路径
path = r'r'E:老男孩学习笔记7.29学习内容 1 执行Python程序的两种方式'
f = open(path,'w')
f.write('nick handsome')
f.close() #关闭文件
相对路径:(当前文件夹下,可以直接写文件名)
path = r'test.py' #鼠标右键点击文件,copy path
f = open(path,'r')
print(f.read)
f.close() # 关闭文件
异常处理
异常:就是报错
异常分为语法异常和逻辑异常
语法异常:语法异常的错误都是(SyntaxError)
查找异常有:
try:
if
except Exception as e: # 语法异常无法捕捉
print(e)
逻辑异常:错误往往不一样
print(1)
# try: # 尝试
# print(3) # 代码自上而下,上面会运行
# 1 / 0 # 错误不影响其他的代码,报错马上终止try缩进里面的代码
# print(4)
# except: # 除此之外
# pass
# 1/0
# print(2)
print(1)
# try: # 尝试
# num = input('输入一个值') # 123124
# dic = {'0': 'a'}
# print(dic[num]) # dic['123124']
#
# print(3) # 代码自上而下,上面会运行
# 1 / int(num) # 错误不影响其他的代码,报错马上终止try缩进里面的代码
# print(4)
except ZeroDivisionError as e: # 除此之外 # try里面的代码出了什么错误,就得用什么错误捕捉 # as是把错误赋值给e# print('e:', e)# except KeyError as e: # 可以写多个except捕捉多个异常# print('e:', e)
最重要,以后想捕捉异常就用这个,只要记住这个就够了,如下
print(1)
# try: # 尝试
# num = input('输入一个值') # 123124
# dic = {'0': 'a'}
# print(dic[num]) # dic['123124']
#
# print(3) # 代码自上而下,上面会运行
# 1 / int(num) # 错误不影响其他的代码,报错马上终止try缩进里面的代码
# print(4)
#
# except Exception as e: # Exception可以捕捉任意异常
# print('e:', e)
#
# # 1/0
# print(2)
数据类型分类
按存值个数
存一个值:整型、浮点型、字符串
存多个值:列表、字典、集合、元组
按有序or无序:
有序:字符串、列表、元组
无序:字典、集合
按可变or不可变:
可变:列表、集合、字典
不可变:整型、浮点型、元组、字符串
TODO 的用法
if true:
TODO :
pass
在python解释器下方会显示TODO,点击直接跳至该处
猜年龄游戏
# 0. 奖励物品存放在文件price.txt
#
# 1. 给定年龄(随机18-60),用户可以猜三次年龄
#
# 2. 年龄猜对,让用户选择两次奖励
#
# 3. 用户选择两次奖励后可以退出
# '''
#
# import random
#
# age = random.randint(18, 60) # 随机一个数字,18-60岁
# count = 0 # 计数
#
# f = open('price.txt', 'r', encoding='utf8') # price.txt右下角为什么编码,则encoding为什么编码
# price_dict = f.read()
# price_dict = eval(price_dict) # type:dict # 获取奖品字典
# f.close()
#
# price_self = dict()
#
# while count < 3:
# count += 1
#
# inp_age = input('请输入你想要猜的年龄:')
#
# # 判断是否为纯数字
# if not inp_age.isdigit():
# print('搞事就骂你傻逼')
# continue
#
# inp_age = int(inp_age)
#
# # 筛选年龄范围
# if inp_age > 60 or inp_age < 18:
# print('好好题目,18-60岁,非诚勿扰')
# continue
#
# # 核心逻辑
# if age == inp_age:
# print('猜中了,请选择你的奖品')
#
# # 打印商品
# for k, v in price_dict.items():
# print(f'奖品编号:{k} {v}')
#
# # 获取奖品的两次循环
# for i in range(2):
# price_choice = input('请输入你需要的奖品编号:')
#
# if not price_choice.isdigit():
# print("恭喜你已经获得一次奖品,奖品为空!并且请输入正确的奖品编号!")
# continue
#
# price_choice = int(price_choice)
#
# if price_choice not in price_dict:
# print('你想多了吧!')
# else:
# price_get = price_dict[price_choice]
# print(f'恭喜中奖:{price_get}')
#
# if price_self.get(price_get):
# price_self[price_get] += 1
# else:
# price_self[price_get] = 1
#
# print(f'恭喜你获得以下奖品:{price_self}')
# break
#
# elif age > inp_age:
# print('猜小了')
# elif age < inp_age:
# print('猜大了')
#
# continue
'''
0. 奖励物品存放在文件price.txt
1. 给定年龄(随机18-60),用户可以猜三次年龄
2. 年龄猜对,让用户选择两次奖励
3. 用户选择两次奖励后可以退出
'''
import random
age = random.randint(18, 60) # 随机一个数字,18-60岁
count = 0 # 计数
f = open('price.txt', 'r', encoding='utf8') # price.txt右下角为什么编码,则encoding为什么编码
price_dict = f.read()
price_dict = eval(price_dict) # type:dict # 获取奖品字典
f.close()
price_self = dict()
while count < 3:
count += 1
inp_age = input('请输入你想要猜的年龄:')
# 判断是否为纯数字
if not inp_age.isdigit():
print('搞事就骂你傻逼')
continue
inp_age = int(inp_age)
# 筛选年龄范围
if inp_age > 60 or inp_age < 18:
print('好好题目,18-60岁,非诚勿扰')
continue
# 核心逻辑
if age == inp_age:
print('猜中了,请选择你的奖品')
# 打印商品
for k, v in price_dict.items():
print(f'奖品编号:{k} {v}')
# 获取奖品的两次循环
for i in range(2):
price_y = input(f'请按"Y or y"转动转盘{chr(9803)}:').lower()
if price_y != 'y':
print("恭喜你已经获得一次奖品,奖品为空!并且请输入'Y or y'!")
continue
#
price_choice = random.randint(0, 10000)
if price_choice > 0 and price_choice < 9900:
price_choice = 6
print('恭喜你, 下次一定有好东西!!', end=' ')
else:
price_choice = price_choice % 7
if price_choice not in price_dict:
print('你想多了吧!')
else:
price_get = price_dict[price_choice]
print(f'恭喜中奖:{price_get}')
if price_self.get(price_get):
price_self[price_get] += 1
else:
price_self[price_get] = 1
print(f'恭喜你获得以下奖品:{price_self}')
break
elif age > inp_age:
print('猜小了')
elif age < inp_age:
print('猜大了')
continue