python秃头之路 类的练习(二)

1

创建一个名为User的类,其中包含属性first_name和last_name,还有用户简介通常会存储的其他几个属性。在类User中定义一个名为describe_user()的方法,它打印用户信息摘要;再定义一个名为greet_user()的方法,它向用户发出个性化的问候。

class User(object):
    """ User类 """
    
    def __init__ (self,first_name,last_name,gender,age):
        """ 初始化User类 """
        self.first_name=first_name
        self.last_name=last_name
        self.gender=gender
        self.age=age
    
    def describe_user (self):
        """ 打印用户信息摘要 """
        print('name:%s·%s\ngender:%s\nage:%d'%(self.first_name,\
        self.last_name,self.gender,self.age))
        
    def greet_user (self):
        """ 问候方法 """
        print('Holle %s'%self.first_name)

        
michael=User('Michael','Jacken','male',61)
michael.describe_user()

2

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

class Num(object):
    
    """ 数字生成类 """
    
    def num_create(self):
        """随机数生成"""
        import random
        for i in range(self.num):
            self.num_list.append(random.uniform(self.num_min,self.num_max))
    
    def __init__ (self,num,num_min,num_max):
        """ 初始化数字生成类 """
        self.num=num
        self.num_min=num_min
        self.num_max=num_max
        self.num_list=[]

aa=Num(3,1,2)
aa.num_create()
print(aa.num_list)

3

有如下值集合[11,22,33,44,55,66,77,88,99,90],将所有大于66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中。即:{‘k1’:大于66的所有值,‘k2’:小于66的所有值}

class Jihe(object):
    """ 集合计算类 """
    zidian={}
    list1=set()
    list2=set()
    def jisuan (self):
        """ 计算方法 """
        for i in self.list:
            if i > 66:
                Jihe.list1.add(i)
            elif i < 66:
                Jihe.list2.add(i)
            Jihe.zidian['小于66的所有值']=Jihe.list2
            Jihe.zidian['大于66的所有值']=Jihe.list1
    
    def __init__ (self,*args):
        """ 初始化类 """
        self.list=args
        Jihe.jisuan(self)
        
        
a=Jihe(11,22,33,44,55,66,77,88,99,90)
print(a.zidian)

4

使用while,再完成以下图形的输出
*








*  
class Picture(object):
    """ 图形输出类 """
    
    def __new__ (self,i):
        """ 图形输出类初始化 """
        obj=object.__new__(self)
        
        while i < 9:
            if i <5:
                print((2*i*'*'+'*').center(9))
            if i>=5:
                print((2*(8-i)*'*'+'*').center(9))
            i+=1
        self.i=i
        return obj
    def aa (self):
        print(self.i)
        """ Function doc """
        
a=Picture(0)
a.aa()

5

地铁交通价格调整为:6公里(含)内3元;6公里至12公里(含)4元;12公里至22公里(含)5元;22公里至32公里(含)6元;32公里以上部分,每增加1元可乘坐20公里。使用市政交通一卡通刷卡乘坐轨道交通,每自然月内每张卡支出累计满100元以后的乘次,价格给予8折优惠;满150元以后的乘次,价格给予5折优惠;支出累计达到400元以后的乘次,不再享受打折优惠。
#要求:
#假设每个月,小明都需要上20天班,每次上班需要来回1次,即每天需要乘坐2次同样路线的地铁;每月月初小明第一次刷公交卡时,扣款5元;编写程序,从键盘获取距离,帮小明计算,如果不使用市政交通一卡通的每月总费用,和使用市政交通一卡通的每月总费用

class Fare(object):
    """ 地铁消费类 """
    
    def __init__ (self,dist,whether=0):
        """ 上班距离:dist
        是否用一卡通:1为使用,0为不使用,默认0 """
        self.dist=dist
        self.whether=whether
    
    def fare_one(self):
        '''6公里(含)内3元;6公里至12公里(含)4元;12公里至22公里(含)5元;22公里至32公里(含)6元;32公里以上部分,每增加1元可乘坐20公里'''
        if self.dist > 32:
            return (self.dist-12)//20+6
            #(s-32)//20+6+1
        elif self.dist > 22:
            return 6
        elif self.dist > 12:
            return 5
        elif self.dist > 6:
            return 4
        else:
            return 3
    
    def fare (self):
        """ 乘车总费用计算 """
        if self.whether == 0:
            return 40*Fare.fare_one(self)
        else:
            '''支出累计满100元以后的乘次,价格给予8折优惠;满150元以后的乘次,价格给予5折优惠;支出累计达到400元以后的乘次,不再享受打折优惠'''
            fare=5
            for i in range(40):
                if fare<100:
                    fare+=Fare.fare_one(self)
                elif fare<150:
                    fare+=0.8*Fare.fare_one(self)
                elif fare<400:
                    fare+=0.5*Fare.fare_one(self)
                else:
                    fare+=Fare.fare_one(self)
            return fare      
                    

xiaoming=Fare(20,1)
print(xiaoming.fare())
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值