python 类的练习题三

 python 类的练习题三

  1、随机整数生成类。【六种解决方案】

  要求: 可以指定一批生成的个数,可以指定数值的范围,可以调整每批生成数字的个数。

代码1:

#schemes optimization one
import random
class Randomint:  #对象
    def __init__(self,count=10,start=1,stop=100):
        self.count = count
        self.start = start
        self.stop = stop

    def genint(self):
        return [random.randint(self.start,self.stop) for _ in range(self.count)]

list_a = Randomint(5,20,100)  #可以传参控制输出个数和范围。
list_a.genint() 

执行结果:

[78, 73, 62, 50, 22]

代码2:

#schemes optimization two
import random
class RandomInt2:  #工具类
    @classmethod
    def genint(cls,count=10,start=1,stop=100):
        return [random.randint(start, stop) for _ in range(count)]

RandomInt2.genint() #可以传参控制输出个数和范围。

执行结果:

[60, 35, 17, 3, 40, 24, 75, 68, 7, 90]

代码3:

#schemes optimization three
import random
class Randomint3:  #对象
    def __init__(self,count=10,start=1,stop=100):
        self._count = count
        self.start = start
        self.stop = stop

    def genint(self,count=0):
        count = self._count if count<=0 else count  #如果小于0用类属性默认值,如果大于0用传参的count
        return [random.randint(self.start,self.stop) for _ in range(count)]

ri = Randomint3(start=55,stop=100)  #可以传参控制输出个数和范围。
ri.genint(5)                        #可以传参控制输出个数。

执行结果:

[85, 82, 64, 61, 56]

代码4:

#schemes optimization four
import random
class Randomint4:  #对象
    def __init__(self,count=10,start=1,stop=100):
        self._count = count
        self.start = start
        self.stop = stop

    def _generate(self):
        #生成器,无限生成,要多少不在这里处理。
        while True:
            yield random.randint(self.start,self.stop)

    def generate(self):
        #这里控制取值次数。
        return [next(self._generate()) for _ in range(self._count)]

ri = Randomint4(5,15,55)  #可以传参控制输出个数和范围。
print(ri.generate()) 

执行结果:

[53, 33, 49, 49, 16]

代码5:

#schemes optimization five
import random
class Randomint5:  #对象

    def __init__(self,count=10,start=1,stop=100):
        self._count = count
        self.start = start
        self.stop = stop
        self._gen = self._generate() #加到类方法里,【生成器对象】。

    def _generate(self):
        #生成器,无限生成,要多少不在这里处理。
        while True:
            yield random.randint(self.start,self.stop)

    def generate(self): 
        #用next调生成器对象
        return [next(self._generate()) for _ in range(self._count)]

ri = Randomint5(15,5,50)  #可以传参控制输出个数和范围。
print(ri.generate()) 

执行结果:

[5, 34, 29, 48, 42, 48, 38, 42, 45, 23, 31, 25, 46, 44, 21]

代码6:

#schemes optimization six
import random
class Randomint6:  #对象

    def __init__(self,count=10,start=1,stop=100):
        self._count = count
        self.start = start
        self.stop = stop
        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):
        if count > 0:
            self._count = count
        return next(self._gen)

ri = Randomint6(start=100,stop=900)#可以传参控制输出个数和范围。
print(ri.generate(5))              #可以传参控制输出个数.
执行结果:
[575, 828, 531, 378, 713]
2、打印坐标:
要求:使用上题中的类,随机生成20个数字,两两配对形成二维坐标系的坐标,把这些坐标组织起来,并打印输出。

代码:

import random
class Randomint7:
    def __init__(self,count=10,start=1,stop=100):
        self._count = count
        self.start = start
        self.stop = stop
        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):  #这里做控制判断
        if count >0:
            self._count = count
#         return next(self._gen)
        ret = next(self._gen)
        return ret

ri = Randomint7()


class Point:
    def __init__(self,x,y):
        self.x = x
        self.y = y

    def __repr__(self):
        return '<Point {} : {}>'.format(self.x,self.y)
#===================================================================#
# points = [Point(k,v) for k,v in zip(ri.generate(),ri.generate())] #两种表现形式。
points = [Point(*v) for v in zip(ri.generate(),ri.generate())]
#===================================================================#
#下面是三种显示方式:

# print('第一种方法',points,len(points))
#=========================
# for x in points:
#     print('第二种方法',x)
#=========================
for point in points:
        print('第三种方法:<Point {} : {}>'.format(point.x,point.y))

执行结果:

第三种方法:<Point 8 : 64>
第三种方法:<Point 70 : 90>
第三种方法:<Point 59 : 22>
第三种方法:<Point 70 : 34>
第三种方法:<Point 48 : 29>
第三种方法:<Point 75 : 86>
第三种方法:<Point 39 : 53>
第三种方法:<Point 42 : 91>
第三种方法:<Point 99 : 79>
第三种方法:<Point 14 : 70>
3、 车辆信息。

要求:记录力的品牌mark,颜色color、价格price、速度speed等特征,并实现增加车辆信息、显示全部车辆信息的功能。

代码:

class Car:    #你管理车辆的抽象。
    id = 0    #原始编号赋值。


    @classmethod
    def genid(cls):   #记录录入洗车编号。
        cls.id =cls.id + 1


    def __init__(self, mark, speed, color, price=-1, **kargs):
        self.id = self.genid()
        self.mark = mark
        self.speed = speed
        self.color = color
        self.price = price
        self.__dict__.update(kargs)
        self.properties = kargs


    def __repr__(self):


        return ('<Car:[{}:{}:{}:{}:{}]>'.format(self.mark,self.speed,self.color,self.price,self.properties))




class CarInfo:  # 车辆信息管理
    cars = []


    def addcar(self, *cars):  # 增加车辆信息
        return self.cars.extend(cars)


    def getall(self):  # 显示车辆全部信息
        return self.cars




print(Car.id)
car1 = Car('red flag', 100, 'red', price=15000, made='china')
print(Car.id)
car2 = Car('audi', 230, 'black', price=260000, made='germany')
print(Car.id)


ci = CarInfo()
# ci.addcar(car1)
# ci.addcar(car2)
ci.addcar(car1, car2)
print(ci.getall())  # 查看全部车辆信息
print('=============================================================================================')

执行结果:

0
1
2
[<Car:[red flag:100:red:15000:{'made': 'china'}]>, <Car:[audi:230:black:260000:{'made': 'germany'}]>]
=====================================================================================================

4、 实现温度的处理。
要求:实现华氏温度和摄氏温度的转换。
           完成以上转换后,增加与开氏温度的转换,K=℃+273.15
# ℃=5x(℉-32)/9
# ℉=9x℃/5+32
# K=℃+273.15

代码:


执行结果:





  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值