31
# 数列 1 1 2 3 5 8 13 21 34
def fibonacci(n):
if n < 0:
print("输入错误")
return -1
if n == 1 or n == 2:
return 1
else :
return fibonacci(n-1) + fibonacci(n-2)
number = int(input("请输入当前第几个月:"))
result = fibonacci(number)
print (result)
32
def hanoi(n,x,y,z):
if n == 1:
print( x,"->" ,z)
else :
# 将前n-1个盘子从x 移动到 y上
hanoi(n-1,x,z,y)
# 将最下面一个盘子移动到 z上
print(x,"->",z)
# 将 y上的n-1个盘子移动到z上
hanoi(n-1,y,x,z)
n = int(input("请输入层数:"))
hanoi(n,"x","y","z")
33
class Ball:
def __init__ (self,name):
self.name = name
def kick(self):
print("I am %s"%self.name)
a = Ball("A")
a.kick()
34
class Rectangle():
def __init__(self,x,y):
self.x = x
self.y = y
def getPeri(self):
z = (self.x + self.y) * 2
print(z)
def getArea(self):
s = self.x * self.y
print(s)
rect = Rectangle(3,4)
rect.getPeri()
rect.getArea()
35
class Ball:
def setName(self,name):
self.name = name
def kick(self):
print("I am %s"%self.name)
a = Ball()
a.setName("A")
b = Ball()
b.setName("B")
a.kick()
b.kick()
36
# 类,大写字母开头
class Turtle :
# 属性
color = "green"
weight = 10
legs = 4
shell = True
mouth = "big"
# 方法
def climb(self):
print("Climbing")
def run(self):
print("running")
def bite(self):
print("bite bite bite")
def eat(self):
print("eating")
def sleep(self):
print("good night")
# 将类赋值给tt
tt = Turtle()
# Turtle().climb() 等同于 tt.climb()
# 方法调用
tt.climb()
tt.run()
tt.bite()
tt.eat()
tt.sleep()
37
class Parent:
def hello(self):
print("正在调用父类的方法...")
class Child(Parent):
def hello(self):
print("正在调用子类的方法...")
p = Parent()
p.hello()
# 运行结果:正在调用父类的方法...
c = Child()
c.hello()
# 正在调用子类的方法...,如果子类中有与父类相同的方法或者属性,则覆盖父类,执行子类的方法
38
class Parent:
def hello(self):
print("正在调用父类的方法...")
class Child(Parent):
pass
p = Parent()
p.hello()
# 运行结果:正在调用父类的方法...
c = Child()
c.hello()
# 运行结果:正在调用父类的方法.
39
# 多重继承
class Base1:
def fool1(self):
print("我是fool1")
class Base2:
def fool2(self):
print("我是fool2")
class C(Base1,Base2):
pass
c = C()
c.fool1()
# 调用 Base1 中fool1方法
c.fool2()
# 调用 Base2中 fool2方法
40
# 组合,把不同对象放到一起 。横向。纵向是继承
class Turtle():
def __init__(self,x):
self.num = x
class Fish():
def __init__(self,y):
self.num = y
class Pool():
def __init__(self,x,y):
self.turtle = Turtle(x)
self.fish = Fish(y)
def print_num(self):
print("水里有乌龟 %d 只,小鱼 %d条" %(self.turtle.num,self.fish.num))
# self.tutle.num 是x的值
# print("%d,%d"%(1,2)) ,注意格式,没有符号,没有空格,不能有中文字符,包含括号
pool = Pool(1,10)
pool.print_num()
41
# 继承
import random as r
class Fish:
def __init__(self):
self.x = r.randint(0,10)
self.y = r.randint(0,10)
def move(self):
self.x -= 1
print("我的位置是:",self.x,self.y)
class GoldFish(Fish):
pass
class CarpFish(Fish):
pass
class Saleon(Fish):
pass
class Shark(Fish):
def __init__(self):
super().__init__() # 如果没有super方法,则不能直接继承 move方法
self.hungry = True
def eat(self):
if self.hungry :
print("我饿了")
self.hungry = False
else :
print("我吃饱了")
goldfish = GoldFish()
goldfish.move()
# 随机生成一个位置
goldfish.move()
# 移动一个位置
shark = Shark()
shark.move()
# 随机生成一个位置
shark.eat()
# 调用eat方法,执行 if 语句,我饿了
shark.eat()
# 将if执行后值改为False,执行else语句 ,我吃饱了