继承
本章继续学习继承和多态,所涉及的主题包括超类、子类以及__init__函数在继承、方法覆盖和多态中的工作方式。
#1Employee类和ProductionWorker类
class Employee:
def __init__(self): pass
def set_name(self, name): self.__name = name
def set_num(self, num): self.__num = num
def get_name(self): return self.__name
def get_num(self): return self.__num
class ProductionWorker(Employee):
def __init__(self): pass
def set_code(self, code): self.__code = code
def set_hour(self, hour): self.__hour = hour
def get_code(self): return self.__code
def get_hour(self): return self.__hour
def main():
p=ProductionWorker()
p.set_name(input("Please enter the name:"))
p.set_num(input("Please enter the num:"))
flag1=True
flag2=True
while flag1 or flag2:
try:
if flag1:
x=int(input("Please enter shift:"))
flag1=False
p.set_code(x)
if flag2:
x=int(input("Please enter work hours:"))
flag2=False
p.set_hour(x)
except ValueError:
print("Please enter the real value")
print(p.get_name())
print(p.get_num())
print(p.get_code())
print(p.get_hour())
if __name__=="__main__":
main()
#2ShiftSupervisor类
class Employee:
def __init__(self):
self.__name = None
self.__num = None
def set_name(self, name): self.__name = name
def set_num(self, num): self.__num = num
def get_name(self): return self.__name
def get_num(self): return self.__num
class ShiftSupervisor(Employee):
def __init__(self):
self.__salary = None
self.__bonus = None
def set_salary(self, salary): self.__salary = salary
def set_bonus(self, bonus): self.__bonus = bonus
def get_salary(self): return self.__salary
def get_bonus(self): return self.__bonus
def main():
p = ShiftSupervisor()
p.set_name(input("Please enter the name:"))
p.set_num(input("Please enter the num:"))
flag1 = True
flag2 = True
while flag1 or flag2:
try:
if flag1:
x = int(input("Please enter salary:"))
flag1 = False
p.set_salary(x)
if flag2:
x = int(input("Please enter work bonus:"))
flag2 = False
p.set_bonus(x)
except ValueError:
print("Please enter the real value")
print(p.get_name())
print(p.get_num())
print(p.get_salary())
print(p.get_bonus())
if __name__=="__main__":
main()
#3Person类和Customer类
class Person:
def __init__(self,name,address,tel_phone):
self.__name=name
self.__address=address
self.__tel_phone=tel_phone
class Customer(Person):
def __init__(self,name,address,tel_phone,cus_num,in_list):
Person.__init__(self,name,address,tel_phone)
self.__cus_num=cus_num
self.__in_list=in_list
def main():
c=Customer('Tom','New York','123','#21',True)
if __name__=="__main__":
main()
递归
本章讨论递归及其在问题求解中的应用,给出了递归调用的可视化跟踪和递归应用,展示了许多任务的递归算法,例如查找因子、求最大公约数、对列表中的一系列值求和,并给出经典汉诺塔的例子。
经典汉诺塔:
def hanoi(num,src,dst,mid):
if num>0:
hanoi(num-1,src,mid,dst)
print(src+"→"+dst)
hanoi(num-1,mid,dst,src)
def main():
hanoi(9,"A","C","B")
if __name__=="__main__":
main()
#1递归打印
def f(num):
if num>0:
f(num-1)
print(num)
def main():
n=int(input("Please enter a number:"))
f(n)
if __name__=="__main__":
main()
#2递归乘法
def f(x,y):
if x>0:
return y+f(x-1,y)
else:return 0
def main():
x=int(input("Please enter a number for x:"))
y = int(input("Please enter a number for y:"))
print(f(x,y))
if __name__=="__main__":
main()
#3递归输出行
def f(n):
if n>0:
f(n-1)
for i in range(n):
print('*',end='')
print()
def main():
n=int(input("Please enter a number for x:"))
f(n)
if __name__=="__main__":
main()
#4最大列表项
def f(n):
if len(n)>1:
return n[0] if n[0]>f(n[1:]) else f(n[1:])
else:
return n[0]
def main():
n=[331,2,3,4,24,14,23244,241,51,4,5]
print(f(n))
if __name__=="__main__":
main()
#5递归求解列表元素之和
def f(n):
if len(n)>1:
return n[0]+f(n[1:])
else:
return n[0]
def main():
n=[331,2,3,4,24,14,23244,241,51,4,5]
print(f(n))
if __name__=="__main__":
main()
#6数字求和
def f(n):
if n>0:
return n+f(n-1)
else:
return 0
def main():
n=int(input("Please enter a number:"))
print(f(n))
if __name__=="__main__":
main()
#7递归求幂
def f(base,index):
if index>0:
return base*f(base,index-1)
else:
return 1
def main():
n=int(input("Please enter a number for base:"))
m=int(input("Please enter a number for index:"))
print(f(n,m))
if __name__=="__main__":
main()
#8Ackermann函数
def Ackermann(m,n):
if m==0:
return n+1
elif n==0:
return Ackermann(m-1,1)
else:
return Ackermann(m,n-1)
def main():
m=int(input("Please enter a number for m:"))
n=int(input("Please enter a number for n:"))
print(Ackermann(m,n))
if __name__=="__main__":
main()