|
5鱼币
不知哪有问题,帮忙看一下
- import random as r
- length_y= [0,10]
- width_x = [0,10]
- class Turtle:
- def __init__(self):
- turtle_power = 100
- x = r.randint(width_x[0],width_x[1])
- y = r.randint(length_y[0],length_y[1])
- def move(self):
- new_x = x + r.choices([-2,-1,0,1,2])
- new_y = y + r.choices([-2,-1,0,1,2])
- if new_x < width_x[0]:
- new_x = width_x[0] + (width_x[0]-new_x)
- elif new_x > width_x[1]:
- new_x = width_x[1] - (new_x - width[1])
- if new_y < length_y[0]:
- new_y = length_y[0] + (length_y[0] - new_y)
- elif new_y > length_y[1]:
- new_y = length_y[1] - (new_y - length_y[1])
- return (new_x,new_y)
- def eat(self):
- turtle_power += 10
- if turtle_power > 100:
- turtle = 100
- class Fish:
- def __init__(self):
- x = r.randint(width_x[0],width_x[1])
- y = r.randint(length_y[0],length_y[1])
- def move(self):
- new_x = x + r.choices([-1,0,1])
- new_y = y + r.choices([-1,0,1])
- if new_x < width_x[0]:
- new_x = width_x[0] + (width_x[0] - new_x)
- elif new_x >width_x[1]:
- new_x = width_x[1] - (new_x - width[1])
- if new_y < length_y[0]:
- new_y = length_y[0] + (length_y[0] - new_y)
- elif new_y > length_y[1]:
- new_y = length_y[1] - (new_y - length_y[1])
- return (new_x,new_y)
- turtle = Turtle()
- fish = []
- for i in range(10):
- each_fish = Fish()
- fish.append(each_fish)
- while 1:
- if not turtle.turtle_power:
- print("乌龟的体力都耗尽了,挂掉了!")
- break
- if not len(fish):
- print("小鱼儿都被吃完了!")
- break
- pos = turtle.move()
- for each in fish[:]:
- if each.move() == pos:
- print("小鱼被吃了!!!")
- turtle.eat()
- fish.remove(each)
复制代码
本帖最后由 isdkz 于 2022-2-20 17:20 编辑
有四个问题,
第一个问题:
对象的属性需要加 self. ,因为对象在调用方法的时候会自动给第一个位置参数传入对象本身,
而第一个位置参数是self,你不加 self. 就只是定义了一个函数(方法)里面的局部变量而已
第二个问题:
你第16行和第42行的最后一个 width 少了一个 _x,因为你前面定义的变量是 width_x
第三个问题:
你第11、12、37、38行使用了random.choices() 而choices() 返回的是一个列表,你的 x 和 y 属性是整数,整数是不能跟列表相加的,
应该把 choices() 改成 choice(),不要最后的那个 s 返回的才是整数。
第四个问题:
你那个乌龟的体力只加不减,也就是说乌龟永远不会挂掉,
只要鱼没吃完就一直处于死循环没有跳出来,你应该在乌龟移动那里加个消耗体力
- import random as r
- length_y= [0,10]
- width_x = [0,10]
- class Turtle:
- def __init__(self):
- self.turtle_power = 100 # 给所有的对象属性加上 self.
- self.x = r.randint(width_x[0],width_x[1])
- self.y = r.randint(length_y[0],length_y[1])
- def move(self):
- self.new_x = self.x + r.choice([-2,-1,0,1,2]) # choices 改成 choice
- self.new_y = self.y + r.choice([-2,-1,0,1,2]) # choices 改成 choice
- if self.new_x < width_x[0]:
- self.new_x = width_x[0] + (width_x[0]-self.new_x)
- elif self.new_x > width_x[1]:
- self.new_x = width_x[1] - (self.new_x - width_x[1]) # 你这里的最后一个 width 少了_x
- if self.new_y < length_y[0]:
- self.new_y = length_y[0] + (length_y[0] - self.new_y)
- elif self.new_y > length_y[1]:
- self.new_y = length_y[1] - (self.new_y - length_y[1])
- self.turtle_power -= 1 # 消耗体力
- return (self.new_x,self.new_y)
- def eat(self):
- self.turtle_power += 10
- if self.turtle_power > 100:
- self.turtle_power = 100
- class Fish:
- def __init__(self):
- self.x = r.randint(width_x[0],width_x[1])
- self.y = r.randint(length_y[0],length_y[1])
- def move(self):
- self.new_x = self.x + r.choice([-1,0,1]) # choices 改成 choice
- self.new_y = self.y + r.choice([-1,0,1]) # choices 改成 choice
- if self.new_x < width_x[0]:
- self.new_x = width_x[0] + (width_x[0] - self.new_x)
- elif self.new_x >width_x[1]:
- self.new_x = width_x[1] - (self.new_x - width_x[1]) # 你这里的最后一个 width 少了_x
- if self.new_y < length_y[0]:
- self.new_y = length_y[0] + (length_y[0] - self.new_y)
- elif self.new_y > length_y[1]:
- self.new_y = length_y[1] - (self.new_y - length_y[1])
- return (self.new_x,self.new_y)
- turtle = Turtle()
- fish = []
- for i in range(10):
- each_fish = Fish()
- fish.append(each_fish)
- while 1:
- if not turtle.turtle_power:
- print("乌龟的体力都耗尽了,挂掉了!")
- break
- if not len(fish):
- print("小鱼儿都被吃完了!")
- break
- pos = turtle.move()
- for each in fish[:]:
- if each.move() == pos:
- print("小鱼被吃了!!!")
- turtle.eat()
- fish.remove(each)
复制代码
|
最佳答案
查看完整内容
有四个问题,
第一个问题:
对象的属性需要加 self. ,因为对象在调用方法的时候会自动给第一个位置参数传入对象本身,
而第一个位置参数是self,你不加 self. 就只是定义了一个函数(方法)里面的局部变量而已
第二个问题:
你第16行和第42行的最后一个 width 少了一个 _x,因为你前面定义的变量是 width_x
第三个问题:
你第11、12、37、38行使用了random.choices() 而choices() 返回的是一个列表,你的 x 和 y 属 ...
|