Python 37讲课后题
第三十七讲课后题,我只能生成1条鱼。代码如下:
import random as r
class Turtle:
power = 100
begin_x = r.choice(range(11))
begin_y = r.choice(range(11))
def move(self):
new_x = self.begin_x + r.choice([-2,-1,0,1,2])
new_y = self.begin_y + r.choice([-2,-1,0,1,2])
newpower = self.power - 1
if new_x > 10:
new_x = new_x - 10
elif new_x < 0:
new_x = 10 - (-new_x)
if new_y > 10:
new_y = new_y - 10
elif new_y < 0:
new_y = 10 - (-new_y)
self.begin_x = new_x
self.begin_y = new_y
self.power = newpower
begin_x = self.begin_x
begin_y = self.begin_y
power = self.power
def eat(self):
newpower = self.power + 20
if newpower >100:
newpower = 100
self.power = newpower
power = self.power
class Fish:
begin_x = r.choice(range(11))
begin_y = r.choice(range(11))
def move(self):
new_x = self.begin_x + r.choice([-1,0,1,])
new_y = self.begin_y + r.choice([-1,0,1,])
if new_x > 10:
new_x = new_x - 10
elif new_x < 0:
new_x = 10 - -(new_x)
if new_y > 10:
new_y = new_y - 10
elif new_y < 0:
new_y = 10 - (-new_y)
self.begin_x = new_x
self.begin_y = new_y
begin_x = self.begin_x
begin_y = self.begin_y
t = Turtle()
f = Fish()
while True:
if t.power == 0:
print('乌龟没吃到鱼,已经累死了.....')
break
elif (t.begin_x,t.begin_y) == (f.begin_x,f.begin_y):
print('乌龟在 %s 位置吃掉了鱼' % )
break
else:
print('乌龟在 %s 位置,鱼在 %s 位置' % ((t.begin_x,t.begin_y),(f.begin_x,f.begin_y)))
t.move()
f.move()
答案用了__init__,为什么要用这个。 如字面上的意思,初始化(initialization)类元素 本帖最后由 jackz007 于 2021-12-4 17:48 编辑
class Turtle:
def __init__(self):
# 初始体力
self.power = 100
# 初始位置随机
self.x = r.randint(legal_x, legal_x)
self.y = r.randint(legal_y, legal_y)
这个 __init__()在你定义乌龟对象的时候,会初始化其随机位置,并初始化其体力为 "满血" 状态。
class Fish:
def __init__(self):
self.x = r.randint(legal_x, legal_x)
self.y = r.randint(legal_y, legal_y)
这个 __init__() 会在你定义每一条鱼的时候,会为其生成随机位置。
这样生成 10 条鱼:
for i in range(10):
new_fish = Fish()
fish.append(new_fish)
然后,你可以用循环移动乌龟和这 10 条鱼,并在每次移动后,检测每条鱼和乌龟的坐标重合情况,及时删除与乌龟坐标重合的小鱼,直到乌龟被 "累死" 或小鱼儿被 "吃" 尽。 muxuehan9201 发表于 2021-12-4 23:18
我好像整明白了 是不是类里面对属性的定义是公有的,__init__()构造方法是实例对象独有的,所以楼主用属 ...
没错,兄弟,你的理解完全正确。 jackz007 发表于 2021-12-4 17:42
这个 __init__()在你定义乌龟对象的时候,会初始化其随机位置,并初始化其体力为 "满血" 状态 ...
soga,秒懂!!谢谢!! jackz007 发表于 2021-12-4 17:42
这个 __init__()在你定义乌龟对象的时候,会初始化其随机位置,并初始化其体力为 "满血" 状态 ...
还有一个问题,小甲鱼那个代码没有考虑到刚生成的乌龟和鱼也可能回出现在同意地方啊,有可能有一条鱼和乌龟出生在一个地方,刚出来就被吃掉了!
页:
[1]