exercise

"""
1.原功能:entry_grade
可以完成『成绩录入功能』
可以重复录入成绩,默认所有输入都是合法的(1~100之间的数)
当录入成绩为0时,结束成绩的录入
将录入的成绩保存在列表中并返回给外界,eg:[90, 80, 50, 70]
"""
def entry_grade():
    grade_list = []
    while True:
        grade = int(input("grade(input 0 to exit): \n"))
        if grade == 0:
            break
        grade_list.append(grade)
    return grade_list
"""
2.选择课程装饰器:choose_course
为『成绩录入功能』新增选择课程的拓展功能,达到可以录入不同学科的成绩
可以重复输入要录制的学科名,然后就可以进入该门学科的『成绩录入功能』,录入结束后,可以进入下一门学科成绩录入
当输入学科名为q时,结束所有录入工作
将学科成绩保存在字典中并返回给外界,eg:{'math':[90, 80, 50, 70], 'english':[70, 50,55, 90]}
"""
def choose_course(fun):
    def inner():
        dict_course={}
        while True:
            course=input("course(input q to exit): \n")
            if course=="q":
                return dict_course
            res=fun()
            dict_course[course]=res
        return dict_curse

    return inner
"""
3.处理成绩装饰器:deal_fail
可以将所有录入的成绩按60分为分水岭,转换为 "通过" | "不通过" 进行存储
如果只对原功能装饰,结果还为list返回给外界,eg:["通过", "通过", "不通过", "通过"]
如果对已被选择课程装饰器装饰了的原功能再装饰,结果就为dict返回给外界,eg:{'math':["通过", "通过", "不通过", "通过"],  'english':["通过", "不通过", "不通过", "通过"]}
"""
def deal_fail(fun):
    def inner():
        pass_score=60
        res=fun()
        if isinstance(res,dict):
            for element in res.values():
                for i,v in element(element):
                    if v>pass_score:
                        element[i]="通过"
                    else:
                        element[i]="不通过"
        
        if isinstance(res,list):
            for i in range(len(res)):
                if res[i]>pass_score:
                    res[i]="通过"
                else:
                    res[i]="不通过"
        return res

    return inner
    
    
def choose_course(fun):
    def inner():
        dict_course={}
        while True:
            course=input("course(input q to exit): \n")
            if course=="q":
                return dict_course
            res=fun()
            dict_course[course]=res
        return dict_curse

    return inner
@deal_fail
@choose_course    
def entry_grade():
    grade_list = []
    while True:
        grade = int(input("grade(input 0 to exit): \n"))
        if grade == 0:
            break
        grade_list.append(grade)
    return grade_list
print(entry_grade())
""""
4.定义一个列表的操作类:Listinfo
  包括的方法:
  1 列表元素添加: add_key(keyname) [keyname:字符串或者整数类型]
  2 列表元素取值:get_key(num) [num:整数类型]
  3 列表合并:update_list(list)  [list:列表类型]
  4 删除并且返回最后一个元素:del_key()
  """"
class ListInfo:
    lis=[]
    def __init__(self,lis):
        self.lis=lis

    def add_key(self,keyname):
        return self.lis.append(keyname)

    def get_key(self,num):
        if 0<=num<=len(self.lis):
            return self.lis[num]
        else:
            print("输入索引有误!")


    def update_list(self,lis1):
        return self.lis.extend(lis1)

    def del_key(self):
        return self.lis.pop()
if __name__ == '__main__':

    s=ListInfo([1,23,4,5,6,71,3])
    s.add_key(12)
    print(s.lis)
    print(s.get_key(2))
    s.update_list([1, 2, 3])
    print(s.lis)
    print(s.del_key())
"""
5.创建Person类,属性有姓名、年龄、性别,创建方法personInfo,打印这个人的信息
  创建Student类,继承Person类,属性有学院college,班级class,重写父类personInfo方法,调用父类方法打印个人信息外,
将学生的学院、班级信息也打印出来,创建方法study参数为Teacher对象,调用Teacher类的teachObj方法,
接收老师教授的知识点,然后打印‘老师xxx,我终于学会了!’xxx为老师的teach方法返回的信息。重写__str__方法,返回student的信息。
  创建Teacher类,继承Person类,属性有学院college,专业professional,重写父类personInfo方法,调用父类方法打印个人信息外,
    将老师的学院、专业信息也打印出来。
  创建teachObj方法,返回信息为‘今天讲了如何用面向对象设计程序’
  创建三个学生对象,分别打印其详细信息
  创建一个老师对象,打印其详细信息
  将三个学员添加至列表中,通过循环将列表中的对象打印出来,print(Student对象)。
  """
class Person:
    name=""
    age=0
    sex=""
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

    def personInfo(self):
        print("name:%s,age:%d,sex:%s"%(self.name,self.age,self.sex))


