20190515类的封装练习
1、随机整数生成类
可以先设定一批生成数字的个数,可设定指定生成的数值的范围。运行时还可以调整每批生成数字的个数
第一种思路
#第一种封装思路,比较笨重
import random
class PartNum:
def __init__(self,minnum=0,maxnum=1,count=10):
self._maxnum = maxnum
self._minnum = minnum
self._count = count
def setminnum(self,minnum):
self._mininum = minnum
def setcount(self,count):
self._count = count
def getcount(self):
return self._count
#注册minnum属性get,set方法
minnum = property(lambda self:self._minnum,setminnum)
#注册count属性get,set方法
count = property(getcount,setcount)
@property
def maxnum(self):
return self._maxnum
@maxnum.setter
def maxnum(self,maxnum):
self._maxnum = maxnum
def partrandom(self):
"""产生随机数方法"""
mmax = self._maxnum
mmin = self._minnum
return (random.randint(mmin,mmax) for _ in range(self._count))
# return (random.randint(self._minnum,self._maxnum) for _ in range(self._count))
if __name__ == "__main__":
parnum = PartNum()
rom1 = parnum.partrandom()
parnum.count = 20
parnum.maxnum = 30
rom2 = parnum.partrandom()
print([_ for _ in rom1])
print([_ for _ in rom2])
第二种封装思路
- 生成器实现
#第二种封装思路,生成器实现
import random
class RandomGen:
def __init__(self,start=1,stop=100,count=10):
self.start = start
self.stop = stop
self.count = count
self._gen = self._generate()
def _generate(self):
while True:
yield random.randint(self.start,self.stop)
def generate(self,count=0):
count = count if count else self.count
return [next(self._gen) for i in range(count)]
print(RandomGen().generate())
第三种思路
- 每一次生成一批数据
# 第三种封装思路,每次生成一批数据
import random
class RandomGen:
def __init__(self,start=1,stop=100,count=10):
self.start = start
self.stop = stop
self._count = count
self._gen = self._generate()
def _generate(self):
while True:
yield [random.randint(self.start,self.stop) for _ in range(self._count)]
def generate(self,count=0):
return next(self._gen)
@property
def count(self):
return self._count
@count.setter
def count(self,count):
self._count = count
rand = RandomGen()
print(rand.generate())
rand.count = 5
print(rand.generate())
rand.stop = 10
rand.count = 20
print(rand.generate())
2、打印坐标
使用上题中的类,随机生成20个数字,两两配对形成二维坐标系的坐标,把这些坐标组织起来,并打印输出
import random
#定义一个生成器类
class RandomGen:
def __init__(self,start=1,stop=100,count=10):
self.start = start
self.stop = stop
self._count = count
self._gen = self._generate()
def _generate(self):
while True:
yield [random.randint(self.start,self.stop) for _ in range(self._count)]
def generate(self,count=0):
return next(self._gen)
@property
def count(self):