值此考试周之际,实在无心复习,苦于离散,微积分久之困惑,无从下手,接续寒假未竟之课程,作此blog。

看不懂的单词

全英文实在难顶,只能慢慢一句一句地适应,在这里记下阅读文档过程中不认识的单词

muster:号召,召集

irratate:刺激,激怒

vanquish:征服

pester:纠缠

airborne:空中

succumb:屈服

wrath:愤怒

paradigm:范例

graphical user interface:GUI

fleet:舰队

expend:花费(这么简单的都认不得了……)

wasp:黄蜂

encapsulate:封装

swarm:一群

constarint:约束

frail:脆弱

onslaught:猛攻

vault:保险库

laser:激光

语法知识

带默认值参量的函数定义方法:

1
def __init__(self, name, exit=None):

Ants

记录遇到的第一个问题:

thrower ant的nearest_bee方法实现中,定义上下界来让不同的子类具有自定义的攻击范围,自定义的方法有两种,一种是子类定义init函数,init函数是“magic method”,在我们不定义的时候编译器默认实现,我们定义之后可以根据需要,自定义输入的参数,根据参数来创建对象。另一种方式是直接在子类的类属性里添加即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def nearest_bee(self):
P = self.place
distance = 0
while P.is_hive is False:
if P.bees == []:
P = P.entrance
distance += 1
else:
if distance >= self.lower_bound and distance <= self.upper_bound:
return random_bee(P.bees)
else:
P = P.entrance
distance += 1
return None

第二个问题:子类重写父类方法的过程出现死递归

在fireant的子类里重写父类的reduce_health方法,我们应在其中显示地调用超类的reduce_health,而不是直接在子类里调用该方法,如果直接调用,子类优先调用重写后的reduce_health方法,这样就会陷入死递归

1
2
3
4
5
class FireAnt(Ant):
def reduce_health(self, amount):
super().reduce_health(amount) # 正确调用父类的 reduce_health 方法
if self.health <= 0:
self.place.remove_insect(self)

第三行也可以写作

1
Ant.reduce_health(self,amount)

要注意的是,对以列表表示的bee而言,每一次fireant的攻击我们都应该对一个备份进行,否则可能因为有bee被打败,导致遍历出错,同时每一轮在fireant死后的攻击前也要重新copy,否则在对原来列表中进行遍历,可能会对None操作,导致段错误

一个有意思的点:如何实现ContainerAnt

一个方格内只能放一只蚂蚁,那么如何实现ContainerAnt使得两个蚂蚁在一个方格上呢,为Container写两个属性,CanContain和ant_contained,前者判断能否储存蚂蚁,后者对多的蚂蚁进行储存。