Python-练习题,is和==的区别,深(浅)拷贝
作者:互联网
练习题(轮盘游戏)
模拟轮盘抽奖游戏
轮盘分为三部分: 一等奖, 二等奖和三等奖;
轮盘转的时候是随机的,
如果范围在[0,0.08)之间,代表一等奖,
如果范围在[0.08,0.3)之间,代表2等奖,
如果范围在[0.3, 1.0)之间,代表3等奖,
模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.
import random
#print(random.random())##打印出随机的小数
rewardDict = {
'一等奖':(0,0.08),
'二等奖':(0.08,0.3),
'三等奖':(0.3, 1)
}
##用户的得奖等级
def rewardFun():
num = random.random() # 生成0~1之间的随机数
for k,v in rewardDict.items(): # 判断随机转盘是几等奖
if v[0] <= num < v[1]:
return k ##返回值为奖品等级
# print(rewardFun())
resultDict = {} ##定义结果字典
for i in range(1000):
res = rewardFun() ##res为奖品等级
if res not in resultDict:
resultDict[res] = 1 ##若此奖品等级不在结果字典中,则给其value值1
else:
resultDict[res] += 1 ##若此奖品等级在结果字典中,则在value值基础上自增1
for k,v in resultDict.items():
print(k,'---->',v)
is和==的区别
is:为对象标示符(object identity),作用是用来检查对象的标示符是否一致,也就是两个对象在内存中的位置是否一样
==:表示的是相等,是用来检查两个对象是否相等。
id():在内存中存储的位置,只有id相同,is结果输出True
type():变量的类型
value:值
==:type value
is:type value id
>>> a = '1'
>>> b = 1
>>> a == b
False
>>> a = '1'
>>> b = a
>>> a is b
True
>>> li = [1,2,3]
>>> li1 = li
>>> li1
[1, 2, 3]
>>> id(li)
140244461998472
>>> id(li1)
140244461998472
>>> li2 = li.copy()
>>> li2
[1, 2, 3]
>>> id(li)
140244461998472
>>> id(li2)
140244462000136
>>> li == li1
True
>>> li1 == li2
True
>>> li == li2
True
>>> li2 is li
False
>>>
深拷贝和浅拷贝的区别
当一个变量a=x的时候 约定为:指向一个地址的过程
浅拷贝:copy.copy()
深拷贝:copy.deepcopy()
如果 copy.copy()拷贝的是元组 那么它不会进行浅拷贝 仅仅是指向
因为元组是不可变数据类型,意味着数据一定不能修改
因此它会自动判断为指向
导入拷贝模块
浅拷贝
copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变
深拷贝
深拷贝,包含对象里面的子对象的拷贝, 原始对象的改变不会造成深拷贝里任何子元素的改变
标签:练习题,Python,random,li,li2,拷贝,copy,id 来源: https://blog.csdn.net/weixin_44783160/article/details/100739444