Python程序设计基础(第十一章 继承 第十二章 递归 练习记录)

继续上次的练习

继承

本章继续学习继承和多态,所涉及的主题包括超类、子类以及__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()
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值