"""
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))
"""