class Student(Person):
    college=""
    class1=0
    def __init__(self,name,age,sex,college,class1):
        super().__init__(name,age,sex)
        self.college=college
        self.class1=class1
    def personInfo(self):
        super().personInfo()
        print("college:%s,class1:%s" % (self.college,self.class1))

    def study(self,teacher):
        teacher.teachObj()
        print("老师xxx,我终于学会了!")

    def __str__(self):
        return "name:%s,age:%d,sex:%s,college:%s,class1:%s" % \
               (self.name, self.age, self.sex,self.college,self.class1)

class Teacher(Person):
    college=""
    professional=""
    def __init__(self,name,age,sex,college,professional):
        super().__init__(name,age,sex)
        self.college=college
        self.professional=professional

    def personInfo(self):
        super().personInfo()
        print("college:%s,professional:%s" % (self.college,self.professional))


    def teachObj(self):
        print('今天讲了如何用面向对象设计程序')


if __name__ == '__main__':

    teacher=Teacher("李老师",45,"male","社会大学","计算机")
    stu1=Student("小明",22,"male","社会大学",1002)
    stu2=Student("小红",21,"female","社会大学",1003)
    stu3=Student("小李",22,"male","社会大学",1000)
    stu4=Student("小花",22,"female","社会大学",1003)
    stu1.personInfo()
    teacher.personInfo()
    for elem in [stu1,stu2,stu3]:
        print(elem)
        
"""
6.深拷贝和浅拷贝之间的区别是什么?
浅拷贝:创建一个新的组合对象,这个新对象与原对象共享内存中的子对象。 
深拷贝:创建一个新的组合对象,同时递归地拷贝所有子对象,新的组合对象与原对象没有任何关联。
虽然实际上会共享不可变的子对象,但不影响它们的相互独立性
"""
"""
7.解释一下Python中的继承
继承是类与类之间的关系。新类不必从头编写,可以直接从现有类继承,就自动拥有了现有类的所有功能,只需要编写需要的新功能即可。
单继承Vs多继承
"""
"""
8.什么是负索引?
Python中的序列索引可以是正也可以是负。

如果是正索引,0是序列中的第一个索引,1是第二个索引,依次类推。

如果是负索引,-1是最后一个索引,-2是倒数第二个索引,依次类推。
"""
"""
9. Python 中的 pass 语句有什么作用?
pass语句什么也不做,一般作为占位符或者创建占位程序
"""
"""
10. 请简述self在类中的意义。类是由哪三个部分组成的?请简书构造方法和析构方法的作用。
不用实例化对象就能够在本类中访问自身的属性或方法。
类名,属性,方法
构造方法:用于初始化类的内容部状态,Python提供的构造函数式 __init__(),也就是当该类被实例化的时候就会执行该函数,
__init__()方法是可选的,如果不提供,Python 会给出默认的__init__方法。
析构方法:“__del__”就是一个析构函数了,当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调用完毕,
在跳出其作用域的同时析构函数也会被调用一次,这样可以用来释放内存空间。  
__del__()也是可选的,如果不提供,则Python 会在后台提供默认析构函数。
如果要显式的调用析构函数,可以使用del关键字: del obj
"""
"""
11. 输入三个整数x,y,z,请把这三个数由小到大输出。
list1=[]
for i in range(0,3):
    inp=int(input("please input a number:\n"))
    list1.append(inp)
list1.sort(reverse=True)
for i in list1:
    print(i,end=" ")

"""
"""
12. 四个数字,分别是:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
count=0
for i in range(1,5):
    for j in range(1,5):
        for k in range(1,5):
            if i!=j and j!=k and i!=k:
                print(i*100+j*10+k)
                count+=1
print(count)
"""
"""
13.用最简洁的方式生成这样一个列表【4,16,32,64,128】
[2**i for i in [2,4,5,7,9]]
"""
"""
14. 编写程序输入一个字符串,返回倒叙的结果,如:’abcdef’,返回’fedcba’
inp=input("please input:\n")
list1=list(inp)
str=""
list1=list1[::-1]
for i in list1:
    str+="".join(i)
print(str)
"""
"""
15.题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低
于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万
元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的
部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总
数?
inp=float(input("please input a number:\n"))
if inp>1000000:
    print("总奖金为%.2f"%((inp-1000000)*0.01+inp))
elif 600000<inp<=1000000:
    print("总奖金为%.2f"%((inp-600000)*0.015+inp))
elif 400000<inp<=600000:
    print("总奖金为%.2f"%((inp-400000)*0.03+inp))
elif 200000<inp<=400000:
    print("总奖金为%.2f"%((inp-200000)*0.05+inp))
elif 100000<inp<=200000:
    print("总奖金为%.2f"%((inp-100000)*0.075+100000*0.1+inp))
else:
    print("总奖金为%.2f"%((inp)*0.1+inp))


"""
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值