python 类和对象视频_[Python]小甲鱼Python视频第037课(类和对象:面向对象编程 )课后题及参考解答...

# -*- coding: utf-8 -*-

"""

Created on Mon Mar 11 20:09:54 2019

@author: Administrator

"""

"""

测试题:

0. 以下代码体现了面向对象编程的什么特征?

>>> "FishC.com".count('o')

1

>>> [1, 1, 2, 3, 5, 8].count(1)

2

>>> (0, 2, 4, 8, 12, 18).count(1)

0

多态

1. 当程序员不想把同一段代码写几次,他们发明了函数解决了这种情况。当程序员已经有了一个类,而又想建立一个非常相近的新类,他们会怎么做呢?

继承---重写

2. self参数的作用是什么?

指向当前对象

3. 如果我们不希望对象的属性或方法被外部直接引用,我们可以怎么做?

__func_name

__member_name

Python内部的name magling机制会将在头部带两个下划线的方法名或属性名改名,以实现对外隐蔽的效果

4. 类在实例化后哪个方法会被自动调用?

第一个是 __new__ 申请内存

第二个是 __init__ 构造函数

5. 请解释下边代码错误的原因:

class MyClass:

name = 'FishC'

def myFun(self):

print("Hello FishC!")

>>> MyClass.name

'FishC'

>>> MyClass.myFun()

Traceback (most recent call last):

File "", line 1, in

MyClass.myFun()

TypeError: myFun() missing 1 required positional argument: 'self'

未实例化对象,self还未分配空间

>>>

"""

"""

动动手:

0. 按照以下要求定义一个游乐园门票的类,并尝试计算2个成人+1个小孩平日票价。

"""

class TickitPrice():

def __init__(self,price=100,isweekend = 0,ischild = 0):

self.price = price

self.isweekend = isweekend

self.ischild = ischild

def calc_price(self):

if self.isweekend == 1:

self.price *= 1.2

if self.ischild == 1:

self.price /= 2

def get_price(self):

self.calc_price()

return self.price

#parent1 = TickitPrice(100,0,0)

#parent2 = TickitPrice(100,0,0)

#child = TickitPrice(100,0,1)

#print(parent1.get_price() + parent2.get_price() + child.get_price())

"""

1. 游戏编程:按以下要求定义一个乌龟类和鱼类并尝试编写游戏。(初学者不一定可以完整实现,但请务必先自己动手,你会从中学习到很多知识的^_^)

假设游戏场景为范围(x, y)为0<=x<=10,0<=y<=10

游戏生成1只乌龟和10条鱼

它们的移动方向均随机

乌龟的最大移动能力是2(Ta可以随机选择1还是2移动),鱼儿的最大移动能力是1

当移动到场景边缘,自动向反方向移动

乌龟初始化体力为100(上限)

乌龟每移动一次,体力消耗1

当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20

鱼暂不计算体力

当乌龟体力值为0(挂掉)或者鱼儿的数量为0游戏结束

"""

"""

这个程序没有实现每次移动全随机

"""

import random as rd

direction_list = [ 'up' , 'down' , 'left' , 'right']

x_min = 0

x_max = 10

y_min = 0

y_max = 10

class fish():

def __init__(self):

self.pos_x = rd.randint(0,10)

self.pos_y = rd.randint(0,10)

self.direction = direction_list[rd.randint(0,3)]

def move(self):

if self.direction == direction_list[0]:

if self.pos_y != y_max:

self.pos_y += 1

else:

self.direction = direction_list[1]

self.pos_y -= 1

elif self.direction == direction_list[1]:

if self.pos_y != y_min:

self.pos_y -= 1

else:

self.direction == direction_list[0]

self.pos_y += 1

elif self.direction == direction_list[2]:

if self.pos_x != x_min:

self.pos_x -= 1

else:

self.direction = direction_list[3]

self.pos_x += 1

elif self.direction == direction_list[3]:

if self.pos_x != x_max:

self.pos_x += 1

else:

self.direction = direction_list[2]

self.pos_x -= 1

class tortoise():

def __init__(self):

self.pos_x = rd.randint(0,10)

self.pos_y = rd.randint(0,10)

self.hp = 100

self.direction = direction_list[rd.randint(0,3)]

def move(self):

steps = rd.randint(1,2)

self.hp -= 1

if self.direction == direction_list[0]:

if self.pos_y < y_max - 1:

self.pos_y += steps;

elif self.pos_y == y_max - 1:

if steps == 1:

self.pos_y += steps

else:

self.direction = direction_list[1]

elif self.pos_y == y_max:

self.pos_y -= steps

self.direction = direction_list[1]

elif self.direction == direction_list[1]:

if self.pos_y > y_min + 1:

self.pos_y -= steps

elif self.pos_y == y_min + 1:

if steps == 1:

self.pos_y -= steps

else:

self.direction = direction_list[0]

elif self.pos_y == y_min:

self.pos_y += steps

self.direction = direction_list[0]

elif self.direction == direction_list[2]:

if self.pos_x > x_min + 1:

self.pos_x -= steps

elif self.pos_x == x_min+1:

if steps == 1:

self.pos_x -= steps

else:

self.direction = direction_list[3]

elif self.pos_x == x_min:

self.pos_x += steps;

self.direction = direction_list[3]

elif self.direction == direction_list[3]:

if self.pos_x < x_max - 1:

self.pos_x += steps

elif self.pos_x == x_max - 1:

if steps == 1:

self.pos_x += steps;

else:

self.direction = direction_list[2]

elif self.pos_x == x_max:

self.pos_x -= steps;

self.direction = direction_list[2]

class Game():

def __init__(self):

self.fishs = [ fish() for i in range(10) ]

self.tortoise = tortoise()

def run(self):

while True:

for each in self.fishs:

each.move()

self.tortoise.move()

func = lambda temp_fish,pos_x = self.tortoise.pos_x,pos_y=self.tortoise.pos_y : True if temp_fish.pos_x != pos_x or temp_fish.pos_y != pos_y else False

self.fishs = list(filter(func,self.fishs))

if self.tortoise.hp == 0 or len(self.fishs) == 0:

break

print("self.tortoise.hp = %d" % self.tortoise.hp )

print("len(self.fishc) = %d" % len(self.fishs))

game = Game()

game.run()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值